能否不使用SAM仅通过CloudFormation YAML部署AWS Lambda Containers
完全可行。SAM只是在CloudFormation基础上做了语法简化和流程封装,所有SAM支持的Lambda容器部署能力,都可以通过原生CloudFormation YAML实现,不存在任何功能限制。
核心部署逻辑
- 第一步:提前将构建好的Lambda容器镜像推送至和部署区域同地域的Amazon ECR仓库,确保仓库权限允许Lambda服务拉取镜像
- 第二步:在CloudFormation模板中定义
AWS::Lambda::Function资源,将PackageType参数设置为Image,在Code.ImageUri字段填写你的ECR镜像地址即可
最简模板示例
AWSTemplateFormatVersion: '2010-09-09' Resources: # Lambda容器函数定义 ContainerLambdaDemo: Type: AWS::Lambda::Function Properties: FunctionName: container-lambda-demo PackageType: Image # 替换为你自己的ECR镜像URI Code: ImageUri: 123456789012.dkr.ecr.us-east-1.amazonaws.com/lambda-container-demo:v1 # 替换为你自己的Lambda执行角色ARN Role: arn:aws:iam::123456789012:role/lambda-container-exec-role MemorySize: 512 Timeout: 60 # 可选:覆盖镜像默认的入口、命令和工作目录,不需要可删除 ImageConfig: Command: - "index.handler"
和SAM部署的区别
- 无需安装SAM CLI,也不需要执行
sam build/sam deploy等专属命令,直接使用CloudFormation标准部署方式即可,比如控制台上传模板、调用aws cloudformation deploy命令 - SAM自带镜像构建、ECR自动推送的流程能力,使用原生CloudFormation需要你自行完成镜像构建、ECR推送的前置操作
- 所有Lambda容器的配置能力完全一致,包括环境变量、VPC配置、并发设置、文件系统挂载等,都可以在原生CloudFormation资源中直接配置
注意:如果使用私有ECR仓库,需要保证Lambda执行角色拥有
ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability三个权限,否则Lambda会因为无法拉取镜像启动失败。
内容的提问来源于stack exchange,提问作者Deepak Rohilla
相关产品推荐
相关产品推荐

