使用 Docker 支持的 AWS Lambda 时如何使用 CLI "deploy new image"?

When using Docker backed AWS Lambda how to "deploy new image" with CLI?

我已经使用 Terraform 部署了我的 lambda。它成功指向 ECR,图像以预期的 ENTRYPOINT 运行。但是,每次我将新代码推送到 ECR 时,我都必须转到 Web 控制台,单击“部署新映像”,否则 lambda 会运行旧映像。

还有,我尝试使用:latest作为标签,但似乎没有帮助。我能够通过上传 :2:3 然后手动将 lambda 指向那些图像来强制使用新图像。如果有一种方法可以使用 :latest 标签,那会很方便。

我更愿意使用 bash 或 boto 来执行此操作,但从我阅读的文档来看,没有明显的方法来执行此操作。

这个.

将图像存储与部署过程分开是明智的。 我建议使用 semver 对 docker 图像进行版本控制。 https://semver.org/

然后您可以将 lambda docker 图像的版本号存储在 terraform 中的一个变量中,并将其传递给您的 lambda 模块。

当然,这将是 运行 terraform apply 部署的额外步骤,但这会锁定您的系统状态,并使重现环境状态变得更加容易。

使用 aws cli 更新 lambda 函数。

假设您有配置文件或在您的环境中设置了适当的凭据,您可以调用 aws lambda update-function-code 并提供所需的图像 uri。由于您已经定义了 uri,您可以查询该函数的值。

aws lambda update-function-code --function-name $MY_FUNC --image-uri $(aws lambda get-function --function-name $MY_FUNC | jq -r '.Code.ImageUri')

我正在使用 jq 来提取 ImageUri,但我确信还有很多其他方法和意见可以解决这个问题。

如果您查看从 aws lambda get-function --function-name $MY_FUNC 返回的整个 .Code 对象,您可以检查 sha256 并查看更新后的函数图像。

当前文档:AWS CLI update-function-code docs