本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CDK 和 GitLab 在 Amazon ECS Anywhere 上設定混合工作負載的 CI/CD 管道
由 Rahul Sharad Gaikwad 醫生 (AWS) 建立
Summary
注意:AWS CodeCommit 不再提供給新客戶。AWS CodeCommit 的現有客戶可以繼續正常使用服務。進一步了解
Amazon ECS Anywhere 是 Amazon Elastic Container Service (Amazon ECS) 的延伸。它支援向 Amazon ECS 叢集註冊外部執行個體,例如現場部署伺服器或虛擬機器 (VM)。 功能有助於降低成本並減輕複雜的本機容器協同運作和操作。您可以使用 ECS Anywhere 在內部部署和雲端環境中部署和執行容器應用程式。它消除了您的團隊學習多個網域和技能集,或自行管理複雜軟體的需求。
此模式描述使用 step-by-step方法。 Amazon ECS Anywhere 然後,您可以使用 AWS CodePipeline 來設定持續整合和持續部署 (CI/CD) 管道。然後,您將 GitLab 程式碼儲存庫複寫至 AWS CodeCommit,並在 Amazon ECS 叢集上部署容器化應用程式。
此模式旨在協助使用現場部署基礎設施來執行容器應用程式,並使用 GitLab 管理應用程式程式碼庫的人員。您可以使用 AWS 雲端服務來管理這些工作負載,而不會干擾現有的現場部署基礎設施。
先決條件和限制
先決條件
作用中的 AWS 帳戶
在內部部署基礎設施上執行的容器應用程式。
您管理應用程式程式碼庫的 GitLab 儲存庫。如需詳細資訊,請參閱儲存庫
(GitLab)。 安裝並設定 AWS Command Line Interface (AWS CLI)。如需詳細資訊,請參閱安裝或更新最新版本的 AWS CLI (AWS CLI 文件)。
AWS CDK Toolkit,全域安裝和設定。如需詳細資訊,請參閱安裝 AWS CDK (AWS CDK 文件)。
npm,在 TypeScript 中為 AWS CDK 安裝和設定。如需詳細資訊,請參閱下載並安裝 Node.js 和 npm
(npm 文件)。
限制
如需限制和考量,請參閱 Amazon ECS Anywhere)。
產品版本
AWS CDK Toolkit 2.27.0 版或更新版本
npm 7.20.3 版或更新版本
Node.js 16.6.1 版或更新版本
架構
目標技術堆疊
AWS CDK
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon ECS Anywhere
Amazon Elastic Container Registry (Amazon ECR)
AWS Identity and Access Management (IAM)
AWS System Manager
GitLab 儲存庫
目標架構

此圖表代表此模式中描述的兩個主要工作流程,佈建 Amazon ECS 叢集並設定 CI/CD 管道,以設定和部署 CI/CD 管道,如下所示:
佈建 Amazon ECS 叢集
當您部署第一個 AWS CDK 堆疊時,它會在 AWS 上建立 CloudFormation 堆疊。
此 CloudFormation 堆疊會佈建 Amazon ECS 叢集和相關的 AWS 資源。
若要向 Amazon ECS 叢集註冊外部執行個體,您必須在 VM 上安裝 AWS Systems Manager Agent (SSM Agent),並將 VM 註冊為 AWS Systems Manager 受管執行個體。
您還必須在 VM 上安裝 Amazon ECS 容器代理程式和 Docker,以向 Amazon ECS 叢集將其註冊為外部執行個體。
使用 Amazon ECS 叢集註冊和設定外部執行個體時,它可以在您的 VM 上執行多個容器,其已註冊為外部執行個體。
Amazon ECS 叢集處於作用中狀態,可以透過容器執行應用程式工作負載。Amazon ECS Anywhere 容器執行個體會在內部部署環境中執行,但與雲端中的 Amazon ECS 叢集相關聯。
設定和部署 CI/CD 管道
當您部署第二個 AWS CDK 堆疊時,它會在 AWS 上建立另一個 CloudFormation 堆疊。
此 CloudFormation 堆疊會在 CodePipeline 和相關的 AWS 資源中佈建管道。
您可以將應用程式程式碼變更推送並合併至內部部署 GitLab 儲存庫。
GitLab 儲存庫會自動複寫至 CodeCommit 儲存庫。
CodeCommit 儲存庫的更新會自動啟動 CodePipeline。
CodePipeline 從 CodeCommit 複製程式碼,並在 CodeBuild 中建立可部署的應用程式建置。
CodePipeline 會建立 CodeBuild 組建環境的 Docker 映像,並將其推送至 Amazon ECR 儲存庫。
CodePipeline 會啟動 CodeDeploy 動作,從 Amazon ECR 儲存庫提取容器映像。
CodePipeline 在 Amazon ECS 叢集上部署容器映像。
自動化和擴展
此模式使用 AWS CDK 做為基礎設施做為程式碼 (IaC) 工具來設定和部署此架構。AWS CDK 可協助您協調 AWS 資源,並設定 Amazon ECS Anywhere 和 CI/CD 管道。
工具
AWS 服務
AWS 雲端開發套件 (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。
AWS CodeCommit 是一種版本控制服務,可協助您私下存放和管理 Git 儲存庫,而無需管理您自己的來源控制系統。
AWS CodePipeline 可協助您快速建模和設定軟體版本的不同階段,並自動化持續發行軟體變更所需的步驟。
AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列 shell 中的命令與 AWS 服務互動。
Amazon Elastic Container Registry (Amazon ECR) 是一種受管容器映像登錄服務,安全、可擴展且可靠。
Amazon Elastic Container Service (Amazon ECS) 是快速、可擴展的容器管理服務,可協助您執行、停止和管理叢集上的容器。此模式也使用 Amazon ECS Anywhere,可提供將內部部署伺服器或 VM 註冊至 Amazon ECS 叢集的支援。
其他工具
程式碼儲存庫
此模式的程式碼可在 Amazon ECS Anywhere 的 GitHub CI/CD 管道中使用 AWS CDK 儲存庫。 Amazon ECS Anywhere
最佳實務
部署此模式時,請考慮下列最佳實務:
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
驗證 AWS CDK 版本。 | 輸入下列命令來驗證 AWS CDK Toolkit 的版本。
此模式需要 2.27.0 版或更新版本。如果您有較舊的版本,請遵循 AWS CDK 文件中的指示進行更新。 | DevOps 工程師 |
驗證 npm 版本。 | 輸入下列命令來驗證 npm 的版本。
此模式需要 7.20.3 版或更新版本。如果您有較舊的版本,請遵循 npm 文件 | DevOps 工程師 |
設定 AWS 登入資料。 | 輸入
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
複製 AWS CDK 程式碼儲存庫。 |
| DevOps 工程師 |
引導環境。 | 輸入下列命令,將 CloudFormation 範本部署至您想要使用的帳戶和 AWS 區域。
如需詳細資訊,請參閱 AWS CDK 文件中的引導。 | DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
安裝套件相依性並編譯 TypeScript 檔案。 | 輸入下列命令來安裝套件相依性並編譯 TypeScript 檔案。
這些命令會從範例儲存庫安裝所有套件。如需詳細資訊,請參閱 npm 文件中的 npm ci | DevOps 工程師 |
建置專案。 | 若要建置專案程式碼,請輸入下列命令。
如需建置和部署專案的詳細資訊,請參閱 AWS CDK 文件中的您的第一個 AWS CDK 應用程式。 | DevOps 工程師 |
部署 Amazon ECS Anywhere 基礎設施堆疊。 |
| DevOps 工程師 |
驗證堆疊建立和輸出。 |
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
設定您的 VM。 | 從 Vagrantfile 所在的根目錄輸入 | DevOps 工程師 |
將您的 VM 註冊為外部執行個體。 |
這會設定您的 VM 是 Amazon ECS Anywhere 外部執行個體,並在 Amazon ECS 叢集中註冊執行個體。如需詳細資訊,請參閱 Amazon ECS 文件中的向叢集註冊外部執行個體 | DevOps 工程師 |
驗證 Amazon ECS Anywhere 和外部 VM 的狀態。 | 若要驗證您的 VM 是否已連線至 Amazon ECS 控制平面並執行,請使用下列命令。
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
在 CodeCommit 儲存庫中建立分支。 | 透過建立儲存庫的第一個遞交,在 CodeCommit 儲存庫
| DevOps 工程師 |
設定儲存庫鏡像。 | 您可以在外部來源之間鏡像 GitLab 儲存庫。您可以選擇哪個儲存庫做為來源。分支、標籤和遞交會自動同步。在託管應用程式的 GitLab 儲存庫和 CodeCommit 儲存庫之間設定推送鏡。如需說明,請參閱設定從 GitLab 到 CodeCommit 的推播鏡 注意根據預設,鏡像會自動同步儲存庫。如果您想要手動更新儲存庫,請參閱更新鏡像 | DevOps 工程師 |
部署 CI/CD 管道堆疊。 | 輸入下列命令來部署
| DevOps 工程師 |
測試 CI/CD 管道。 |
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
清除和刪除資源。 | 逐步解說此模式之後,您應該移除您建立的proof-of-concept資源。若要清除,請輸入下列命令。
| DevOps 工程師 |
故障診斷
問題 | 解決方案 |
---|---|
安裝套件相依性時遺失套件的錯誤。 | 輸入下列其中一個命令來解決遺失的套件。
或
|
當您在 VM 上執行
|
|
Amazon ECS 運作狀態檢查會傳回
| 輸入下列命令,在您的 Vagrant VM 上重新啟動 Amazon ECS 代理程式。
|
相關資源
Amazon ECS Anywhere 研討會範例
(GitHub) 儲存庫鏡像
(GitLab 文件)