如何通过eu-west-1的CloudFormation栈在us-east-1部署Lambda函数(非自定义资源)
跨区域通过CloudFormation部署Lambda函数的方案
一、通用跨区域创建/部署Lambda的方法
这里有两种主流的原生方案,完全不需要依赖自定义资源:
1. 使用CloudFormation StackSets(官方推荐多区域/多账户部署方式)
StackSets是CloudFormation专门用来批量管理多区域、多账户栈的服务,完美匹配你不想用自定义资源的需求。具体操作逻辑如下:
- 在你的**管理员区域(eu-west-1)**创建一个StackSet,把定义Lambda函数的CloudFormation模板配置进去。
- 设定StackSet的部署目标,明确指定要部署到的区域(比如us-east-1),同时提前配置好StackSet所需的服务角色,确保它能在目标区域创建资源。
- 一旦StackSet创建完成,CloudFormation会自动在us-east-1区域生成对应的栈和Lambda函数;后续如果要更新Lambda,直接修改StackSet就能同步到目标区域,非常省心。
给你一个简单的Lambda模板片段,可以直接用到StackSet里:
AWSTemplateFormatVersion: '2010-09-09' Resources: MyCrossRegionLambda: Type: AWS::Lambda::Function Properties: Handler: index.lambda_handler Runtime: python3.11 Code: ZipFile: | import json def lambda_handler(event, context): return { 'statusCode': 200, 'body': json.dumps('Hello from cross-region Lambda!') } Role: !GetAtt LambdaExecutionRole.Arn LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
2. 通过AWS CLI/SDK跨区域部署独立栈
如果只是单次从eu-west-1触发部署到us-east-1,不需要批量管理,你可以在eu-west-1的环境(比如EC2实例、本地CLI)执行跨区域命令:
- 第一步:先把Lambda代码打包并上传到us-east-1区域的S3桶(也可以开启S3跨区域复制,确保目标区域能访问代码包)。用
aws cloudformation package命令指定目标区域的桶:aws cloudformation package \ --template-file lambda-template.yaml \ --s3-bucket my-us-east-1-bucket \ --region us-east-1 \ --output-template-file packaged-template.yaml - 第二步:用打包后的模板在us-east-1创建栈:
aws cloudformation deploy \ --template-file packaged-template.yaml \ --stack-name MyCrossRegionLambdaStack \ --region us-east-1 \ --capabilities CAPABILITY_IAM
二、针对你的特定场景(从eu-west-1栈部署到us-east-1,不用自定义资源)
优先选CloudFormation StackSets,这是最贴合需求的原生方案:
- 你不需要在eu-west-1的栈里写任何自定义资源逻辑,只需要在eu-west-1创建StackSet,指定us-east-1作为目标区域就行。
- StackSets会自动处理跨区域的资源创建、权限同步,后续更新Lambda时,直接修改StackSet就能同步到目标区域,维护成本极低。
注意事项
- Lambda代码包存储:如果你的Lambda代码体积较大,建议在us-east-1单独创建S3桶存储代码包,避免跨区域访问的延迟和额外成本;用CloudFormation打包命令时,记得指定目标区域的桶。
- IAM权限:不管用StackSets还是CLI部署,都要确保执行部署的实体(比如IAM用户、角色)拥有跨区域操作CloudFormation、Lambda的权限,以及对应S3桶的访问权限。
内容的提问来源于stack exchange,提问作者ABCD
相关产品推荐
相关产品推荐

