【问题标题】:How can I create a lambda function from an Elastic Container Registry image using AWS CLI?如何使用 AWS CLI 从 Elastic Container Registry 映像创建 lambda 函数?
【发布时间】:2021-03-14 15:06:24
【问题描述】:

我已经创建了这个 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 操作:Runtime 和 Handler 是强制参数 对于使用部署包创建的函数。

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

【问题讨论】:

  • 您有最新的 awscli 吗?看起来该功能只有一天的历史。
  • 是的,我安装了 2.1.6 版本,这是最新的。是的,AWS 昨天宣布了这一点……

标签: amazon-web-services docker aws-lambda aws-api-gateway amazon-ecr


【解决方案1】:

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

【讨论】:

  • 我已经为此做了一个基本的hello world example,以防万一;我需要它是因为 CLI lambda 文档太差,而且 docker-in-Lambda 公告页面太庞大。
  • 必须使用 AWS Cli 2.x 版本(1.x 不支持),不需要添加 --handler 或 --runtime 属性。
【解决方案2】:

您的创建函数如下所示:

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 才能获取这些值。

【讨论】:

  • 似乎不起作用,我得到了一个 An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Please provide a source for function code. 我已经仔细检查了 docs 并且语法似乎很好。
  • 你是不是碰巧加了package-type
猜你喜欢
  • 2016-03-25
  • 2019-09-25
  • 2016-02-20
  • 2020-09-11
  • 2020-03-03
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多