【问题标题】:Tool to orchestrate execution of AWS CloudFormation templates用于协调 AWS CloudFormation 模板执行的工具
【发布时间】:2017-07-02 13:37:47
【问题描述】:

AWS 控制台和 CLI 非常适合对单个 AWS 账户执行单个模板。但是对于向多个帐户进行配置,它是不可用的。

我喜欢一个工具,它可以通过多个开发人员 AWS 账户一直到生产环境来协调 CloudFormation 模板的配置。在最好的情况下,该工具应该具有手动批准步骤并在执行前呈现更改集的能力。网络用户界面将是可见性的首选。

欢迎对商业和 OSS 工具提出建议。

最终可以使用 CodePipeline 吗?如果是,有任何示例说明如何做到这一点?

【问题讨论】:

  • AWS CDK?你试过了吗?

标签: amazon-web-services devops amazon-cloudformation


【解决方案1】:

2019 年 6 月 27 日更新:

多 AWS 账户使用案例变得更加普遍并得到官方支持,尤其是自 AWS Organizations 推出(发布于 27 Feb 2017;在下面我的原始答案两周后)之后。

25 Jul 2017 上,CloudFormation 推出了一项名为StackSets 的新功能,它直接支持跨多个帐户配置 CloudFormation 资源的特定用例。如今,用于管理多账户 CloudFormation 资源的最佳工具是 StackSets 功能。


我喜欢一个工具,它可以通过多个开发人员 AWS 账户一直到生产环境来协调 CloudFormation 模板的配置。

对于“多个开发人员 AWS 账户”的需求究竟来自何处,尚不清楚。通过在单个 AWS 账户(即documented best practice)中创建单个 IAM 用户,可以更好地服务于涉及在单个组织中工作的多个开发人员的大多数典型用例。除非您有特定(非标准)原因要求多个开发人员从单独的 AWS 账户工作(如果是,请将这些详细信息添加到您的问题中),强烈建议在单个 AWS 中创建单个 IAM 用户,因为它会进行配置简单得多。

在最好的情况下,该工具应该具有手动批准步骤并在执行前呈现更改集的能力。网络用户界面将是可见性的首选。

AWS CodePipeline 是完全符合此描述的工具。它支持:

最终可以使用 CodePipeline 吗?如果是,有任何示例说明如何做到这一点?

有关完整示例,请参阅 AWS CloudFormation 用户指南中的 Walkthrough: Building a Pipeline for Test and Production Stacks

【讨论】:

    【解决方案2】:

    首先,我不知道有一个工具可以提供您需要的所有功能。不过,我可以推荐 Ansible,它允许您针对多个订阅创建 CloudFormation 堆栈,并为您提供一个可见性的 Web UI。

    可以通过使用 Ansible Tower 或 Ansible 以及您选择的 CI/CD 平台(例如 TeamCity / Jenkins)来提供 Web UI。

    可以在此处查看启动 CloudFormation 堆栈并返回一些堆栈输出的示例:

    https://www.unixdaemon.net/tools/managing-cloudformation-stacks-with-ansible/

    - name: Create Webapp
    action: cloudformation
      stack_name={{ stack_name }}-webapp
      state=present
      region="{{region}}"
      template=-webapp.json
    args:
      template_parameters:
        Owner: "{{ owner }}"
        AMIId: "{{ ami_id }}"
        KeyName: "{{ keyname }}"
        AppServerFleetSize: 1
        ASGSNSArn:             "{{ asgsns['stack_outputs']['EmailSNSTopicARN']      }}"
        WebappSGID:            "{{ secgrp['stack_outputs']['WebappSGID']            }}"
        ElasticacheClientSGID: "{{ secgrp['stack_outputs']    ['ElasticacheClientSGID'] }}"
    

    【讨论】:

      【解决方案3】:

      有商业工具/服务可以做到这一点或更多:https://www.cloudaware.com

      注意:我不隶属于该公司,也没有使用过该工具

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 2020-08-17
        • 2021-07-20
        • 2016-12-12
        • 2018-05-04
        相关资源
        最近更新 更多