gpt4 book ai didi

amazon-web-services - 如何在参数更新时强制 CloudFormation 堆栈更新?

转载 作者:行者123 更新时间:2023-12-04 00:16:02 24 4
gpt4 key购买 nike

我正在运行一个 AWS CloudFormation 堆栈,该堆栈接收一些参数并启动 EC2 实例以及其他 AWS 资源。这些参数被输入到 EC2 实例的用户数据中,并基于此对驻留在 EC2 实例上的 Web 应用程序进行动态更改。

CFN Parameters

UserData: 
Fn::Base64:
Fn::Join:
- ""
-
- "#!/bin/bash \n"
- "sh website-conf/website_mysql_config.sh "
- " -c \""
-
Ref: "CompanyName"

如上例所示,CompanyName 是传递给 userdata 脚本的众多参数之一。问题是,当更新任何一个或多个参数时,CloudFormation 不会检测到这一点,而是会抛出此错误。

CFN Error

因此,为了更新堆栈,我必须编辑堆栈并对 ASG 进行更改,以便 CloudFormation“看到”更改并执行堆栈更新。

有没有办法在参数更新时强制CFN更新堆栈?

最佳答案

除非堆栈中已创建的资源属性发生更改,CloudFormation 才会更新堆栈。

例如:假设我有一个简单的模板来创建一个数据库,我需要在其中传递 2 个参数:

  1. 数据库名称
  2. 地区

假设我使用 db-name 将其作为值传递给 DBInstanceIdentifier

还假设我在以任何方式创建堆栈资源(或其属性)时没有将输入参数 region 用于任何目的。它更多的是我保留的虚拟参数可读性目的。

我将 (TEST-DB1, us-east-1) 作为输入参数传递给 CloudFormation 模板,并成功创建了资源。

场景 1:现在,如果我更新堆栈(仍然使用现有模板)并将输入参数更改为 (TEST-DB2, us-east-1)。即:仅更改数据库名称而不更改区域。然后,CloudFormation 将检测到此参数更新会导致堆栈的运行资源的属性发生变化,并将计算修改并将其显示为更改集。

场景 2:假设我进行另一次更新(仍然使用现有模板)属性,并将输入参数更改为 (TEST-DB1, us-east-2)。即:仅更改区域而不更改数据库名称。然后 CloudFormation 将检测到此参数更新导致堆栈的正在运行的资源的属性没有变化,并将显示创建更改集时出错

底线:您对输入参数的更改必须导致堆栈的任何资源(或其属性,如安全组、端口等)更新/替换。然后,AWS CloudFormation 会将它们显示为更改集供您查看。此外,AWS CloudFormation 使用的方法(更新或替换)取决于您为给定资源类型更新的属性。

Your parameter "CompanyName" is not making any changes to the running resources of the stack. Hence it is reporting as Error creating
change set
. You need to use it to create any resource/resource properties of the stack. Then CloudFormation will detect the change-sets when you modify it. The same applies for any other input-parameters which you use.

关于amazon-web-services - 如何在参数更新时强制 CloudFormation 堆栈更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46824171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com