【问题标题】:lambda container image serverlesslambda 容器镜像无服务器
【发布时间】:2021-02-17 21:41:51
【问题描述】:

我有一个使用无服务器的有效 lambda 部署。我正在尝试将 lambda 函数放在 docker 映像中。最初我有一个包含 2 个 module.exports 的 handler.js,在我原来的 serverless.yml 中我指定了:

functions:
  func1:
    handler: handler.func1
    events:
      ...
  func2:
    handler: handler.func2
    events:
      ...

新的serverless.yml如下:

functions:
  func1:
    image: <account>.dkr.ecr.<region>.amazonaws.com/<repository>@<digest>
    events:
      ...
  func2:
    image: <account>.dkr.ecr.<region>.amazonaws.com/<repository>@<digest>
    events:
      ...

我的问题是,我应该在 Dockerfile 中的 CMD 中放入什么,以便我可以同时访问 func1 和 func2?

目前我有:

FROM public.ecr.aws/lambda/nodejs:14
ARG FUNCTION_DIR="/var/task"

# Create function directory
RUN mkdir -p ${FUNCTION_DIR}

# Copy handler function and package.json
COPY handler.js ${FUNCTION_DIR}
COPY package.json ${FUNCTION_DIR}

# Install NPM dependencies for function
RUN npm install

# Set the CMD to your handler
CMD [ "handler" ]

【问题讨论】:

    标签: aws-lambda dockerfile serverless


    【解决方案1】:

    由于您将 AWS 基础映像用于 Node.js,因此您必须像在 serverless.yml 中那样定义您的 handler。像这样:

    CMD [ "handler.func1" ]
    

    AWS documentation 中有一个与您的代码非常相似的示例,它解释了您应该如何设置CMD 参数。

    CMD 参数提供给ENTRYPOINT。来自AWS Docs

    CMD – 指定要使用 ENTRYPOINT 传入的参数。

    【讨论】:

    • 感谢您的回复。如果我指定 CMD ["handler.func1"] 如何访问 func2?
    • 那么您的第二个函数需要第二个容器;) 您只需在压缩函数时指定 handler 属性(而不是使用图像)。
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 2011-10-31
    • 2020-05-20
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多