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

时间:2018-12-05 14:40:20

标签: amazon-web-services amazon-dynamodb amazon-cloudformation amazon-iam aws-organizations

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

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

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

我发现我可能可以使用CF Conditions +参数来仅在首次创建时切换全局资源创建,但这看起来并不好...

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

关于执行此操作的正确方法的任何想法?

1 个答案:

答案 0 :(得分:2)

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

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

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