【问题标题】:CloudFormation for multiple parameter files and a single templateCloudFormation 用于多个参数文件和单个模板
【发布时间】:2020-09-02 09:29:38
【问题描述】:

我目前将所有参数存储在 Systems Manager Parameter Store 中并在 CloudFormation 堆栈中引用它们。

我现在陷入了同一个 Cloudformation 模板的参数不同的情况。

对于实例服务器 A,具有参数 m5.large 实例类型、子网 1、主机名 1,同样服务器 B 可以具有 m5.xlarge、子网 2、主机名 2 等。这2个参数是针对同一个CFN模板的。

如何以 CI/CD 方式处理这种情况?

我当前的设置涉及 SSM 参数存储 -> CloudWatch Events -> CodePipeline -> Cloudformation。

【问题讨论】:

    标签: amazon-cloudformation


    【解决方案1】:

    我假设您使用 AWS CodePipeline。每个 CodePipeline 阶段由多个 stage actions 组成。操作配置属性之一是 CloudFormation 模板,但也可以将操作配置为包含 CloudFormation 模板,还可以提供 template configuration。如果您将服务器名称定义为 CloudFormation 堆栈中的参数,那么您可以为每个 CloudFormation 参数提供不同的配置。

    假设您在 CloudFormation 堆栈中仅定义一个服务器并在您的代码管道中使用该模板两次,那么您可以为两个阶段操作提供不同的配置。根据此配置,您可以决定要检索参数存储中的哪个参数。当然,这意味着您的参数存储也应该被参数化,例如而不是参数instancetype 你可能有参数servera/instancetype 和serverb/instancetype

    但是我认为最好只在提供给操作声明的模板配置文件中定义参数。例如,在您的 CloudFormation 模板中定义参数instancetype 并使用两个不同的配置文件(每个堆栈一个),其中第一个模板配置文件可能是instancetype: m5.large,第二个配置文件可能是instancetype: m5.xlarge。这使您的 CloudFormation 堆栈历史记录更加明确、更易于阅读,并且不再需要将参数存储用于非机密。

    【讨论】:

    • 感谢您对此的详细解释。但是,如果 CodePipeline 中有多个操作,如果我理解正确,即使单个模板配置发生更改,它们也会全部触发?
    • 这些 CloudFormation 模板将作为 CodeCommit 存储库的一部分进行存储
    • 是的,管道将触发多个操作,但是 cloudformation 足够聪明,可以先创建变更集,如果没有任何更改,则 cloudformation 堆栈将不会更新。动作也可以并行运行。是的,将 CloudFormation 模板存储在您的 CodeCommit 存储库中是最佳实践。有关原因的更多详细信息,请查看基础架构即代码。
    猜你喜欢
    • 2023-01-12
    • 2014-10-06
    • 2021-05-07
    • 2018-07-31
    • 2017-10-10
    • 2019-06-21
    • 2020-01-07
    • 1970-01-01
    • 2018-01-26
    相关资源
    最近更新 更多