在AWS::Lambda::Function指定ImageUri触发CloudFormation错误如何解决
问题触发原因
- 核心原因:AWS Lambda目前不支持直接引用ECR Public(公开ECR画廊)中的镜像作为函数的容器镜像,仅支持引用与Lambda函数同AWS账户、同部署区域的私有ECR仓库中的镜像。
- 次要排查点:即使镜像移到私有ECR后,也需要确认镜像符合Lambda容器镜像规范(内置Lambda运行时接口、正确配置ENTRYPOINT/CMD)、镜像架构与模板中声明的
arm64架构匹配。
修复步骤
- 拉取公开ECR镜像到本地:
docker pull public.ecr.aws/g9c9m7n7/aws-cost-anomaly-slack-notifier:latest
- 在你要部署Lambda的AWS区域创建私有ECR仓库,给本地镜像打私有仓库标签,替换下方占位符为你自己的账户信息、区域信息、仓库名:
docker tag public.ecr.aws/g9c9m7n7/aws-cost-anomaly-slack-notifier:latest <AWS账户ID>.dkr.ecr.<部署区域>.amazonaws.com/<自定义仓库名>:latest
- 登录你的私有ECR后推送镜像:
aws ecr get-login-password --region <部署区域> | docker login --username AWS --password-stdin <AWS账户ID>.dkr.ecr.<部署区域>.amazonaws.com docker push <AWS账户ID>.dkr.ecr.<部署区域>.amazonaws.com/<自定义仓库名>:latest
- 修改CloudFormation模板中的
ImageUri为你私有ECR的镜像地址:
Code: ImageUri: <AWS账户ID>.dkr.ecr.<部署区域>.amazonaws.com/<自定义仓库名>:latest
- 确认Lambda执行角色包含以下ECR拉取权限:
{ "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Resource": "*" }
内容的提问来源于stack exchange,提问作者Bruno Schaatsbergen
相关产品推荐
相关产品推荐

