部署包含全球资源的多区域 CloudFormation 堆栈的正确方法是什么?
What is the proper way to deploy a multi-region CloudFormation stack that includes global resources?
我有一个包含区域资源(lambda、api、主题等)和全局资源(用户、策略、route53、cloudfront、dynamodb 全局表等)的 cloudformation 堆栈模板,并且想要将其部署到同一 AWS 账户中的多个区域。
我不能直接在多个区域部署这个堆栈模板,因为全局资源在第一次创建后就已经存在了。
我知道我可以将所有内容拆分到两个单独的堆栈模板中,但我更愿意避免这种情况并将所有内容保留在同一个堆栈模板中。
我看到我可以使用 CF Conditions + 参数仅在第一次创建时切换全局资源创建,但这看起来不太好...
我想知道我是否可以利用某些 CloudFormation 功能(如 StackSets 或其他功能)来实现这一目标。
知道什么是正确的方法吗?
解决方案就在您手中。我建议您执行以下操作:
- 为全局资源创建一个单独的模板(是的,我知道你不喜欢它,但根据我的经验它很有效)
- 使用 AWS::SSM::Parameter
在 SSM 中存储对共享全局资源的引用
- 部署区域堆栈并取消引用全局资源(使用 Parameters, such as the
AWS::SSM::Parameter::Value<String>
or dynamic reference,例如 {{resolve:ssm:S3AccessControl:2}}
)
您可以使用 StackSets
进行区域堆栈部署,或者创建一个参数化的构建脚本,一次部署一个区域堆栈(在本地执行或最好由您的 CI/CD 服务器执行).
我有一个包含区域资源(lambda、api、主题等)和全局资源(用户、策略、route53、cloudfront、dynamodb 全局表等)的 cloudformation 堆栈模板,并且想要将其部署到同一 AWS 账户中的多个区域。
我不能直接在多个区域部署这个堆栈模板,因为全局资源在第一次创建后就已经存在了。
我知道我可以将所有内容拆分到两个单独的堆栈模板中,但我更愿意避免这种情况并将所有内容保留在同一个堆栈模板中。
我看到我可以使用 CF Conditions + 参数仅在第一次创建时切换全局资源创建,但这看起来不太好...
我想知道我是否可以利用某些 CloudFormation 功能(如 StackSets 或其他功能)来实现这一目标。
知道什么是正确的方法吗?
解决方案就在您手中。我建议您执行以下操作:
- 为全局资源创建一个单独的模板(是的,我知道你不喜欢它,但根据我的经验它很有效)
- 使用 AWS::SSM::Parameter 在 SSM 中存储对共享全局资源的引用
- 部署区域堆栈并取消引用全局资源(使用 Parameters, such as the
AWS::SSM::Parameter::Value<String>
or dynamic reference,例如{{resolve:ssm:S3AccessControl:2}}
)
您可以使用 StackSets
进行区域堆栈部署,或者创建一个参数化的构建脚本,一次部署一个区域堆栈(在本地执行或最好由您的 CI/CD 服务器执行).