建立堆疊集 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立堆疊集

您可以使用 AWS Management Console 或使用中的 AWS CloudFormation 指令建立堆疊集 AWS CLI。您可以建立具有 self-managedservice-managed 許可的堆疊集。

您可以利用 self-managed 許可,將堆疊執行個體部署到特定區域中的特定 AWS 帳戶 帳戶。若要這麼做,您必須先建立必要的 IAM 角色,才能在您用來管理堆疊集的帳戶與堆疊執行個體部署目的地帳戶之間建立信任關係。

透過service-managed權限,您可以將堆疊執行個體部署到特定區域 AWS Organizations 中管理的帳戶。使用此模型,您不需要建立必要的 IAM 角色;代表您建 StackSets 立 IAM 角色。您也可以自動部署到未來新增至目標組織或組織單位 (OU) 的帳戶。啟用自動部署後,如果從目標組織或 OU 中移除堆疊執行個體,則 StackSets 會自動刪除帳戶中的堆疊執行個體。

建立具有自我管理許可的堆疊集

使用建立具有自我管理權限的堆疊集 AWS Management Console

  1. 開啟主 AWS CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation

  2. 在導覽窗格中,選擇StackSets

  3. StackSets頁面頂端,選擇 [建立] StackSet。

  4. 選擇 Prerequisite - Prepare template (事前準備 - 準備範本) 下的 Use a sample template (使用範例範本)

  5. [選取範例範本] 下,從下拉式功能表中選擇 [啟用 AWS 設定範本]。選取下一步

    StackSets 範例啟用 AWS Config 範本
  6. 在 [指定 StackSet 詳細資訊] 頁面上,提供下列資訊。

    1. 提供堆疊集的名稱。堆疊集名稱必須以字母字元開始,且僅包含字母、數字和連字號。在此逐步教學中,我們使用 my-awsconfig-stackset 這個名稱。

    2. 系統會提示您指定 AWS Config所使用的參數值。如需這些參數的詳細資訊,請參閱AWS Config 開發人員指南的使用主控台設定 AWS Config。在此逐步教學中,我們將保留所有 AWS Config 參數的預設設定。

    3. 您可以使用 TopicARN 和參數,根據日誌內容,透過電子郵件設定 Amazon Simple Notification Service (SNS) 更新。NotificationEmail為了此逐步解說之目的,我們不會設定 Amazon SNS 更新。

    4. 您可以使用和頻率參數設定更新和通知的DeliveryChannelName傳遞通道。如需有關中傳送通道的詳細資訊 AWS Config,請參閱AWS Config 開發人員指南中的管理傳遞通道。為了此逐步解說之目的,我們在此區域保留預設設定。

  7. 完成指定的參數後 AWS Config,請選擇「下一步」。

  8. [設定 StackSet 選項] 頁面上,透過指定金鑰和值配對來新增標籤。在此逐步教學中,我們建立名為 Stage (階段) 的標籤,其值為 Test (測試)。您套用至堆疊集的標籤將套用至您的堆疊建立的所有資源。有關如何在中使用標籤的詳細資訊 AWS,請參閱《使用AWS Billing and Cost Management 者指南》中的使用成本配置標籤

    Permissions (許可) 保留為未指定。

  9. 對於 [執行] 組態,請選擇 [作用中],以便同時 StackSets 執行非衝突作業,並將衝突的作業佇列 衝突作業完成後,會依要求順序 StackSets 啟動佇列的作業。

    注意

    如果已經有執行中或已排入佇列的作業,則會將所有內送作業排入 StackSets佇列,即使它們不衝突也一樣。

    當堆疊集有執行中或排入佇列的操作時,您無法修改堆疊集的執行組態。

  10. 選擇下一步

  11. 設定部署選項頁面上,提供帳戶以及您希望堆疊集內的堆疊要部署的區域。

    AWS CloudFormation 將在第一個區域內的指定帳戶中部署堆疊,然後繼續下一個,依此類推,只要區域的部署失敗不超過指定的失敗容忍。

    1. 針對 Accounts (帳戶),選擇 Deploy stacks in accounts (在帳戶中部署堆疊)。在文字方塊中貼上您的目標帳戶號碼,並以逗號分隔多個號碼。

    2. 針對 Specify regions (指定區域),選擇美國東部 (維吉尼亞北部) 區域。針對美國西部 (奧勒岡) 區域重複上述步驟。選取 美國西部 (奧勒岡) 區域 旁邊的向上箭頭,將它上移成清單中的第一個項目。Specify regions (指定區域) 下的區域順序決定其部署順序。

    3. 針對 Deployment options (部署選項)

      • 對於 Maximum concurrent accounts (同時使用的帳戶上限),保留 Number (數值) 和 1 的預設值。

        這表示一次只會在一個帳戶中 AWS CloudFormation 部署您的堆疊。

      • 針對 Failure tolerance (容錯能力),保留預設值 Number (數字)0

        這表示在目前區域中 AWS CloudFormation 停止部署之前,最多一個堆疊部署可能會在其中一個指定的區域中失敗,並取消其餘區域的部署。

    4. 針對區域並行

      • 選取「循序」或「平行」以決定指定區域的 StackSets 部署順序。依預設,選取 Sequential (順序)。

      選取下一步

    設定部署選項頁面
  12. Review (檢閱) 頁面上,檢閱您的選擇以及堆疊集的屬性。若要進行變更,請在您要變更屬性的區域中選擇 Edit (編輯)。在您可以建立堆疊集之前,必須填入 Capabilities (功能) 區域中的核取方塊,確認您使用堆疊集所建立的一些資源可能需要新的 IAM 資源和許可。如需潛在必要權限的詳細資訊,請參閱確認範本中的IAM AWS CloudFormation 資源。當您準備好建立堆疊集時,請選擇 Submit (提交)。

    確認必要的功能
  13. AWS CloudFormation 開始建立您的堆疊集。在您選擇 Submit (提交) 時開啟的 stack set details (堆疊設定詳細資訊) 頁面中,查看堆疊集中的堆疊建立進度和狀態。

    詳細資訊頁面的「作業」 StackSets 頁籤

使用建立具有自我管理權限的堆疊集 AWS CLI

使用 AWS CLI 命令建立堆疊集時,您會執行兩個不同的命令:create-stack-set上傳範本並建立堆疊集容器,create-stack-instances以及在堆疊集內建立堆疊集合。首先執行 AWS CLI 指令create-stack-set,以上傳啟用的範例 AWS CloudFormation 範本 AWS Config,然後開始建立堆疊集。

  1. 開啟 AWS CLI.

  2. 執行下列命令。

    對於 --template-url 參數,請提供您存放範本之 Amazon S3 儲存貯體的 URL。在此逐步解說中,我們使用 my-awsconfig-stackset 作為 --stack-set-name 參數值。我們也會啟動,--managed-execution以便同時 StackSets 執行非衝突作業,並將衝突的作業排入佇列。衝突作業完成後,會依要求順序 StackSets 啟動佇列的作業。

    注意

    如果已經有執行中或已排入佇列的作業,則會將所有內送作業排入 StackSets佇列,即使它們不衝突也一樣。

    當堆疊集有執行中或排入佇列的操作時,您無法修改堆疊集的執行組態。

    aws cloudformation create-stack-set \ --stack-set-name my-awsconfig-stackset \ --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml
  3. 在您的 create-stack-set 命令完成後,請執行 list-stack-sets 命令以查看已建立的堆疊集。您應該會在結果中看到新堆疊集。

    aws cloudformation list-stack-sets
  4. 執行 create-stack-instances AWS CLI 命令,將堆疊執行個體新增至堆疊集。在此逐步解說中,我們使用 us-west-2us-east-1 作為 --regions 參數值。

    藉由將 FailureToleranceCount 參數中的 0 設定為 MaxConcurrentCount,並將 1 設定為 --operation-preferences,以設定容錯能力和最大並行帳戶,如以下範例所示。若要改為套用百分比,請使用 FailureTolerancePercentageMaxConcurrentPercentage。為了此逐步解說之目的,我們將使用計數而非百分比。

    注意

    MaxConcurrentCount 的值取決於 FailureToleranceCount 的值。MaxConcurrentCount 最多比 FailureToleranceCount 多 1。

    aws cloudformation create-stack-instances \ --stack-set-name my-awsconfig-stackset \ --accounts '["account_ID_1","account_ID_2"]' \ --regions '["region_1","region_2"]' \ --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1
    注意

    作業中 StackSet 執行個體部署的FailureToleranceCount-MaxConcurrentCount並行性取決於的值,最多比. FailureToleranceCount

    重要

    請等待一個操作完成後,再開始另一個操作。您一次只能執行一個操作。

  5. 確認堆疊執行個體已成功建立。執行 DescribeStackSetOperationoperation-id (它被傳回作為步驟 4 輸出的一部分)。

    aws cloudformation describe-stack-set-operation \ --stack-set-name my-awsconfig-stackset \ --operation-id operation_ID

建立具有服務管理許可的堆疊集

建立具有服務管理許可的堆疊集時的考量

建立具有服務管理許可的堆疊集之前,請考慮下列事項:

  • 具有服務管理許可的堆疊集是在管理帳戶中建立的,包括由委派管理員建立的堆疊集。

  • 堆疊集可以將整個組織或指定的組織單位 (OU) 設為目標。如果堆疊集以您的組織為目標,則也會以組織中所有 OU 中的所有帳戶為目標。如果堆疊集以指定的 OU 為目標,則也會以那些 OU 中的所有帳戶為目標。

  • 如果堆疊集以父 OU 為目標,則堆疊集也會以任何子 OU 為目標。

  • 多個堆疊集可以將相同的組織或 OU 設為目標。

  • 堆疊集無法以組織外部的帳戶為目標。

  • 堆疊集無法部署巢狀堆疊。

  • StackSets 不會將堆疊執行個體部署到組織的管理帳戶,即使管理帳戶位於您的組織或組織的 OU 中也一樣。

  • 自動部署是在堆疊集層級設定。您無法特別針對 OU、帳戶或區域來調整自動部署。

  • 您用來登入管理帳戶的 IAM 主體實體 (使用者、角色或群組) 的許可決定您是否獲得部署授權 StackSets。關於授與許可部署至組織的 IAM 政策範例,請參閱授與服務受管堆疊集許可的政策範例

  • 委派管理員具有部署至組織中帳戶的完整許可。管理帳戶無法限制部署至特定 OU 或執行特定堆疊集操作的委派管理員許可。

使用主控台建立具有服務管理權限的 AWS CloudFormation 堆疊集

  1. 開啟主 AWS CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation

  2. 在導覽窗格中,選擇StackSets

  3. StackSets頁面頂端,選擇 [建立] StackSet。

  4. Prepare template (準備範本) 下,選擇 Template is ready (範本已就緒)

  5. Specify template (指定範本) 下,選擇指定堆疊範本所在 S3 儲存貯體的 URL,或上傳堆疊範本檔案。選擇下一步

  6. 在 [指定 StackSet 詳細資料] 頁面上,提供堆疊集的名稱、指定任何參數,然後選擇 [下一步]。

  7. 在 [設定 StackSet 選項] 頁面的 [標籤] 下,指定要套用至堆疊中資源的任何標籤。

  8. Permissions (許可) 下,選擇 Service-managed permissions (服務管理許可)

    如果已停用受信任存取,則會顯示橫幅。 AWS Organizations 需要信任存取,才能建立或更新具有服務管理許可的堆疊集。只有組織管理帳戶中的管理員,才具有 啟用使用 AWS Organizations進行受信任存取。 的許可。

    啟用受信任存取橫幅。
  9. 對於 [執行] 組態,請選擇 [作用中],以便同時 StackSets 執行非衝突作業,並將衝突的作業佇列 衝突作業完成後,會依要求順序 StackSets 啟動佇列的作業。

    注意

    如果已經有執行中或已排入佇列的作業,則會將所有內送作業排入 StackSets佇列,即使它們不衝突也一樣。

    當堆疊集有執行中或排入佇列的操作時,您無法修改堆疊集的執行組態。

  10. 選擇下一步以繼續,並啟用受信任存取 (如果尚未啟用)。

  11. Set deployment options (設定部署選項) 頁面的 Deployment targets (部署目標) 下,選擇要部署到組織中的哪些帳戶。

    • 選擇 Deploy to organization (部署至組織),以部署至組織中的所有帳戶。

      將堆疊執行個體部署至組織中的所有帳戶。
    • 選擇 Deploy to organizational units (OUs) (部署至組織單位 (OU)),以部署至特定 OU 中的所有帳戶。選擇 Add an OU (新增 OU),然後將目標 OU ID 貼到文字方塊中。針對每個新的目標 OU 重複上述步驟。

      將堆疊執行個體部署至組織內選定 OU 中的所有帳戶。
  12. 在 [自動部署] 底下,選擇是否 StackSets 要自動部署至 future 新增至目標組織或 OU 的帳戶。

    具有服務管理許可的堆疊集的自動部署設定。
  13. 如果您已啟用自動部署,請在 Account removal behavior (帳戶移除行為) 下,選擇在從目標組織或 OU 移除帳戶時,是否保留或刪除堆疊資源。

    具有服務管理許可的堆疊集的帳戶移除行為設定。
    注意

    如果選取 Retain stacks (保留堆疊),則會從堆疊集移除堆疊執行個體,但會保留堆疊及其相關資源。資源會保持在當前狀態,但不再是堆疊集的一部分。

  14. Deployment regions (部署區域) 下,選擇您要部署堆疊執行個體的區域。選擇下一步

  15. 在 [複查] 頁面上,確認 StackSets將部署至正確區域中的正確帳戶,然後選擇 [建立] StackSet。

StackSet 詳細資訊頁面隨即開啟。您可以檢視堆疊集的堆疊建立進度和狀態。

使用建立具有服務管理權限的堆疊集 AWS CLI

當您使用建立堆疊集時 AWS CLI,會執行兩個不同的命令。在 create-stack-set 期間,您會上傳範本、建立堆疊集容器,以及管理自動部署。在 create-stack-instances 期間,您會在特定目標帳戶中建立堆疊執行個體。

當您擔任委派管理員時,您必須將--call-as參數設定為DELEGATED_ADMIN每次執行 StackSets 命令時。

--call-as DELEGATED_ADMIN

委派管理員建立的堆疊集是在組織的管理帳戶中建立的。

  1. 開啟 AWS CLI.

  2. 執行 create-stack-set 命令。

    在下列範例中,我們啟用自動部署, StackSets 以便自動部署到 future 新增至目標組織或 OU 的帳戶。從目標組織或 OU 移除帳戶時,我們會保留堆疊資源。我們也會啟動,--managed-execution以便同時 StackSets 執行非衝突作業,並將衝突的作業排入佇列。衝突作業完成後,會依要求順序 StackSets 啟動佇列的作業。

    注意

    如果已經有執行中或已排入佇列的作業,則會將所有內送作業排入 StackSets佇列,即使它們不衝突也一樣。

    當堆疊集有執行中或排入佇列的操作時,您無法修改堆疊集的執行組態。

    aws cloudformation create-stack-set \ --stack-set-name StackSet_myApp \ --template-url https://s3.us-west-2.amazonaws.com/cloudformation-templates-us-west-2/MyApp.template \ --permission-model SERVICE_MANAGED \ --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true
  3. create-stack-set 命令完成後,請執行 list-stack-sets 命令,確認已建立堆疊集。結果中會列出新的堆疊集。

    aws cloudformation list-stack-sets
    • 如果您在登入成員帳戶時,將 --call-as 參數設定為 DELEGATED_ADMIN,則 list-stack-sets 會傳回組織 管理帳戶 中具有服務管理許可的所有堆疊集。

    • 如果您在登入帳戶SELF時將--call-as參數設定為,則會list-stack-sets傳回 AWS 帳戶中的所有自我管理堆疊集。 AWS

    • 如果您在登入組織 管理帳戶 時,將 --call-as 參數設定為 SELF,則 list-stack-sets 會傳回組織 管理帳戶 中的所有堆疊集。

  4. 執行 create-stack-instances 命令,將堆疊執行個體新增至堆疊集。對於 --deployment-targets 參數,請指定組織根 ID 以部署到組織中所有帳戶,或指定 OU ID 以部署到這些 OU 中的所有帳戶。在此範例中,我們指定具有 ou-rcuk-1x5j1lwoou-rcuk-slr5lh0a ID 的 OU。

    aws cloudformation create-stack-instances --stack-set-name StackSet_myApp --deployment-targets OrganizationalUnitIds='["ou-rcuk-1x5j1lwo", "ou-rcuk-slr5lh0a"]' --regions '["eu-west-1"]'
    重要

    請等待一個操作完成後,再開始另一個操作。您一次只能執行一個操作。

  5. 使用步驟 4 的 create-stack-instances 輸出中傳回的 operation-id,執行 describe-stack-set-operation,以驗證是否已成功建立堆疊執行個體。