如何在AWS SAM定义容器部署的Lambda时使用账号内已有ECR镜像
问题解答
完全支持直接引用预先构建好的ECR镜像,无需在SAM部署阶段执行镜像构建操作,同账号下其他CI/CD流水线生成的符合规范的Lambda镜像都可以直接引用。
需要修改的YAML模板部分
- 删除
AWS::Serverless::Function资源下的全部Metadata块:该块是SAM用于部署阶段构建镜像的配置参数,无需构建时可直接移除 - 在函数的
Properties块中新增ImageUri字段,填写你要引用的ECR镜像的完整访问地址即可
修改后的完整配置示例
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: demo app Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image # 新增字段:替换为你实际的ECR镜像地址 ImageUri: 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-lambda:v20240501 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get HolaWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image # 新增字段:替换为你实际的ECR镜像地址 ImageUri: 123456789012.dkr.ecr.us-east-1.amazonaws.com/hola-lambda:v20240501 Events: HolaWorld: Type: Api Properties: Path: /hola Method: get Outputs: HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HolaWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hola World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hola/"
注意事项
- 引用的ECR镜像必须符合Lambda容器镜像规范,需要包含Lambda运行时接口客户端、正确的启动配置,建议基于AWS官方提供的Lambda基础镜像构建
- 执行SAM部署操作的IAM身份,需要拥有对应ECR镜像的拉取权限,至少包含
ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability三个权限 - 如果ECR镜像开启了KMS加密,还需要为部署身份配置对应KMS密钥的解密权限
PackageType: Image配置必须保留,不能修改为Zip类型
内容的提问来源于stack exchange,提问作者Rushy Nova
相关产品推荐
相关产品推荐

