本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CDK 自動為微服務建置 CI/CD 管道和 Amazon ECS 叢集
由 Varsha Raju (AWS) 建立
Summary
此模式說明如何自動建立持續整合和持續交付 (CI/CD) 管道,以及在 Amazon Elastic Container Service (Amazon ECS) 上建置和部署微服務的基礎基礎設施。如果您想要設定proof-of-concept CI/CD 管道,向組織展示 CI/CD、微服務和 DevOps 的優勢,您可以使用此方法。您也可以使用此方法來建立初始 CI/CD 管道,然後您可以根據組織的需求自訂或變更這些管道。
模式的方法會建立生產環境和非生產環境,每個環境都有虛擬私有雲端 (VPC) 和設定為在兩個可用區域中執行的 Amazon ECS 叢集。這些環境由所有微服務共用,然後您為每個微服務建立 CI/CD 管道。這些 CI/CD 管道會從 AWS CodeCommit 中的來源儲存庫提取變更、自動建置變更,然後將變更部署到您的生產和非生產環境中。當管道成功完成其所有階段時,您可以使用 URLs生產和非生產環境中存取微服務。
先決條件和限制
先決條件
作用中的 Amazon Web Services (AWS) 帳戶。
包含
starter-code.zip
檔案 (已連接) 的現有 Amazon Simple Storage Service (Amazon S3) 儲存貯體。AWS 雲端開發套件 (AWS CDK),已安裝並設定在您的 帳戶中。如需詳細資訊,請參閱 AWS CDK 文件中的 AWS CDK 入門。
Python 3 和
pip
,已安裝並設定。如需詳細資訊,請參閱 Python 文件。 熟悉 AWS CDK、AWS CodePipeline、AWS CodeBuild、CodeCommit、Amazon Elastic Container Registry (Amazon ECR)、Amazon ECS 和 AWS Fargate。
熟悉 Docker。
了解 CI/CD 和 DevOps。
限制
適用一般 AWS 帳戶限制。如需詳細資訊,請參閱 AWS 一般參考文件中的 AWS 服務配額。
產品版本
程式碼已使用 Node.js 16.13.0 版和 AWS CDK 1.132.0 版進行測試。
架構

該圖顯示以下工作流程:
應用程式開發人員將程式碼遞交至 CodeCommit 儲存庫。
管道已啟動。
CodeBuild 建置 Docker 映像並將其推送至 Amazon ECR 儲存庫
CodePipeline 會將新映像部署到非生產 Amazon ECS 叢集中的現有 Fargate 服務。
Amazon ECS 會將映像從 Amazon ECR 儲存庫提取至非生產 Fargate 服務。
測試是使用非生產 URL 執行。
發行管理員會核准生產部署。
CodePipeline 會將新映像部署到生產 Amazon ECS 叢集中的現有 Fargate 服務
Amazon ECS 會將映像從 Amazon ECR 儲存庫提取至生產 Fargate 服務。
生產使用者使用生產 URL 存取您的功能。
技術堆疊
AWS CDK
CodeBuild
CodeCommit:
CodePipeline
Amazon ECR
Amazon ECS
Amazon VPC
自動化和擴展
您可以使用此模式的方法,為部署在共用 AWS CloudFormation 堆疊中的微服務建立管道。自動化可以在每個 VPC 中建立多個 Amazon ECS 叢集,也可以為部署在共用 Amazon ECS 叢集中的微服務建立管道。不過,這需要您提供新的資源資訊做為管道堆疊的輸入。
工具
AWS CDK – AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可用來定義程式碼中的雲端基礎設施,並透過 AWS CloudFormation 佈建雲端基礎設施。
AWS CodeBuild – AWS CodeBuild 是雲端中全受管的建置服務。CodeBuild 可編譯原始碼、執行單元測試,並產生可立即部署的成品。
AWS CodeCommit – AWS CodeCommit 是一種版本控制服務,可讓您在 AWS 雲端中私下存放和管理 Git 儲存庫。CodeCommit 讓您無需管理自己的來源控制系統或擔心擴展其基礎設施。
AWS CodePipeline – AWS CodePipeline 是一種持續交付服務,可用來建立模型、視覺化和自動化發行軟體所需的步驟。您可以使用快速模型化和設定軟體發行程序的不同階段。CodePipeline 會自動化持續發佈軟體變更所需的步驟。
Amazon ECS – Amazon Elastic Container Service (Amazon ECS) 是一種高度可擴展的快速容器管理服務,用於執行、停止和管理叢集上的容器。您可以在 AWS Fargate 管理的無伺服器基礎設施上執行任務和服務。或者,若要進一步控制您的基礎設施,您可以在您管理的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體叢集上執行任務和服務。
Docker
– Docker 可協助開發人員封裝、運送和執行任何應用程式,做為輕量、可攜式且自給自足的容器。
Code
此模式的程式碼可在 cicdstarter.zip
和 starter-code.zip
檔案 (已連接) 中使用。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
設定 AWS CDK 的工作目錄。 |
| AWS DevOps、雲端基礎設施 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立共用基礎設施。 |
| AWS DevOps、雲端基礎設施 |
監控 AWS CloudFormation 堆疊。 |
| AWS DevOps、雲端基礎設施 |
測試 AWS CloudFormation 堆疊。 |
重要請務必記錄兩個 VPCs IDs 和兩個 VPCs 中預設安全群組的安全群組 IDs。 | AWS DevOps、雲端基礎設施 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立微服務的基礎設施。 |
注意您也可以使用 目錄中 | AWS DevOps、雲端基礎設施 |
監控 AWS CloudFormation 堆疊。 | 開啟 AWS CloudFormation 主控台並監控 | AWS DevOps、雲端基礎設施 |
測試 AWS CloudFormation 堆疊。 |
| |
使用管道。 |
| AWS DevOps、雲端基礎設施 |
為每個微服務重複此史詩。 | 重複此史詩中的任務,為每個微服務建立 CI/CD 管道。 | AWS DevOps、雲端基礎設施 |
相關資源
其他資訊
cdk synth
命令
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
cdk deploy
command
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
附件
若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip