教學課程:使用 AWS CloudFormation StackSets 部署動作建立管道 - AWS CodePipeline

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

教學課程:使用 AWS CloudFormation StackSets 部署動作建立管道

在本教學課程中,您可以使用 AWS CodePipeline 主控台建立具有部署動作的管道,以建立堆疊集和建立堆疊執行個體。當管道執行時,範本會建立堆疊集,並建立和更新部署堆疊集的執行個體。

重要

在建立管道的過程中,CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。(這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中,請確定 S3 成品儲存貯體由 所擁有 AWS 帳戶 ,安全且可靠。

有兩種方式可以管理堆疊集的許可:自我管理和受管 AWS IAM 角色。本教學課程提供具有自我管理許可的範例。

若要最有效地在 CodePipeline 中使用 Stacksets,您應該清楚了解 CloudFormation StackSets 背後的概念及其運作方式。請參閱AWS CloudFormation 《 使用者指南》中的 StackSets 概念

先決條件

對於堆疊集操作,您可以使用兩個不同的帳戶:管理帳戶和目標帳戶。您可以在管理員帳戶中建立堆疊集。您可以建立屬於目標帳戶中堆疊集的個別堆疊。

使用管理員帳戶建立管理員角色
在目標帳戶中建立服務角色
  • 在信任管理員帳戶的目標帳戶中建立服務角色。請遵循設定堆疊集操作的基本許可中的指示。您的角色必須命名為 AWSCloudFormationStackSetExecutionRole

步驟 1:上傳範例 AWS CloudFormation 範本和參數檔案

為您的堆疊集範本和參數檔案建立來源儲存貯體。下載範例 AWS CloudFormation 範本檔案、設定參數檔案,然後在上傳至 S3 來源儲存貯體之前壓縮檔案。

注意

請務必先壓縮來源檔案,再上傳至 S3 來源儲存貯體,即使唯一的來源檔案是 範本。

建立 S3 來源儲存貯體
  1. 登入 AWS 管理主控台 ,並在 https://console.aws.amazon.com/s3/:// 開啟 Amazon S3 主控台。

  2. 選擇建立儲存貯體

  3. 儲存貯體名稱中,輸入儲存貯體的名稱。

    區域中,選擇您要建立管道的區域。選擇建立儲存貯體

  4. 建立儲存貯體後,會顯示成功橫幅。選擇 Go to bucket details (前往儲存貯體詳細資訊)

  5. Properties (屬性) 標籤上,選擇 Versioning (版本控制)。選擇 Enable versioning (啟用版本控制),然後選擇 Save (儲存)

建立 AWS CloudFormation 範本檔案
  1. 下載下列範例範本檔案,以產生堆疊集的 CloudTrail 組態:https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml

  2. 儲存檔案為 template.yml

建立 parameters.txt 檔案
  1. 建立具有部署參數的檔案。參數是您想要在執行時間更新堆疊中的值。下列範例檔案會更新堆疊集的範本參數,以啟用記錄驗證和全域事件。

    [ { "ParameterKey": "EnableLogFileValidation", "ParameterValue": "true" }, { "ParameterKey": "IncludeGlobalEvents", "ParameterValue": "true" } ]
  2. 儲存檔案為 parameters.txt

建立 account.txt 檔案
  1. 使用您要建立執行個體的帳戶建立檔案,如下列範例檔案所示。

    [ "111111222222","333333444444" ]
  2. 儲存檔案為 accounts.txt

建立和上傳來源檔案
  1. 將檔案合併為單一 ZIP 檔案。您的檔案在 ZIP 檔案中看起來應該像這樣。

    template.yml parameters.txt accounts.txt
  2. 將 ZIP 檔案上傳至 S3 儲存貯體。此檔案是建立管道精靈為 CodePipeline 中的部署動作建立的來源成品。

步驟 2:建立管道

在本節中,您可以採取下列動作建立管道:

  • 具有 S3 來源動作的來源階段,其中來源成品是您的範本檔案和任何支援的來源檔案。

  • 具有建立 CloudFormation 堆疊集之堆疊集部署動作的部署階段。

  • 具有 CloudFormation 堆疊執行個體部署動作的部署階段,可在目標帳戶中建立堆疊和執行個體。

使用 CloudFormationStackSet 動作建立管道
  1. 登入 AWS 管理主控台 並開啟 CodePipeline 主控台,網址為 https://http://console.aws.amazon.com/codesuite/codepipeline/home

  2. Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)

  3. 步驟 1:選擇建立選項頁面的建立選項下,選擇建置自訂管道選項。選擇下一步

  4. 步驟 2:選擇管道設定中,在管道名稱中輸入 MyStackSetsPipeline

  5. 管道類型中,針對本教學課程的目的選擇 V1。您也可以選擇 V2;不過請注意,管道類型在特性和價格方面有所不同。如需詳細資訊,請參閱管道類型

  6. 服務角色中,選擇新服務角色,以允許 CodePipeline 在 IAM 中建立服務角色。

  7. 成品存放區中,保留預設值。

    注意

    這不是原始碼的來源儲存貯體。這是管道的成品存放區。每個管道都需要有個別成品存放區,例如 S3 儲存貯體。當您建立或編輯管道時,您必須在管道區域中擁有一個成品儲存貯體,並在您執行動作的每個 AWS 區域中擁有一個成品儲存貯體。

    如需詳細資訊,請參閱輸入和輸出成品CodePipeline 管道結構參考

    選擇下一步

  8. 步驟 3:新增來源階段頁面的來源提供者中,選擇 Amazon S3

  9. 儲存貯體中,輸入您為此教學課程建立的 S3 來源儲存貯體,例如 BucketName。在 S3 物件金鑰中,輸入 ZIP 檔案的檔案路徑和檔案名稱,例如 MyFiles.zip

  10. 選擇下一步

  11. 步驟 4:新增建置階段中,選擇略過建置階段,然後再次選擇略過以接受警告訊息。

    選擇下一步

  12. 步驟 5:新增測試階段中,選擇略過測試階段,然後再次選擇略過以接受警告訊息。

    選擇下一步

  13. 步驟 6:新增部署階段

    1. 部署提供者中,選擇AWS CloudFormation 堆疊集

    2. 堆疊集名稱中,輸入堆疊集的名稱。這是範本建立的堆疊集名稱。

      注意

      請記下您的堆疊集名稱。當您將第二個 StackSets 部署動作新增至管道時,將使用它。

    3. 範本路徑中,輸入上傳範本檔案的成品名稱和檔案路徑。例如,使用預設來源成品名稱 輸入下列項目SourceArtifact

      SourceArtifact::template.yml
    4. 部署目標中,輸入上傳帳戶檔案的成品名稱和檔案路徑。例如,使用預設來源成品名稱 輸入下列項目SourceArtifact

      SourceArtifact::accounts.txt
    5. 部署目標 AWS 區域中,輸入一個區域以部署初始堆疊執行個體,例如 us-east-1

    6. 展開部署選項。在參數中,輸入您上傳參數檔案的成品名稱和檔案路徑。例如,使用預設來源成品名稱 輸入下列項目SourceArtifact

      SourceArtifact::parameters.txt

      若要將參數輸入為常值輸入而非檔案路徑,請輸入下列內容:

      ParameterKey=EnableLogFileValidation,ParameterValue=true ParameterKey=IncludeGlobalEvents,ParameterValue=true
    7. 功能中,選擇 CAPABILITY_IAM 和 CAPABILITY_NAMED_IAM。

    8. 許可模型中,選擇 SELF_MANAGED。

    9. 容錯能力百分比中,輸入 20

    10. 最大並行百分比中,輸入 25

    11. 選擇下一步

    12. 步驟 7:檢閱中,選擇建立管道。您的管道隨即顯示。

    13. 允許您的管道執行。

步驟 3:檢視初始部署

檢視初始部署的資源和狀態。驗證部署成功建立堆疊集後,您可以將第二個動作新增至部署階段。

檢視資源
  1. 前往 https://console.aws.amazon.com/codepipeline/ 開啟 CodePipeline 主控台。

  2. Pipelines (管道) 下,選擇您的管道,然後選擇 View (檢視)。本圖顯示您的管道來源和部署階段。

  3. 在管道的 CloudFormationStackSet CloudFormation 動作上選擇動作。堆疊集的範本、資源和事件會顯示在 CloudFormation 主控台中。

  4. 在左側導覽面板中,選擇 StackSets。在清單中,選擇新的堆疊集。

  5. 選擇堆疊執行個體索引標籤。確認您提供的每個帳戶有一個堆疊執行個體是在 us-east-1 區域中建立的。確認每個堆疊執行個體的狀態為 CURRENT

步驟 4:新增 CloudFormationStackInstances 動作

在管道中建立下一個動作,以允許 CloudFormation StackSets 建立剩餘的堆疊執行個體。

在管道中建立下一個動作
  1. 前往 https://console.aws.amazon.com/codepipeline/ 開啟 CodePipeline 主控台。

    Pipelines (管道) 下,選擇您的管道,然後選擇 View (檢視)。本圖顯示您的管道來源和部署階段。

  2. 選擇編輯管道。管道會以編輯模式顯示。

  3. 部署階段,選擇編輯

  4. AWS CloudFormation 堆疊集部署動作下,選擇新增動作群組

  5. 編輯動作頁面上,新增動作詳細資訊:

    1. 動作名稱中,輸入動作的名稱。

    2. 動作提供者中,選擇AWS CloudFormation 堆疊執行個體

    3. 輸入成品下,選擇 SourceArtifact

    4. 堆疊集名稱中,輸入堆疊集的名稱。這是您在第一個動作中提供的堆疊集名稱。

    5. 部署目標中,輸入上傳帳戶檔案的成品名稱和檔案路徑。例如,使用預設來源成品名稱 輸入下列項目SourceArtifact

      SourceArtifact::accounts.txt
    6. 部署目標 AWS 區域中,輸入用於部署剩餘堆疊執行個體的區域,例如 us-east-2eu-central-1 ,如下所示:

      us-east2, eu-central-1
    7. 容錯能力百分比中,輸入 20

    8. 最大並行百分比中,輸入 25

    9. 選擇儲存

    10. .手動發佈變更。您更新的管道會在部署階段中顯示兩個動作。

步驟 5:檢視部署的堆疊集資源

您可以檢視堆疊集部署的資源和狀態。

檢視資源
  1. 前往 https://console.aws.amazon.com/codepipeline/ 開啟 CodePipeline 主控台。

  2. 管道下,選擇您的管道,然後選擇檢視。本圖顯示您的管道來源和部署階段。

  3. 選擇管道中AWS CloudFormation Stack Instances動作 CloudFormation 的動作。堆疊集的範本、資源和事件會顯示在 CloudFormation 主控台中。

  4. 在左側導覽面板中,選擇 StackSets。在清單中,選擇您的堆疊集。

  5. 選擇堆疊執行個體索引標籤。驗證您提供的每個帳戶的所有剩餘堆疊執行個體是否已在預期區域中建立或更新。確認每個堆疊執行個體的狀態為 CURRENT

步驟 6:更新堆疊集

對堆疊集進行更新,並將更新部署到執行個體。在此範例中,您也可以變更要指定用於更新的部署目標。不屬於更新一部分的執行個體會移至過期狀態。

  1. 前往 https://console.aws.amazon.com/codepipeline/ 開啟 CodePipeline 主控台。

  2. 管道下,選擇管道,然後選擇編輯。在部署階段,選擇編輯

  3. 選擇 在管道中編輯AWS CloudFormation 堆疊集動作。在描述中,使用堆疊集的新描述覆寫現有描述。

  4. 選擇 編輯管道中的AWS CloudFormation 堆疊執行個體動作。在部署目標 AWS 區域中,刪除建立動作時輸入的us-east-2值。

  5. 儲存變更。選擇發行變更以執行您的管道。

  6. 在 中開啟您的動作 CloudFormation。選擇 StackSet 資訊索引標籤。在 StackSet 描述中,確認已顯示新的描述。

  7. 選擇堆疊執行個體索引標籤。在狀態下,確認 us-east-2 中堆疊執行個體的狀態為 OUTDATED