在 Amazon ECS 上部署 Java 微服務的 CI/CD 管道 - AWS Prescriptive Guidance

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

在 Amazon ECS 上部署 Java 微服務的 CI/CD 管道

由維傑湯普森 (AWS) 創建

建立者:AWS

環境:PoC 或試驗

技術:容器與微服務;DevOps

AWS 服務:Amazon ECS

Summary

此模式會引導您完成使用 AWS CodeBuild 在現有 Amazon 彈性容器服務 (Amazon ECS) 叢集上為 Java 微服務部署 CI/CD (持續整合和持續交付) 管線的步驟。 當開發人員認可變更時,就會觸發 CI/CD 管線。建置程序在 CodeBuild 中開始,並在完成後,工件就會被推送至 Amazon EElastic Container Registry (Amazon ECR)。從 Amazon ECR 獲取最新版本並推送到 Amazon ECS 服務。

先決條件和限制

先決條件

  • 在亞馬遜 ECS 上執行的現有 Java 微服務應用程式

  • 熟悉 AWS CodeBuild 和 AWS CodePipeline

Architecture

來源技術堆疊

  • 在亞馬遜 ECS 上執行的 Java 微服務

  • 亞馬遜 ECR 中的代碼存儲庫

來源架構

 

目標技術堆疊

  • Amazon ECR

  • Amazon ECS

  • AWS Fargate

目標架構

自動化和擴展

CodeBuild 建置規格 .yml 檔案:

version: 0.2 phases:   pre_build:     commands:       - echo Logging in to Amazon ECR...       - aws --version       - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)       - REPOSITORY_URI=012345678910.dkr.ecr.us-east-1.amazonaws.com/base-image       - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)       - IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}')   build:     commands:       - echo Build started on `date`       - echo building the Jar file       - mvn clean install       - echo Building the Docker image...       - docker build -t $REPOSITORY_URI:latest .       - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG   post_build:     commands:       - echo Build completed on `date`       - echo Pushing the Docker images...       - docker push $REPOSITORY_URI:latest       - docker push $REPOSITORY_URI:$IMAGE_TAG       - echo Writing image definitions file...       - printf '[{"name":"cicd-container","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json       - cat imagedefinitions.json artifacts:     files: imagedefinitions.json

Tools

工具

  • Amazon ECR-Amazon EElastic Container Registry (Amazon ECR) 是一種完全受管的登錄檔,可讓開發人員輕鬆存放、管理和部署 Docker 容器映像。Amazon ECR 已與 Amazon ECS 整合,以簡化您的開發到生產工作流程。Amazon ECR 以可用度高且可擴展的架構來託管您的映像,讓您為應用程式部署可靠的容器。與 AWS Identity and Access Management (IAM) 整合,為每個儲存庫提供資源層級的控制。

  • Amazon ECS-Amazon Elastic Container Service (Amazon ECS) 是一項可高度擴展、擁有高效能的容器協調流程服務,其不僅支援 Docker 容器,還能讓您在 AWS 上輕鬆執行和擴展容器化應用程式。Amazon ECS 無需安裝和操作自己的容器協調流程軟體、管理和擴展虛擬機器叢集,或在這些虛擬機器上排程容器

  • AWS Fargate-AWS Fargate 是 Amazon ECS 的運算引擎,可讓您在不需要管理伺服器或叢集的情況下執行容器。有了 AWS Fargate,就不再需要佈建、設定和擴展虛擬機器的叢集來執行容器。這樣一來即無須選擇伺服器類型、決定何時擴展叢集,或最佳化叢集壓縮。

  • Docker-Docker 是一個平台,可以讓你構建,測試,並在稱為容器包提供應用程序。

  • CodeBuild-AWS CodeBuild 是一項完全受管的持續整合服務,可編譯原始碼、執行測試,並產生可立即部署的軟體套件。AWS CodeBuild 會持續擴展並同時處理多個組建,因此您的組建不會留在佇列中。

  • CodePipeline-AWS CodePipeline 是一項完全受管的持續交付服務,可協助您自動化發行管線,以進行快速且可靠的應用程式和基礎設施更新。每次程式碼變更時,AWS CodePipeline 都會自動化發行程序的建置、測試和部署階段。有了 AWS CodePipeline,就能快速且可靠地交付功能和更新。您可以將 AWS CodePipeline 與第三方服務 (例如 GitHub) 整合,或使用 AWS 程式碼提交或亞馬遜 ECR 等 AWS 服務。

  • Git-Git 是一個分佈式版本控制系統,用於在軟件開發過程中跟踪源代碼的變化。它被設計用於協調程序員之間的工作,但它可以用來跟踪任何一組文件的更改。其目標包括速度、資料完整性,以及對分散式非線性工作流程的支援。您也可以使用 AWS CodeCommit 作為 Git 的替代方案。

Code

  • 專案的 .zip 檔案可作為附件使用。

Epics

任務描述所需技能
建立 CodeBuild 建置專案。

在 https://console.aws.amazon.com/codesuite/codebuild/home 的 AWS CodeBuild 主控台中,建立建置專案並指定其名稱。

開發人員, 系統管理員
選取來源。

這種模式使用 Git 作為代碼庫,所以從可用的選項中選擇 Git。

開發人員, 系統管理員
選取儲存庫。

選取您想要建置程式碼的儲存庫。

開發人員, 系統管理員
選取環境。

您可以從受管理映像清單中選取,或使用 Docker 選擇自訂映像。此模式使用受管理的映像 (Ubuntu)。

開發人員, 系統管理員
選擇服務角色。

您可以建立服務角色,或從現有角色清單中選取。

開發人員, 系統管理員
建立 buildspec 檔案。

您可以建立 buildspec.yml 檔案並新增組態,或使用線上 buildspec 編輯器來設定變更。

開發人員, 系統管理員
選擇人工因素 (選擇性)。

如果需要,配置構建項目的工件。

開發人員, 系統管理員
設定 Amazon CloudWatch Logs。

如有需要,配置構建項目 Amazon CloudWatch 日誌。此步驟為選用,但建議您採用。需支付費用。

開發人員, 系統管理員
選擇使用 Amazon S3 日誌 (可選)。

如果您想儲存記錄檔,請設定 Amazon Simple Storage Service (Amazon S3) 記錄檔的建置專案。

開發人員, 系統管理員
任務描述所需技能
建立管道。

在 https://console.aws.amazon.com/codesuite/codepipeline/home 的 AWS CodePipeline 主控台中,建立管線並指定其名稱。

開發人員, 系統管理員
選取服務角色。

建立服務角色,或從現有服務角色清單中選取。

開發人員, 系統管理員
選擇成品商店。

如果您希望 Amazon S3 建立儲存貯體並將工件存放在其中,請使用預設位置。或者,選取自訂位置並指定現有的儲存貯體。

開發人員, 系統管理員
指定來源供應商。

從來源提供者清單中選擇 GitHub。

開發人員, 系統管理員
選取程式碼的儲存庫和分支。

開發人員, 系統管理員
變更偵測選項。

這些選項是 GitHub 網路掛鉤和 AWS CodePipeline。這種模式使用 GitHub 網路掛鉤。

開發人員, 系統管理員
選取建置供應商。

選取 [AWS CodeBuild] 做為建置提供者,然後選取專案名稱。如果你的代碼是使用詹金斯構建的,你可以選擇詹金斯。

開發人員, 系統管理員
選擇部署提供者。

從可用選項清單中選取 Amazon ECS 做為部署供應商。選取叢集名稱、服務名稱、影像定義檔 (如果有的話),以及部署逾時值 (如果需要)。選擇 Create pipeline (建立管道)。

開發人員, 系統管理員

Attachments

attachment.zip