部署包含全球资源的多区域 CloudFormation 堆栈的正确方法是什么?

Tha*_*Guy 3 amazon-web-services aws-cloudformation amazon-dynamodb amazon-iam aws-organizations

我有一个 cloudformation 堆栈模板,其中包括区域资源(lambda、api、主题等)和全局资源(用户、策略、route53、cloudfront、dynamodb 全局表等),并希望将其部署到同一区域的多个区域AWS 帐户。

我无法直接在多个区域部署此堆栈模板,因为全局资源在第一次创建后就已经存在。

我知道我可以将所有内容拆分为两个单独的堆栈模板,但我更愿意避免这种情况并将所有内容保留在同一个堆栈模板中。

我看到我可能可以使用 CF条件+ 参数仅在第一次创建时切换全局资源创建,但这看起来不太好......

我想知道是否可以利用一些 CloudFormation 功能(例如 StackSets)或其他功能来实现这一目标。

知道什么是正确的方法来做到这一点吗?

mat*_*sev 6

解决方案就在您手中。我建议您执行以下操作:

  • 为全局资源创建一个单独的模板(是的,我知道你不喜欢它,但根据我的经验,它效果很好)
  • 使用AWS::SSM::Parameter在 SSM 中存储对共享全局资源的引用
  • 部署区域堆栈并取消引用全局资源(使用参数,例如AWS::SSM::Parameter::Value<String>动态引用,例如{{resolve:ssm:S3AccessControl:2}}

您可以将StackSets其用于区域堆栈部署,也可以创建一个参数化构建脚本,一次部署一个区域堆栈(在本地执行或最好由 CI/CD 服务器执行)。