如何配置CloudFormation StackSet实现全局IAM与区域Lambda分区域部署?
CloudFormation StackSet 全局/区域资源分离部署解决方案
方案1:拆分两个独立StackSet(生产环境推荐)
该方案权责拆分清晰,全局资源的变更不会触发所有区域栈的更新,风险更低。
- 单独创建1个全局资源专属StackSet:仅包含IAM角色这类全局资源,部署范围仅选择1个你指定的主区域(例如us-east-1)。由于IAM是全局服务,任意区域部署一次全账号生效,不会出现重复创建问题。
- 再创建1个区域级资源专属StackSet:仅包含Lambda、区域级安全组、触发器等需要多区域部署的资源,部署范围选择所有目标区域。模板中直接引用全局StackSet输出的IAM角色ARN即可,不需要重复创建角色。
方案2:单StackSet模板加条件判断(适合小型场景,无需拆分Stack)
通过CloudFormation内置条件规则,控制全局资源仅在主区域创建:
- 在模板的
Conditions块中定义主区域判断规则,直接调用AWS内置的区域伪参数即可,不需要额外传参:
Conditions: # 替换引号内的值为你指定的主区域ID,例如cn-north-1、us-east-1 IsPrimaryRegion: !Equals [!Ref 'AWS::Region', 'us-east-1']
- 给所有全局IAM资源添加
Condition属性,指定仅主区域部署时才创建该资源:
Resources: # 全局IAM角色,仅主区域创建 LambdaExecutionRole: Type: AWS::IAM::Role Condition: IsPrimaryRegion Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws-cn:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # 区域级Lambda资源,所有区域都会创建 RegionLambda: Type: AWS::Lambda::Function Properties: Runtime: python3.9 Code: S3Bucket: your-bucket S3Key: lambda-code.zip Handler: index.handler # 直接引用全局角色ARN即可,非主区域也可正常调用全局IAM资源 Role: !GetAtt LambdaExecutionRole.Arn
注意事项
- 全局资源创建后建议通过模板的
Outputs块加Export配置输出ARN,方便其他Stack直接引用,无需手动维护资源ID。 - 若使用单模板条件判断方案,不要在非主区域的栈输出中引用仅主区域创建的资源,避免栈部署报错。
内容的提问来源于stack exchange,提问作者Prashanth
相关产品推荐
相关产品推荐

