如何使用 AWS CLI 从 Elastic Container Registry 映像创建 lambda 函数?
How can I create a lambda function from an Elastic Container Registry image using AWS CLI?
我创建了这个 lambda 函数:
exports.lambdaHandler = async event => {
const body =
message: "Hello"
};
return {
statusCode: 200,
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(body)
};
};
我用这个 Docker 文件创建了一个 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
我得到这个错误:
An error occurred (InvalidParameterValueException) when calling the
CreateFunction operation: Runtime and Handler are mandatory parameters
for functions created with deployment packages.
没有意义,因为它是一个 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 是否需要设置 package-type 才能获得这些值。
这似乎对我有用。您需要删除处理程序、运行时并确保将包类型指定为 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)
我创建了这个 lambda 函数:
exports.lambdaHandler = async event => {
const body =
message: "Hello"
};
return {
statusCode: 200,
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(body)
};
};
我用这个 Docker 文件创建了一个 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
我得到这个错误:
An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Runtime and Handler are mandatory parameters for functions created with deployment packages.
没有意义,因为它是一个 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 是否需要设置 package-type 才能获得这些值。
这似乎对我有用。您需要删除处理程序、运行时并确保将包类型指定为 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)