覆盖 CloudFormation StackSet 中的堆栈参数值
在某些情况下,您可能希望特定区域或账户中堆栈的属性值与 StackSet 中指定的属性值不同。例如,您可能希望根据账户是用于开发还是生产来为给定参数指定不同的值。对于这些情况,CloudFormation 允许您按账户和区域覆盖堆栈中的参数值。您可在首次创建堆栈时覆盖模板参数值,也可以覆盖现有堆栈的参数值。您只能将之前在堆栈中覆盖的参数还原为 StackSet 中指定的值。
参数值覆盖适用于选定账户和区域中的堆栈。StackSet 更新期间,不会更新任何堆栈覆盖参数值,而是会保留覆盖值。
您只能覆盖在 StackSet 中指定的参数值;要添加或删除参数本身,您需要更新 StackSet 模板。如果将参数添加到 StackSet 模板,则必须先使用 StackSet 中指定的新参数和值更新所有堆栈,然后才能覆盖堆栈中的参数值。使用新参数更新所有堆栈后,您可按需覆盖各个堆栈中的参数值。
要了解在创建堆栈时如何覆盖 StackSet 参数值,请参阅将堆栈添加到 StackSets。
覆盖堆栈参数(控制台)
覆盖特定堆栈的参数
登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
在屏幕顶部的导航栏中,选择您在其中创建了 StackSet 的 Amazon Web Services 区域。
-
从导航窗格中,选择 StackSets。在 StackSet 页面上,选择您的 StackSet。
-
选定 StackSet 后,从操作菜单中选择覆盖 StackSet 参数。
-
在设置部署选项页面上,提供要为其创建覆盖的堆栈的账户和区域。
默认情况下,CloudFormation 将在第一个区域内的指定账户中部署堆栈,然后移到下一个区域,依此类推,前提是区域的部署失败不超过指定的容错能力。
-
[自行管理权限] 对于部署位置,选在账户中部署堆栈。粘贴创建 StackSet 时用的部分或全部目标账户 ID。
[服务管理权限] 请执行下列操作之一:
-
选择 Deploy to organizational units (OUs) (部署到组织单位 (OU))。输入一个或多个创建 StackSet 时使用的目标 OU。覆盖的参数值仅适用于当前已在目标 OU 及其子 OU 中的账户。将来添加到目标 OU 及其子 OU 的账户将使用 StackSet 默认值,而不使用覆盖的值。
-
选择 Deploy to accounts (部署到账户)。粘贴创建 StackSet 时使用的部分或全部目标 OU ID 或账户 ID。
-
-
在指定区域中,添加已为此 StackSet 部署堆栈的一个或多个区域。
如果您添加多个区域,Specify regions (指定区域) 下的区域顺序决定其部署顺序。
-
对于部署选项,请执行以下操作:
-
对于最大并发账户数,请指定并发处理的账户数量。
-
在容错中,请指定每个区域允许的账户失败次数上限。达到此次数限制后,该操作将停止,不会继续到其他区域。
-
对于区域并发,请选择处理区域的方式:顺序(一次处理一个区域)或并行(并发处理多个区域)。
-
对于并发模式,请选择在操作执行期间的并发行为方式。
-
严格容错:操作失败时降低账户并发级别,保持在容错 +1 范围内。
-
软容错 – 即使失败,仍保持您指定的并发级别(最大并发账户数的值)。
-
-
-
选择下一步。
-
-
在指定覆盖页面上,选中要覆盖的参数的复选框,然后从编辑覆盖值菜单中选择覆盖 StackSet 值。
-
在覆盖 StackSet 参数值页面上,进行更改,然后选择保存更改。
注意
要将任何覆盖参数设置回使用在堆栈中指定的值,请检查所有参数,然后从编辑覆盖值菜单中选择设置为 StackSet值。这样将会在更新堆栈后移除所有覆盖值。
-
在审核页面上,审核您的选择。要进行更改,请在相关部分选择编辑。
-
如果准备继续,则请选择提交。
CloudFormation 会开始更新堆栈。在选择提交后打开的 StackSet 详细信息页面中查看堆栈的进度和状态。
覆盖堆栈参数(Amazon CLI)
注意
担任委派管理员时,您必须在命令中包含 --call-as
DELEGATED_ADMIN
。
覆盖特定堆栈的参数
-
使用 update-stack-instances Amazon CLI 命令并指定
--parameter-overrides
选项。[自行管理权限] 对于
--accounts
选项,提供要为其覆盖堆栈参数值的账户 ID。aws cloudformation update-stack-instances --stack-set-name
my-stackset
\ --parameter-overridesParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940
\ --accountsaccount_id
--regionsus-east-1
[服务托管权限] 对于
--deployment-targets
选项,提供要为其覆盖堆栈参数的组织根 ID、OU ID 或 Amazon Organizations 账户 ID。在此示例中,我们使用
ID 覆盖 OU 中所有账户内的堆栈参数值。ou-rcuk-1x5j1lwo
覆盖的参数值仅适用于当前位于目标 OU 及其子 OU 中的账户。将来添加到此目标 OU 及其子 OU 的账户将使用 StackSet 默认值,而不是覆盖值。
aws cloudformation update-stack-instances --stack-set-name
my-stackset
\ --parameter-overridesParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940
\ --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo
\ --regionsus-east-1
-
通过运行 describe-stack-set-operation 命令来显示更新操作的状态和结果,验证堆栈上的参数值是否已被成功覆盖。对于
--operation-id
,使用由您的 update-stack-instances 命令返回的操作 ID。aws cloudformation describe-stack-set-operation --operation-id
operation_ID