使用 AWS 副駕駛員將叢集應用程式部署到 Amazon ECS - AWS 方案指引

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

使用 AWS 副駕駛員將叢集應用程式部署到 Amazon ECS

由讓·巴蒂斯特·吉盧瓦 (AWS)、馬修·喬治 (AWS) 和托馬斯·斯科特 (AWS) 創建

程式碼儲存庫:叢集範例應用程式

環境:生產

技術:容器和微服務; 業務生產力; CloudNative DevelopmentAndTesting

AWS 服務:Amazon ECS; AWS Fargate; Amazon ECR

Summary

此模式示範如何以兩種方式在 Amazon 彈性容器服務 (Amazon ECS) 叢集中部署容器,方法是使用 Amazon Web Services (AWS) 管理主控台,並使用 AWS 副駕駛員,以示範 AWS Copilot 如何簡化部署任務。

Amazon ECS 是可高度擴展、快速的容器管理服務,可讓您輕鬆執行、停止和管理叢集上的容器。您可用來在服務中執行個別任務或任務的任務定義中會對您的容器進行定義。您可以在由 AWS Fargate 管理的無伺服器基礎設施上執行任務和服務。或者,若要進一步控制基礎設施,您可以在您管理的 Amazon 彈性運算雲端 (Amazon EC2) 執行個體叢集上執行任務和服務。

AWS Copilot 命令列界面 (CLI) 命令可簡化從本機開發環境在 Amazon ECS 上生產就緒容器化應用程式的建置、釋放和操作。AWS Copilot CLI 與支援現代應用程式最佳實務的開發人員工作流程保持一致:從使用基礎設施即程式碼,到建立代表使用者佈建的持續整合和持續交付 (CI/CD) 管道。您可以將 AWS Copilot CLI 用作日常開發和測試週期的一部分,作為 AWS 管理主控台的替代方案。

先決條件和限制

先決條件

  • 有效的 AWS 帳戶

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 在本機安裝和設定為使用您的 AWS 帳戶 (請參閱 AWS CLI 文件中的安裝說明和組態說明)

  • AWS 副駕駛員已在本機安裝 (請參閱 Amazon ECS 文件中的安裝說明)

  • 安裝在本地計算機上的 Docker(請參閱 Docker 文檔)

限制

  • Docker 強制執行免費方案中每個 IP 位址每 6 小時 100 張容器映像的提取限制。

架構

目標技術堆疊

  • AWS 環境透過虛擬私有雲端 (VPC)、公有和私有子網路以及安全群組進行設定

  • Amazon ECS 叢集

  • Amazon ECS 服務和任務定義

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon DynamoDB

  • Application Load Balancer

  • AWS Fargate

  • Amazon Identity and Access Management (IAM)

  • Amazon CloudWatch

  • AWS CloudTrail

目標架構

當您為此病毒碼部署範例應用程式時,會在不同的可用區域中建立和部署多個工作。每個任務都會將資料存放在 Amazon DynamoDB 中。當您訪問任務的網頁時,您可以查看所有其他任務的數據。

使用 AWS 副駕駛部署容器的架構

工具

AWS 服務

  • Amazon ECR 亞馬遜彈性容器註冊表 (Amazon ECR) 是一種 AWS 受管容器映像登錄服務,安全、可擴展且可靠。Amazon ECR 支援私有儲存庫,其具有使用 IAM 的資源型許可。

  • Amazon ECS — 亞馬遜彈性容器服務 (Amazon ECS) 是一種高度可擴展、快速的容器管理服務,用於在叢集上執行、停止和管理容器。您可以在由 AWS Fargate 管理的無伺服器基礎設施上執行任務和服務。或者,若要進一步控制基礎設施,您可以在您管理的 Amazon 彈性運算雲端 (Amazon EC2) 執行個體叢集上執行任務和服務。

  • AWS Copilot — AWS Copilot 提供命令列界面,可協助您在 AWS 上啟動和管理容器化應用程式,包括推送到登錄、建立任務定義以及建立叢集。

  • AWS Fargate — AWS Fargate 是無伺服器 pay-as-you-go 運算引擎,可讓您專注於建置應用程式,而無需管理伺服器。AWS Fargate 與 Amazon ECS 和亞馬 Amazon Elastic Kubernetes Service(Amazon EKS)兼容。當您使用 Fargate 啟動類型或 Fargate 容量提供者執行 Amazon ECS 任務和服務時,將會在容器中封裝應用程式、指定 CPU 和記憶體需求、定義聯網和 IAM 政策,並啟動應用程式。每個 Fargate 任務都有自己的隔離邊界,不會與其他任務共享基礎內核,CPU 資源,內存資源或 elastic network interface。

  • 亞馬遜 DynamoDB — Amazon DynamoDB 是全受管的 NoSQL 資料庫服務,可提供快速且可預測的效能以及無縫的可擴展性。

  • E@@ lastic Load Balancing (ELB) — Elastic Load Balancing 會自動將傳入流量分配到一或多個可用區域中的多個目標,例如 EC2 執行個體、容器和 IP 地址。其會監控已註冊目標的運作狀態,並且僅將流量路由至運作狀態良好的目標。當傳入流量隨著時間發生變化,Elastic Load Balancing 會擴展您的負載平衡器。他可以自動擴展以因應絕大多數的工作負載。

工具

Code

您可以在「叢集範例應用程式」存放庫中找到此模式中使用的範例應用程式的程式碼。 GitHub請遵循下一節中的指示來使用範例檔案。

史诗

任務描述所需技能
克隆存 GitHub 儲庫。

使用以下命令克隆示例代碼存儲庫:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
AWS 應用程式開發人員 DevOps
建立您的 Amazon ECR 儲存庫。
  1. 登入 AWS 管理主控台,然後開啟 Amazon ECR 主控台,網址為 https://console.aws.amazon.com/ecr/repositories

  2. 選擇建立儲存庫

  3. 對於存放庫名稱,請輸入cluster-sample-app

  4. 對於所有其他設定,請保留預設值。

  5. 選擇建立儲存庫

如需詳細資訊,請參閱 Amazon ECR 文件中的建立私有存放庫

AWS 應用程式開發人員 DevOps
建置、標記您的 Docker 映像檔,並將其推送至您的 Amazon ECR 儲存庫。
  1. 選取您剛建立的儲存庫,然後選擇 [檢視推送指令]。

  2. 複製顯示的命令並在本地運行它們以構建,標記和推送碼 docker 映像。這些命令將類似於以下內容。

要向註冊表驗證您的 Docker 客戶端:

aws ecr get-login-password --region <YOUR_AWS_REGION> | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com

若要建立您的泊塢視窗映像檔:

docker build -t cluster-sample-app .

要標記您的碼頭圖像:

docker tag cluster-sample-app:latest <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest

要將 Docker 映像推送到您的存儲庫:

docker push <YOUR_AWS_ACCOUNT>.dkr.ecr.<YOUR_AWS_REGION>.amazonaws.com/cluster-sample-app:latest
AWS 應用程式開發人員 DevOps
部署應用程式堆疊。
  1. 開啟 AWS 主 CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation/

  2. 選擇建立堆疊

  3. 在「準備範本」區段中,選擇「範本已就緒」。

  4. Specify template (指定範本) 區段中,選擇 Upload a template file (上傳範本檔案)

  5. 選擇您從 GitHub 儲存庫複製cluster-sample-app-stack.yml的本機檔案做為 CloudFormation 範本,然後選擇 [下一步]。

  6. 輸入堆疊的名稱,然後選擇 [下一步]。

  7. 保留所有預設選項,然後選擇 [下一步]。

  8. 檢閱所有選項、確認 IAM 資源的建立,然後選擇 [建立堆疊]。

  9. 部署應用程式堆疊後,請選擇 [出] 索引標籤,複製 URL,然後在瀏覽器中開啟它以存取應用程式。

如需部署 CloudFormation 範本的詳細資訊,請參閱 AWS CloudFormation 文件中的建立堆疊

AWS 應用程 DevOps式開發人員
任務描述所需技能
克隆存 GitHub 儲庫。

使用以下命令克隆示例代碼存儲庫:

git clone https://github.com/aws-samples/cluster-sample-app cluster-sample-app && cd cluster-sample-app
AWS 應用程式開發人員 DevOps
使用 AWS 副駕駛 CLI 將您的容器映像部署到 AWS。

在專案的根目錄中使用下列指令,只需一個步驟即可部署應用程式:

copilot init --app cluster-sample-app --name demo --type "Load Balanced Web Service" --dockerfile ./Dockerfile --port 8080 --deploy

然後,您應該可以使用作為輸出提供的 DNS 名稱來訪問應用程序。

AWS 應用程式開發人員 DevOps
任務描述所需技能
刪除透過 AWS 管理主控台建立的資源。

如果您使用選項 1 (AWS 管理主控台) 部署應用程式堆疊,請在準備好刪除所建立的資源時遵循下列步驟:

  1. 請在以下位置開啟 CloudFormation 主控台。 https://console.aws.amazon.com/cloudformation/

  2. 選取您建立的堆疊,然後選擇 [刪除]。

  3. https://console.aws.amazon.com/ecr/repositories 開啟 Amazon ECR 主控台。

  4. 選取您建立的存放庫,然後選擇 [刪除]。

AWS 應用程式開發人員 DevOps
刪除 AWS 副駕駛建立的資源。

如果您使用選項 2 (AWS Copilot CLI) 部署應用程式堆疊,請在準備刪除所建立的資源時,從專案的根目錄執行下列命令:

copilot app delete
AWS 應用程式開發人員 DevOps

相關資源