在不支援 AWS 的 AWS 區域建立管道 CodePipeline - AWS 方案指引

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

在不支援 AWS 的 AWS 區域建立管道 CodePipeline

創建者阿南德·克里希納·瓦拉納西(AWS)

代碼存儲庫:invisible-codepipeline-unsupported-regions

環境:PoC 或試點

技術:基礎設施; DevOps

AWS 服務:AWS CodeBuild;AWS CodeCommit;AWS CodeDeploy;AWS CodePipeline

Summary

AWS CodePipeline 是持續交付 (CD) 協調服務,屬於來自 Amazon Web Services (AWS) 的一組 DevOps 工具。它整合了各種來源 (例如版本控制系統和儲存解決方案)、AWS 和 AWS 合作夥伴的持續整合 (CI) 產品和服務,以及開放原始碼產品,為快速的應用程式和基礎設施部署提供 end-to-end 工作流程服務。

CodePipeline 不過,並非所有 AWS 區域都支援,而且擁有連接 AWS CI/CD 服務的隱形協調器非常有用。此模式描述如何在尚 CodePipeline 未透過 AWS CodeCommit、AWS 和 AWS 等 AWS CI/CD 服務支援的 AWS 區域實 end-to-end 作工作流程管道。 CodeBuild CodeDeploy

先決條件和限制

前提

  • 有效的 AWS 帳戶

  • AWS Cloud Development Kit (AWS CDK) CLI 2.28 版或更新版本

架構

目標技術堆疊

下圖顯示在不支援的區域中建立的管道 CodePipeline,例如非洲 (開普敦) 區域。開發人員將 CodeDeploy 配置文件(也稱為部署生命週期鉤子腳本)推送到託管的 Git 存儲庫。 CodeCommit(請參閱此模式提供的GitHub 存儲庫。) Amazon EventBridge 規則會自動啟動。 CodeBuild

CodeDeploy 組態檔案會從中擷取, CodeCommit 做為管線來源階段的一部分,然後傳輸到 CodeBuild。 

在下一個階段, CodeBuild 執行下列工作: 

  1. 下載應用程式原始程式碼 TAR 檔案。您可以使用 AWS Systems Manager 的功能參數存放區來設定此檔案的名稱。

  2. 下載組 CodeDeploy 態檔案。

  3. 建立應用程式原始程式碼和特定於應用程式類型的 CodeDeploy 組合歸檔。

  4. 使用合併的存檔,啟動 CodeDeploy 部署到 Amazon 彈性運算雲端 (Amazon EC2) 執行個體。

在不支援的 AWS 區域中建立管道

工具

AWS 服務

  • AWS CodeBuild 是全受管的建置服務,可協助您編譯原始程式碼、執行單元測試,以及產生準備好部署的成品。

  • AWS CodeCommit 是一種版本控制服務,可協助您以私密方式存放和管理 Git 儲存庫,而無需管理自己的原始檔控制系統。

  • AWS 可 CodeDeploy自動部署到 Amazon EC2 或現場部署執行個體、AWS Lambda 函數或亞馬遜彈性容器服務 (Amazon ECS) 服務。

  • AWS 可 CodePipeline協助您快速建模和設定軟體發行的不同階段,並自動執行持續發行軟體變更所需的步驟。

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。

Code

此模式的程式碼可在「 GitHub CodePipeline 不支援的地區」儲存庫中取得。

史诗

任務描述所需技能

安裝 AWS CDK CLI。

如需相關指示,請參閱 AWS CDK 文件

AWS DevOps

安裝 Git 用戶端。

要創建提交,您可以使用安裝在本地計算機上的 Git 客戶端,然後將提交推送到 CodeCommit 存儲庫。若要 CodeCommit 使用 Git 用戶端進行設定,請參閱CodeCommit 文件

AWS DevOps

安裝 npm。

安裝 npm 軟件包管理器。如需詳細資訊,請參閱 npm 文件

AWS DevOps
任務描述所需技能

克隆代碼存儲庫。

執行下列命令,將「 GitHub CodePipeline 不支援的區域」儲存庫複製到您的本機電腦。

git clone https://github.com/aws-samples/invisible-codepipeline-unsupported-regions
DevOps 工程師

在中設定參數。

開啟cdk.json檔案並提供下列參數的值:

"pipeline_account":"XXXXXXXXXXXX", "pipeline_region":"us-west-2", "repo_name": "app-dev-repo", "ec2_tag_key": "test-vm", "configName" : "cbdeployconfig", "deploymentGroupName": "cbdeploygroup", "applicationName" : "cbdeployapplication", "projectName" : "CodeBuildProject"

其中:

  • pipeline_account是要建立管道的 AWS 帳戶。

  • pipeline_region是要建立管道的 AWS 區域。

  • repo_name是存 CodeCommit 放庫的名稱。

  • ec2_tag_key是附加到要部署代碼的 EC2 實例的標籤。

  • configName是組 CodeDeploy 態檔案的名稱。

  • deploymentGroupName是部 CodeDeploy 署群組的名稱。

  • applicationName是 CodeDeploy 應用程式名稱。

  • projectName是 CodeBuild 專案名稱。

AWS DevOps

設定 AWS CDK 建構程式庫。

在複製的 GitHub 存放庫中,使用下列命令安裝 AWS CDK 建構程式庫、建立應用程式,以及進行合成以產生應用程式的 AWS CloudFormation 範本。

npm i aws-cdk-lib npm run build cdk synth
AWS DevOps

部署範例 AWS CDK 應用程式。

在不支援的區域 (例如af-south-1) 中執行下列命令來部署程式碼。

cdk deploy
AWS DevOps
任務描述所需技能

設定應用程式的 CI/CD。

複製您在cdk.json檔案中指定的 CodeCommit 存放庫 (app-dev-repo依預設會呼叫此儲存庫),以設定應用程式的 CI/CD 管線。

git clone https://git-codecommit.us-west-2.amazonaws.com/v1/repos/app-dev-repo

其中存放庫名稱和區域取決於您在cdk.json檔案中提供的值。

AWS DevOps
任務描述所需技能

使用部署指示測試管線。

「 GitHub CodePipeline 不支援的區域」儲存庫的CodeDeploy_Files資料夾包含指示部署應用程式 CodeDeploy 的範例檔案。該appspec.yml文件是一個 CodeDeploy 配置文件,其中包含用於控制應用程序部署流程的掛接。您可以使用範例檔案index.htmlstart_server.shstop_server.sh、和install_dependencies.sh來更新託管在 Apache 上的網站。以下是範例 — 您可以使用 GitHub 儲存庫中的程式碼來部署任何類型的應用程式。將檔案推送至 CodeCommit 存放庫時,會自動啟動不可見的管線。如需部署結果,請檢查 CodeBuild 和 CodeDeploy 主控台中個別階段的結果。

AWS DevOps

相關資源