Amazon web services 如何使用AWS CLI从弹性容器注册表映像创建lambda函数?

Amazon web services 如何使用AWS CLI从弹性容器注册表映像创建lambda函数?,amazon-web-services,docker,aws-lambda,aws-api-gateway,amazon-ecr,Amazon Web Services,Docker,Aws Lambda,Aws Api Gateway,Amazon Ecr,我创建了这个lambda函数: exports.lambdaHandler = async event => { const body = message: "Hello" }; return { statusCode: 200, headers: { "Content-Type": "application/json"

我创建了这个lambda函数:

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函数

我已尝试使用此命令:

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
我得到了这个错误:

调用时发生错误InvalidParameterValueException CreateFunction操作:运行时和处理程序是必需参数 用于使用部署包创建的函数


这没有意义,因为它是一个基于Docker映像的lambda函数,因此不需要参数。

您的创建函数如下所示:

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来获得这些值。

这似乎对我有效。您需要删除处理程序、运行时,并确保将包类型指定为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版

是否有最新的awscli?看起来这个功能只有一天了。是的,我已经安装了2.1.6版,这是最新的版本。是的,AWS昨天宣布了这一点…似乎不起作用,我在调用CreateFunction操作时收到一个错误InvalidParameterValueException:请提供函数代码的源代码。我已经仔细检查了,语法似乎很好。您是否碰巧添加了包类型?我已经为此做了一个基本的检查,以防它有所帮助;我需要它,因为CLI lambda文档太差,lambda公告页面中的docker太过强大。