覆盖 CloudFormation StackSets 中的堆栈实例的参数值 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

覆盖 CloudFormation StackSets 中的堆栈实例的参数值

在某些情况下,您可能希望特定区域或账户中堆栈实例的属性值与堆栈集中指定的属性值不同。例如,您可能希望根据账户是用于开发还是生产来为给定参数指定不同的值。对于这些情况,CloudFormation 允许您按账户和区域覆盖堆栈实例中的参数值。您可在首次创建堆栈实例时覆盖模板参数值,并且可覆盖现有堆栈实例的参数值。您只能将之前在堆栈实例中覆盖的参数设置回在堆栈集中指定的值。

参数值覆盖适用于您选择的账户和区域中的堆栈实例。堆栈集更新期间,不会更新为堆栈实例覆盖的任何参数值,但保留其覆盖值。

您只能覆盖在堆栈集中指定的参数;要添加或删除参数本身,您需要更新堆栈集模板。如果将参数添加到堆栈集模板,则必须先使用堆栈集中指定的新参数和值更新所有堆栈实例,然后才能覆盖堆栈实例中的参数值。使用新参数更新所有堆栈实例后,您可按需覆盖各个堆栈实例中的参数值。

要了解在创建堆栈实例时如何覆盖堆栈集参数值,请参阅将堆栈添加到 StackSets

覆盖堆栈实例上的参数(控制台)

  1. 登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  2. 在屏幕顶部的导航栏中,选择您在其中创建了堆栈集的 Amazon Web Services 区域。

  3. 从导航窗格中,选择 StackSets (堆栈集)。在 StackSets 页面上,选择您的堆栈集。

  4. 选定堆栈集后,请从 Actions(操作)菜单中选择 Override StackSet parameters(覆盖堆栈集参数)。

  5. 设置部署选项页面上,提供要为其创建覆盖的堆栈实例的账户和区域。

    默认情况下,CloudFormation 将在第一个区域内的指定账户中部署堆栈,然后移到下一个区域,依此类推,前提是区域的部署失败不超过指定的容错能力。

    1. [自行管理权限] 对于部署位置,选在账户中部署堆栈。粘贴用于创建堆栈集的部分或全部目标账户 ID。

      [服务管理权限] 请执行下列操作之一:

      • 选择 Deploy to organizational units (OUs) (部署到组织单位 (OU))。输入一个或多个用于创建堆栈集的目标 OU。覆盖的参数值仅适用于当前已在目标 OU 及其子 OU 中的账户。将来添加到目标 OU 及其子 OU 的账户将使用堆栈集默认值,而不使用覆盖的值。

      • 选择 Deploy to accounts (部署到账户)。粘贴用于创建堆栈集的部分或全部目标 OU ID 或账户 ID。

    2. 对于指定区域,添加已为此堆栈集部署堆栈实例的一个或多个区域。

      如果您添加多个区域,Specify regions (指定区域) 下的区域顺序决定其部署顺序。

    3. 对于 Deployment options (部署选项)

      • 对于最大并发账户数,请根据需要修改最大并发账户数。

      • 对于容错,根据需要修改容错。

      • 对于区域并发,根据需要修改区域并发。

      • 对于并发模式,根据需要修改并发模式。

    4. 选择下一步

  6. 指定覆盖页面上,选中要覆盖的参数的复选框,然后从编辑覆盖值菜单中选择覆盖 StackSet 值

  7. 覆盖 StackSet 参数值页面上,进行更改,然后选择保存更改

    注意

    要将任何覆盖参数设置回使用在堆栈中指定的值,请检查所有参数,然后从 Edit override value(编辑覆盖值)菜单中选择 Set to StackSet value(设置为堆栈集值)。这样做将在您更新堆栈实例后删除所有覆盖值。

  8. 审核页面上,审核您的选择。要进行更改,请在相关部分选择编辑

  9. 如果准备继续,则请选择提交

    CloudFormation 开始更新您的堆栈实例。在选择 Submit (提交) 时打开的堆栈集详细信息页面中查看堆栈实例的进度和状态。

覆盖堆栈实例上的参数(Amazon CLI)

担任委托管理员时,您必须在每次运行 StackSets 命令时将 --call-as 选项设置为 DELEGATED_ADMIN

--call-as DELEGATED_ADMIN
  1. 使用 update-stack-instances Amazon CLI 命令并指定 --parameter-overrides 选项。

    [自行管理权限] 对于 --accounts 选项,提供您要为其覆盖堆栈实例上参数值的账户 ID。

    aws cloudformation update-stack-instances --stack-set-name my-stackset \ --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \ --accounts '["account_id"]' --regions '["us-east-1"]'

    [服务管理权限] 对于 --deployment-targets 选项,提供您要为其覆盖堆栈实例上参数的组织根 ID、OU ID 或 Amazon Organizations 账户 ID。在此示例中,我们使用 ou-rcuk-1x5j1lwo ID 覆盖 OU 中所有账户内堆栈实例的参数值。

    覆盖的参数值仅适用于当前位于目标 OU 及其子 OU 中的账户。将来添加到目标 OU 及其子 OU 的账户将使用堆栈集默认值,而不是覆盖的值。

    aws cloudformation update-stack-instances --stack-set-name my-stackset \ --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \ --deployment-targets OrganizationalUnitIds='["ou-rcuk-1x5j1lwo"]' \ --regions '["us-east-1"]'
  2. 通过运行 describe-stack-set-operation 命令来显示更新操作的状态和结果,验证您的参数值是否已成功覆盖堆栈实例。对于 --operation-id,使用由您的 update-stack-instances 命令返回的操作 ID。

    aws cloudformation describe-stack-set-operation --operation-id operation_ID