本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
逐步解說:建置管線以用於測試和生產堆疊
假設您提交 AWS CloudFormation 範本的發行程序, CloudFormation 然後使用該範本自動建置測試堆疊。檢閱測試堆疊後,您可以預覽您的變更將如何修改您的生產堆疊,然後選擇是否要實作。若要完成此工作流程,您可以使用 CloudFormation 建置測試堆疊、刪除測試堆疊、建立變更集,然後執行變更集。不過,每個動作您都必須手動與 CloudFormation 互動。在本演練中,我們將建置一個 CodePipeline 管道來自動化許多這些動作,協助您使用 CloudFormation 堆疊實現持續交付工作流程。
必要條件
本演練假設您已使用 CodePipeline 和 CloudFormation,並了解管道、 AWS CloudFormation 範本和堆疊的運作方式。如需詳細資訊 CodePipeline,請參閱 AWS CodePipeline 使用者指南。您也需要在 AWS 區域 建立管道的相同 中擁有 Amazon S3 儲存貯體。
重要
範例 WordPress 範本會建立需要連線至網際網路的EC2執行個體。檢查您是否具有允許流量流向網際網路的預設 VPC和 子網路。
逐步解說概觀
此演練會為堆疊中的範例 WordPress 網站建置管道。此管道分為三個階段。每個階段皆必須至少包含一個動作,它是管道在您的成品 (您的輸入) 上執行的任務。階段會組織管道中的動作。在階段處理新的成品之前, CodePipeline 必須完成所有階段中的動作,例如,如果您提交新的輸入以重新執行管道。
在此逐步教學結束時,您將擁有可執行以下工作流程的管道:
-
管道的第一個階段會從儲存庫擷取來源成品 ( CloudFormation 範本及其組態檔案)。
您將準備包含範例 WordPress 範本的成品,並將其上傳至 S3 儲存貯體。
-
在第二個階段,管道會建立測試堆疊,然後等待您的核准。
在您檢閱測試堆疊之後,可選擇繼續使用原始管道或建立並提交另一個成品來進行變更。如果您核准,此階段將會刪除測試堆疊,然後管道將持續至下一個階段。
-
在第三個階段,管道會針對生產堆疊建立變更集,然後等待您的核准。
在您初次執行時,不會有生產堆疊。變更集會顯示 CloudFormation 將建立的所有資源。如果您核准,此階段將執行變更集並建置您的生產堆疊。
注意
CloudFormation 是一項免費服務。不過,您需要支付每個 堆疊中包含 AWS 的資源費用,例如EC2執行個體。如需 AWS 定價的詳細資訊,請參閱 https://http://aws.amazon.com
步驟 1:編輯成品並將它上傳到 S3 儲存貯體
建置管道之前,您必須設定來源儲存庫和檔案。 CodePipeline 會將這些來源檔案複製到管道的成品存放區,然後使用它們在管道中執行動作,例如建立 CloudFormation 堆疊。
當您使用 Amazon Simple Storage Service (Amazon S3) 做為來源儲存庫時, CodePipeline 會要求您先壓縮來源檔案,再將其上傳至 S3 儲存貯體。壓縮檔案是一種 CodePipeline 成品,可以包含 CloudFormation 範本、範本組態檔案或兩者。我們提供成品,其中包含範例 WordPress 範本和兩個範本組態檔案。兩個組態檔案會指定 WordPress 範本的參數值。 會在建立 WordPress 堆疊時使用 CodePipeline 它們。其中一個檔案包含測試堆疊的參數值,另一個則包含生產堆疊的參數值。例如,您需要編輯組態檔案,以指定您擁有的現有EC2金鑰對名稱。如需成品的詳細資訊,請參閱 AWS CloudFormation 成品。
在您建置成品之後,會將它上傳到 S3 儲存貯體。
編輯和上傳成品
-
此成品包含三個檔案:
-
範例 WordPress 範本:
wordpress-single-instance.yaml
-
測試堆疊的範本組態檔案:
test-stack-configuration.json
-
生產堆疊的範本組態檔案:
prod-stack-configuration.json
-
-
擷取所有檔案,然後使用任何文字編輯器來修改範本組態檔案。
開啟組態檔案,以查看它們是否包含對應至 WordPress 範本參數的鍵/值對。組態檔案指定參數值,您的管道在建立測試和生產堆疊時,將會使用這些參數值。
編輯
test-stack-configuration.json
檔案以指定測試堆疊的參數值,並指定prod-stack-configuration.json
檔案以指定生產堆疊的參數值。-
將
DBPassword
和DBRootPassword
金鑰的值變更為可用於登入 WordPress 資料庫的密碼。如 WordPress 範本中所定義,參數值只能包含英數字元。 -
將
KeyName
金鑰的值變更為您要建立管道的區域中現有的EC2金鑰對名稱。
-
-
將修改過的組態檔新增至原始成品 (
.zip
) 檔案,以取代重複的檔案。您現在可以自訂成品,並可將它上傳到 S3 儲存貯體。
-
請注意檔案的位置。當您建置管道時,將指定此檔案的位置。
有關成品和 S3 儲存貯體的說明:
-
使用位於您要建立管道之相同 AWS 區域中的儲存貯體。
-
CodePipeline 要求儲存貯體已啟用版本控制。
-
您也可以使用不需要您壓縮檔案的服務,再 CodeCommit上傳原始碼儲存庫的 GitHub 或 。
-
成品可以包含敏感的資訊,例如密碼。限制存取,只有獲得允許使用者可以檢視檔案。執行此作業時,請確定 仍然 CodePipeline 可以存取 檔案。例如,如果您將成品上傳至 S3 儲存貯體,則請使用 S3 儲存貯體政策或使用者政策來限制存取權。
-
您現在有一個成品 CodePipeline 可以提取到管道。在下一個步驟中,您將指定成品的位置並建置 WordPress 管道。
步驟 2:建立管道堆疊
若要建立 WordPress 管道,您將使用範例 CloudFormation 範本。除了建置管道之外, 範本還會為 CodePipeline 和 設定 AWS Identity and Access Management (IAM) 服務角色 CloudFormation、 CodePipeline 成品存放區的 S3 儲存貯體,以及管道傳送通知的 Amazon Simple Notification Service (AmazonSNS) 主題,例如評論通知。範例範本可讓您在單一 CloudFormation 堆疊中輕鬆佈建和設定這些資源。
如需管道設定的詳細資訊,請參閱 管道有何功能。
重要
範例 WordPress 範本會建立需要連線至網際網路的EC2執行個體。檢查您的預設 VPC和子網路是否允許流量流向網際網路。
建立管道堆疊
-
在 https://s3.amazonaws.com/cloudformation-examples/user-guide/continuous-deployment/basic-pipeline.yml
下載範例範本。並將它儲存在您的電腦。 -
在 開啟 CloudFormation 主控台https://console.aws.amazon.com/cloudformation/
。 -
選擇支援 CodePipeline 和 AWS 的區域 CloudFormation。
如需詳細資訊,請參閱 中的CodePipeline 端點、配額和AWS CloudFormation 端點和配額AWS 一般參考。
-
選擇建立堆疊。
-
在 Specify template (指定範本) 下方,選擇 Upload a template file (上傳範本檔案),然後選擇您剛剛下載的範本
basic-pipeline.yml
。 -
選擇 Next (下一步)。
-
在 Stack Name (堆疊名稱) 中輸入
sample-WordPress-pipeline
。 -
在 Parameters (參數) 區段中指定以下參數值,然後選擇 Next (下一步)。設定堆疊參數時,如果您保留 WordPress 範本及其組態檔案的相同名稱,您可以使用預設值。否則,請指定您使用的檔案名稱。
- PipelineName
-
您的管道名稱,例如
WordPress-test-pipeline
。 - S3 儲存貯體
-
您用於儲存成品 (
.zip
檔案) 的 S3 儲存貯體名稱。 - SourceS3Key
-
成品的檔案名稱。如果您將成品儲存於資料夾,請將其作為檔案名稱的一部分包含在內,例如
folder/subfolder/wordpress-single-instance.zip
。 - 電子郵件
-
CodePipeline 傳送管道通知的電子郵件地址,例如
myemail@example.com
。
-
在此逐步解說中,您不需要新增標籤或指定進階設定,因此請選擇 Next (下一步)。
-
確保堆疊名稱和範本URL正確,然後選擇建立堆疊。
-
若要確認您知道 CloudFormation 可能會建立IAM資源,請選擇核取方塊。
建立堆疊可能需要幾分鐘 AWS CloudFormation 的時間。若要監控進度,請檢視堆疊事件。如需詳細資訊,請參閱監控堆疊進度。
建立堆疊後, 會 CodePipeline 啟動您的新管道。若要查看其狀態,請參閱 CodePipeline 主控台
管道有何功能
本節說明管道的三個階段,使用範例 WordPress 管道範本中的程式碼片段。
階段 1:來源
管道的第一階段是來源階段,您在其中指定原始程式碼的位置。每次您推送修訂到此位置時, 都會 CodePipeline 重新執行您的管道。
原始程式碼位於 S3 儲存貯體,並以其檔案名稱識別。您指定這些值作為您建立管道堆疊時的輸入參數值。為了允許在後續階段使用來源成品,程式碼片段指定 OutputArtifacts
屬性,其名稱為 TemplateSource
。為了在之後的階段使用此成品,您指定 TemplateSource
作為輸入成品。
- Name: S3Source Actions: - Name: TemplateSource ActionTypeId: Category: Source Owner: AWS Provider: S3 Version: '1' Configuration: S3Bucket: !Ref 'S3Bucket' S3ObjectKey: !Ref 'SourceS3Key' OutputArtifacts: - Name: TemplateSource
階段 2: TestStage
在 TestStage
階段,管道會建立測試堆疊、等待您的核准,然後刪除測試堆疊。
對於 CreateStack
動作,管道會使用測試組態檔案和 WordPress 範本來建立測試堆疊。這兩個檔案包含在從來源階段引進的 TemplateSource
輸入成品中。程式碼片段使用 REPLACE_ON_FAILURE
動作模式。如果堆疊建立失敗,管道將會取代它,因此在重新執行管道之前,您不需要清除或排解堆疊的問題。動作模式對於測試堆疊的快速更新很有用。對於 RoleArn
屬性,值是 範本中其他位置宣告 AWS CloudFormation 的服務角色。
ApproveTestStack
動作會暫停管道,並傳送通知給您在建立管道堆疊時指定的電子郵件地址。當管道暫停時,您可以檢查 WordPress 測試堆疊及其資源。使用 CodePipeline 來核准或拒絕此動作。CustomData
屬性包含您要核准之動作的描述,核准之後管道會將通知新增至電子郵件。
在您核准此動作之後, 會 CodePipeline 移至DeleteTestStack
動作,並刪除測試 WordPress 堆疊及其資源。
- Name: TestStage Actions: - Name: CreateStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: REPLACE_ON_FAILURE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName TemplateConfiguration: !Sub "TemplateSource::${TestStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveTestStack ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'Do you want to create a change set against the production stack and delete the ${TestStackName} stack?' RunOrder: '2' - Name: DeleteTestStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: DELETE_ONLY RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName RunOrder: '3'
階段 3: ProdStage
管道的 ProdStage
階段會針對現有的生產堆疊建立變更集、等待核准,然後執行變更集。
變更集提供在實作之前對生產堆疊 AWS CloudFormation 進行的所有修改的預覽。在您第一個管道執行時,您不會有執行中的生產堆疊。變更集顯示建立測試堆疊時 AWS CloudFormation 執行的動作。若要建立變更集,CreateChangeSet
動作會使用 WordPress 範例範本和TemplateSource
輸入成品中的生產範本組態。
類似上個階段,ApproveChangeSet
動作將暫停管道,並傳送電子郵件通知。當管道暫停時,您可以檢視變更集,以檢查對生產 WordPress 堆疊提出的所有修改。使用 CodePipeline 來核准或拒絕此動作,以分別繼續或停止管道。
在您核准此動作後,ExecuteChangeSet
動作會執行變更集,以便 AWS CloudFormation 執行變更集中所述的所有動作。對於初始執行, 會 AWS CloudFormation 建立 WordPress 生產堆疊。在後續執行時, AWS CloudFormation 將更新堆疊。
- Name: ProdStage Actions: - Name: CreateChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName ChangeSetName: !Ref ChangeSetName TemplateConfiguration: !Sub "TemplateSource::${ProdStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveChangeSet ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'A new change set was created for the ${ProdStackName} stack. Do you want to implement the changes?' RunOrder: '2' - Name: ExecuteChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CHANGE_SET_EXECUTE ChangeSetName: !Ref ChangeSetName RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName RunOrder: '3'
步驟 3:檢視 WordPress 堆疊
當 透過管道 CodePipeline 執行時,它會使用 CloudFormation 來建立測試和生產堆疊。若要查看這些堆疊及其輸出的狀態,請使用 CloudFormation 主控台。
檢視堆疊
-
在 開啟 CloudFormation 主控台https://console.aws.amazon.com/cloudformation/
。 -
根據您的管道處於測試或生產階段,選擇
Test-MyWordPressSite
或Prod-MyWordPressSite
堆疊。 -
若要查看您堆疊的狀態,請檢視堆疊事件。
如果堆疊處於故障狀態,請檢視狀態原因以找出堆疊錯誤。修正錯誤,然後重新執行管道。如果堆疊處於 CREATE_COMPLETE
狀態,請檢視其輸出,以取得您 WordPress 網站的 URL 。
您已成功使用 CodePipeline 為範例 WordPress 網站建立持續交付工作流程。如果您提交變更至 S3 儲存貯體, CodePipeline 會自動偵測新版本,然後重新執行您的管道。此工作流程可讓您更容易提交和測試變更,然後再變更您的生產網站。
步驟 4:清除資源
為避免您為不需要的服務支付費用,請刪除您的資源。
重要
在刪除管道 WordPress 堆疊之前,請先刪除測試和生產堆疊。管道堆疊包含刪除 WordPress 堆疊所需的服務角色。如果您先刪除管道堆疊,您可以將另一個服務角色 Amazon Resource Name (ARN) 與 WordPress堆疊建立關聯,然後刪除它們。
刪除成品存放區中的物件
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選擇 CodePipeline 用作管道成品存放區的 S3 儲存貯體。
儲存貯體的名稱需使用此:
。如果您依照此逐步解說,儲存貯體名稱可能類似於以下範例:stackname-artifactstorebucket-id
sample-WordPress-pipeline-artifactstorebucket-12345abcd12345
。 -
刪除成品存放區 S3 儲存貯體中的所有物件。
當您在下個步驟中刪除管道堆疊時,此儲存貯體必須是空的。否則 CloudFormation , 無法刪除儲存貯體。
刪除堆疊
-
從 CloudFormation 主控台中,選擇您要刪除的堆疊。
如果管道建立的 WordPress 堆疊仍在執行中,請先選擇它們。在預設情況下,堆疊名稱為
Test-MyWordPressSite
和Prod-MyWordPressSite
。如果您已刪除 WordPress 堆疊,請選擇
sample-WordPress-pipeline
堆疊。 -
選擇 Actions (動作),然後選擇 Delete Stack (刪除堆疊)。
-
在確認訊息中,選擇 Yes, Delete (是,刪除)。
CloudFormation 會刪除堆疊的所有資源,例如EC2執行個體、通知主題、服務角色和管道。
現在您已了解如何使用 建置基本 CloudFormation 工作流程 CodePipeline,您可以使用範例範本和成品做為建置自己的起點。
另請參閱
以下相關資源可協助您使用這些參數。
-
如需 中 CloudFormation 動作參數的詳細資訊 CodePipeline,請參閱AWS CodePipeline 《 使用者指南》中的AWS CloudFormation 部署動作組態參考。
-
如需動作提供者的範例範本值 (例如
Owner
欄位或configuration
欄位),請參閱 AWS CodePipeline User Guide (《 使用者指南》) 中的 Action structure reference (動作結構參考)。 -
若要下載 YAML或 JSON 格式的範例管道堆疊範本,請參閱 AWS CodePipeline 使用者指南中的教學課程:使用 建立管道 AWS CloudFormation。