繁体   English   中英

如何使用 AWS CLI 从 Elastic Container Registry 映像创建 lambda function?

[英]How can I create a lambda function from an Elastic Container Registry image using AWS CLI?

我已经创建了这个 lambda function:

exports.lambdaHandler = async event => {

    const body =
        message: "Hello"
    };

    return {
        statusCode: 200,
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(body)
    };

};

我用这个 Dockerfile 创建了一个 Docker 图像:

FROM amazon/aws-lambda-nodejs:12
COPY app.js package*.json ./
RUN npm install
CMD [ "app.lambdaHandler" ]

我已将其推送到 ECR。 现在,我想创建一个运行它的 lambda function。

我试过这个命令:

aws lambda create-function --function-name greeting --role arn:aws:iam::xxxxxxxxxxxx:role/my-role --code ImageUri=xxxxxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/greeting:latest

我得到这个错误:

调用 CreateFunction 操作时发生错误(InvalidParameterValueException):Runtime 和 Handler 是使用部署包创建的函数的必需参数。

这是没有意义的,因为它是基于 Docker 图像的 lambda function ,因此不需要参数。

这似乎对我有用。 您需要删除处理程序、运行时并确保将 package 类型指定为 Image,并且

aws lambda create-function  \
--function-name greeting  \
--role  arn:aws:iam::xxxxxxxxxxx:role/my-role \
--code ImageUri=xxxxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/greeting:latest \
--package-type Image

(AWS Cli 版本 2.1.7)

您创建的 function 如下所示:

aws lambda create-function \
  --function-name greeting \
  --role arn:aws:iam::xxxxxxxxxxxx:role/my-role \
  --code ImageUri=xxxxxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/greeting:latest

从错误中,您需要指定处理程序和运行时:

aws lambda create-function \
  --function-name greeting \
  --runtime nodejs12.x
  --handler lambdaHandler
  --role arn:aws:iam::xxxxxxxxxxxx:role/my-role \
  --code ImageUri=xxxxxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/greeting:latest

这都是相当新的,并且“感觉”就像它不应该是容器定义所定义的那样是必需的......

我想知道 lambda 是否需要设置package-type才能获得这些值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM