建立 CI/CD 管道以使用 AWS Fargate 方和 Amazon API Gateway 部署微服務 - AWS Prescriptive Guidance

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

建立 CI/CD 管道以使用 AWS Fargate 方和 Amazon API Gateway 部署微服務

由喬納森·卡多佐 (AWS) 創作

環境:PoC 或試驗

技能:DevOps; 容器和微服務

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

Summary

此模式說明如何建立連續整合和連續部署 (CI/CD) 管道,在 Amazon Web Services (AWS) 雲端部署微服務。傳統上,建置現代化應用程式涉及將商務邏輯解耦和最佳化為微服務架構,以降低複雜性並改善速度和對齊性。API,服務之間的抽象通信,是微服務的基礎。擁有用於部署微服務和 API 的 CI/CD 管線可加速現代應用程式的開發,並協助維持系統穩定性和安全性。

此模式使用 AWS Fargate 為微服務和 Amazon API Gateway 佈建運算資源,以便管理有效處理微服務之間通訊的 API。CI/CD 管線是透過實作三項 AWS 服務來設定:AWS CodePipeline、AWS CodeBuild 和 AWS CodeDeploy。此模式提供 AWS CloudFormation 範本和 Python 程式碼,以自動化大部分步驟,並包含範例應用程式。

先決條件和限制

先決條件

Architecture

模式會使用下列 AWS 服務,如下圖所示:

  • 在私有子網路中,AWS Fargate 管理微服務的運算資源,以減輕基礎設施的負擔。

  • API Gateway er 可處理 API 呼叫,讓您輕鬆地建立、維護和保護任何規模的 API。

  • AWS KMS 會建立和控制用於加密內容 (例如成品和報告) 的金鑰。

  • Amazon Simple Storage Service (Amazon S3) 可作為存放管道產生的成品和報告的儲存庫。

下圖說明 CI/CD 工作流程。

 

Tools

AWS 服務

  • API Gateway— Amazon API Gateway 可協助建立、發佈、維護、監控和保護 REST、HTTP 和 WebSocket API,以便在您的應用程式和微服務中使用。

  • AWS CLI— AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可從命令列中用它來與 AWS 服務互動。

  • CodeCommit— AWS CodeCommit 是全受管原始碼控制服務,可在 AWS 雲端儲存和管理文件、原始碼和二進位檔案。

  • CodePipeline— AWS CodePipeline 是一種持續交付服務,可協助您模型化和設定軟體發行程序的不同階段。

  • CodeBuild— AWS CodeBuild 是一種組建服務,可編譯原始碼、執行單元測試,並產生可立即部署的軟體套件。

  • CodeDeploy— AWS CodeDeploy 是一種軟體部署服務,可將Amazon Elastic Compute Cloud (Amazon EC2)執行個體, 現場部署執行個體, 無伺服器AWS Lambda函數,或Amazon Elastic Container Service (Amazon ECS)服務。

  • Fargate— AWS Fargate 是無伺服器運算引擎,可搭配Amazon ECS,並為容器提供隨需、適當大小的運算容量。

  • Amazon S3— Amazon Simple Storage Service (Amazon S3) 是一種物件儲存服務,可讓您隨時從 Web 上的任何位置儲存和擷取任何數量的資料。

Code

此模式的代碼已附加。您可以下載並解壓縮您的電腦上的專案,以使用史詩部分。

Epics

任務描述所需技能
建立 IAM 使用者。

在您的 AWS 帳戶中,建立一個 AWS Identity and Access Management (IAM) 使用者。如需說明,請參閱IAM 文件

開發人員, 系統管理員, DevOps 工程師
設定您的登入資料。

指派 IAM 使用者的程式設計存取,讓他們可以使用 AWS CLI。如需說明,請參閱AWS CLI 文件

開發人員, 系統管理員, DevOps 工程師
測試您的存取。

若要驗證是否正確設定 IAM 使用者,請使用下列 AWS CLI 命令:

aws sts get-caller-identity --query Account --output text --profile <profile>

where<profile>會從您的認證檔案指定設定檔。命令會輸出您的帳戶 ID。

開發人員, 系統管理員, DevOps 工程師
任務描述所需技能
執行 CloudFormation 範本以部署基礎結構。

在 AWS 帳戶中,建立虛擬私有雲端 (VPC),該虛擬私有雲端使用跨兩個可用區域和 Application Load Balancer 設定。若要部署此基礎設施,請使用下列 AWS CLI 命令:

aws cloudformation deploy \ --stack-name foundation \ --template-file foundation/full.yaml \ --capabilities CAPABILITY_IAM \ --region <region> \ --profile <profile>

wherefoundation/full.yaml是指包含在程式碼附件中的範本,<region>是要使用的 AWS 區域,而 <profile>會從您的認證檔案指定設定檔。

系統管理員, DevOps 工程師
任務描述所需技能
建立管道。

開啟雲形化主控台並通過啟動附件中的管道 .yaml 模板創建一個新的堆棧。設定下列參數:

  • Stack name代表應用程序的管道(默認值為myapp

  • ServiceName是應用程序名稱,並且應該與我的應用程序/模板/服務 .yaml 中的服務名稱相匹配(默認為myapp

  • BranchName在代碼庫中指定一個分支(默認為main

  • Email是啟用手動核准時用於通知的電子郵件地址。

  • ManualApproval指出管線作業是否需要手動核准 (預設為true

這個堆疊會建立下列資源:

  • 一個 CodeCommit 存儲庫,使用ServiceName parameter

  • Amazon Elastic Container Registry (Amazon ECR) 存放庫存放區,可儲存 Docker 影像

  • 您的應用程序的 CodePipeline 道

  • 如果ManualApproval已設定為true,Amazon Simple Notification Service (Amazon SNS) 主題,在管道中有提交操作時通知電子郵件地址 (您會收到確認電子郵件以確認您訂閱 SNS 主題的確認電子郵件)

建立的管線包含下列階段:

  • 來源:監視 CodeCommit 儲存庫中的任何變更。

  • 持續整合:使用工具測試您的應用程式git-秘密單元測試cfn-nag哈多林相依性檢查強盜安全,以及三角

  • 發布:建置並將 Docker 影像推送至 Docker 影像儲存庫。

  • 部署:在手動核准 (如果啟用) 之後,啟動 CloudFormation 範本以部署這個新的服務版本。

系統管理員, DevOps 工程師
檢查部署。

您可以檢查從來源到部署建立的管線的每個步驟,在CodePipeline 主控台

管道尚未運行,因為存儲庫是空的。接下來,請設定範例應用程式,並啟動管道。

系統管理員, DevOps 工程師
任務描述所需技能
複製您的 CodeCommit 儲存庫。

開啟AWS CodeCommit 主控台,選取管道建立的儲存庫,然後選擇複製 URLHTTPS(作為協議)來複製 URL。 

在終端機或命令提示視窗中,使用命令複製儲存庫:

git clone <repoURL>

where<repoURL>是指您從程式 CodeCommit 中取得的複製 URL。如需詳細資訊,請參閲 。CodeCommit 文件

開發人員
複製範例應用程式檔案。

複製儲存庫之後,請複製附件中的內容,並將其放置在新的儲存庫中。您可以在 Linux 或 macOS 上使用下列指令:

cp -rpf ../aws-cicd-microservices-api/myapp/* <reponame>/

where<reponame>指的是您的 CodeCommit 存儲庫的名稱。

開發人員
設定您的應用程式參數。

變更下列兩個檔案以建立您的微服務。

在 中範本/服務.yaml檔案:

  • ServiceNamemyapp (與管道 .yaml 中相同)

  • ServicePath:/myapp (與 app/main.py 中的相同)

  • BranchName: main

  • AlbRulePriority2(每個微服務都應有唯一的AlbRulePriority 數字; 每個微服務增加一個這個數字)

在 中app/main.py檔案:

mypath="myapp"
開發人員
遞交變更。

將更新的檔案發佈至儲存庫:

git add .  git commit -m "first commit" git push origin main
開發人員
檢查部署。

現在您已完成第一個認可作業,您可以檢查管線的每個步驟,從來源到部署,在CodePipeline 主控台

系統管理員, DevOps 工程師

相關資源

Attachments

attachment.zip