教學課程:將應用程式部署到 Amazon ECS - Amazon CodeCatalyst

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

教學課程:將應用程式部署到 Amazon ECS

在本教學中,您將學習如何使用工作流程、Amazon 和其他一些服務將無伺服器應用程式部署到 Amazon ECS 彈性容器 AWS 服務 (AmazonECS)。部署的應用程序是一個簡單的你好世界網站,建立在 Apache 的 Web 服務器碼頭圖像。此教學課程會逐步引導您完成必要的準備工作,例如設定叢集,然後說明如何建立工作流程以建置和部署應用程式。

提示

您可以使用為您完成完成完整 Amazon ECS 設置的藍圖,而不是通過本教程進行工作。您將需要使用 Node.js API 與 AWS Fargate或帶有 AWS Fargate藍圖API的 Java。如需詳細資訊,請參閱 使用藍圖建立專案

必要條件

開始之前:

  • 您需要具有已連線 AWS 帳戶的 CodeCatalyst 空間。如需詳細資訊,請參閱 建立空間

  • 在您的空間中,您需要一個名為:

    codecatalyst-ecs-project

    使用「從頭開始」選項建立此專案。

    如需詳細資訊,請參閱 在 Amazon 中創建一個空項目 CodeCatalyst

  • 在你的項目中,你需要一 CodeCatalyst 名為:

    codecatalyst-ecs-environment

    設定此環境的方式如下:

    • 選擇任何類型,例如非生產

    • 將您的 AWS 帳戶 Connect 到它。

    • 對於「預設」IAM 角色,請選擇任何角色。稍後您將指定不同的角色。

    如需詳細資訊,請參閱 部署到 AWS 帳戶 和 VPCs

步驟 1:設定 AWS 使用者和 AWS CloudShell

本教學課程的第一個步驟是在中建立使用者 AWS IAM Identity Center,然後以此使用者身分啟動 AWS CloudShell 執行個體。在本教程的持續時間, CloudShell 是您的開發計算機,是您配置 AWS 資源和服務的地方。完成教學課程後刪除此使用者。

注意

請勿在本教學課程中使用 root 使用者。您必須建立個別的使用者,否則在稍後的 AWS Command Line Interface (CLI) 中執行動作時可能會遇到問題。

若要取得有關 IAM Identity Center 使用者的更多資訊 CloudShell,請參閱AWS IAM Identity Center 使用者指南AWS CloudShell 使用者指南

建立IAM識別中心使用者的步驟
  1. 登入 AWS Management Console 並開啟 AWS IAM Identity Center 主控台,位於https://console.aws.amazon.com/singlesignon/

    注意

    確保您使用連接到您的 CodeCatalyst空間的登錄。 AWS 帳戶 您可以瀏覽至您的空間並選擇 [帳戶] 索引標籤,確認已連結哪個AWS帳戶。如需詳細資訊,請參閱 建立空間

  2. 在導覽窗格中,選擇 使用者,然後選擇 新增使用者

  3. 使用者名稱中,輸入:

    CodeCatalystECSUser
  4. 在 [密碼] 下方,選擇 [產生一次性密碼,您可以與此使用者共用]。

  5. 在 [電子郵件地址] 和 [確認電子郵件地址] 中,輸入IAM身分識別中心中尚未存在的電子郵件地址。

  6. 名字和姓中,輸入:

    CodeCatalystECSUser
  7. 在 [顯示名稱] 中,保留自動產生的名稱:

    CodeCatalystECSUser CodeCatalystECSUser
  8. 選擇下一步

  9. 在 [新增使用者至群組] 頁面上,選擇 [下一步]。

  10. 在 [檢閱並新增使用者] 頁面上,檢閱資訊並選擇 [新增使用者]。

    這時系統顯示一次性密碼對話框。

  11. 選擇 [複製],然後貼上登入資訊,包括 AWS 存取入口網站URL和一次性密碼。

  12. 選擇關閉

建立許可集合

您會將此權限集指派給CodeCatalystECSUser稍後。

  1. 在瀏覽窗格中,選擇 [權限集],然後選擇 [建立權限集]。

  2. 選擇預先定義的權限集,然後選取AdministratorAccess。此原則為所有人提供完整權限 AWS 服務。

  3. 選擇下一步

  4. 權限集名稱中,輸入:

    CodeCatalystECSPermissionSet
  5. 選擇下一步

  6. 在 [檢閱並建立] 頁面上,檢閱資訊並選擇 [建立]。

若要將權限集指派給 CodeCatalyst ECSUser
  1. 在功 AWS 帳戶 能窗格中,選擇 AWS 帳戶,然後選取您目前登入的對象旁邊的核取方塊。

  2. 選擇 [指派使用者或群組]。

  3. 選擇 Users (使用者) 索引標籤。

  4. 選取旁邊的核取方塊CodeCatalystECSUser

  5. 選擇下一步

  6. 選取旁邊的核取方塊CodeCatalystECSPermissionSet

  7. 選擇下一步

  8. 複查資訊,然後選擇「提交」。

    您現在已經分配CodeCatalystECSUserCodeCatalystECSPermissionSet將 AWS 帳戶它們綁定在一起。

若要登出並重新登入為 CodeCatalyst ECSUser
  1. 在您登出之前,請確定您擁有 AWS 存取入口網站URL、使用者名稱和一次性密碼CodeCatalystECSUser。您應該先前將此資訊複製到文字編輯器中。

    注意

    如果您沒有此資訊,請前往IAM身分識別中心的CodeCatalystECSUser詳細資料頁面,選擇 [重設密碼]、[產生一次性密碼 [...] ,然後再次重設密碼以在螢幕上顯示資訊。

  2. 登出 AWS。

  3. 將 AWS 訪問門戶粘貼URL到瀏覽器的地址欄中。

  4. 使用的使用者名稱和一次性密碼登入CodeCatalystECSUser

  5. 在 [新密碼] 中,輸入密碼,然後選擇 [設定新密碼]。

    螢幕上會出現一個AWS 帳戶方塊。

  6. 選擇 AWS 帳戶,然後選擇您 AWS 帳戶 為其指派CodeCatalystECSUser使用者和權限集的名稱。

  7. 在旁邊CodeCatalystECSPermissionSet,選擇 [管理主控台]

    AWS Management Console 隨即出現。您現在已使用適當CodeCatalystECSUser的權限登入。

若要啟動 AWS CloudShell 執行個體
  1. 作為CodeCatalystECSUser,在頂部導航欄中,選擇 AWS 圖標( AWS icon )。

    的主頁面 AWS Management Console 隨即出現。

  2. 在上方導覽列中,選擇 AWS CloudShell 圖示 ( CloudShell icon )。

    CloudShell 打開。等待 CloudShell 環境建立完成。

    注意

    如果沒有看到 CloudShell 圖示,請確定您所在的地區受支援 CloudShell。本教學課程假設您位於美國西部 (奧勒岡) 區域。

若要確認是否 AWS CLI 已安裝
  1. 在 CloudShell 終端機中,輸入:

    aws --version
  2. 檢查是否顯示版本。

    AWS CLI 已針對目前使用者設定CodeCatalystECSUser,因此不需要設定 AWS CLI 金鑰和認證,就像通常情況一樣。

步驟 2:將預留位置應用程式部署到 Amazon ECS

在本節中,您將手動部署預留位置應用程式到 Amazon ECS。此預留位置應用程式將由您的工作流程部署的 Hello World 應用程式取代。預留位置應用程式是 Apache 網頁伺服器。

如需 Amazon 的詳細資訊ECS,請參閱 Amazon 彈性容器服務開發人員指南

完成下列一系列程序來部署預留位置應用程式。

若要建立作業執行角色

此角色授予 Amazon 以ECS及代表您API撥打電話的權 AWS Fargate (Fargate) 限。

  1. 建立信任原則:

    1. 在中 AWS CloudShell,輸入下列命令:

      cat > codecatalyst-ecs-trust-policy.json

      CloudShell 終端機中會出現閃爍的提示。

    2. 在提示符下輸入以下代碼:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    3. 將游標置於最後一個大括號 (}) 之後。

    4. 按,Enter然後Ctrl+d保存文件並退出貓。

  2. 建立工作執行角色:

    aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  3. 將 AWS 受管理的AmazonECSTaskExecutionRolePolicy策略附加到角色:

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
  4. 顯示角色的詳細資訊:

    aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
  5. 請記下角色的"Arn":值,例如,arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role。您將需要這個 Amazon 資源名稱(ARN)以後。

若要建立 Amazon ECS 叢集

此叢集將包含 Apache 預留位置應用程式,以及之後的 Hello World 應用程式。

  1. 如同 CodeCatalystECSUser AWS CloudShell,在中建立一個空叢集:

    aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
  2. (選擇性) 確認叢集是否已成功建立:

    aws ecs list-clusters

    codecatalyst-ecs-cluster叢集ARN的應該會出現在清單中,表示建立成功。

建立工作定義檔案的步驟

任務定義文件指示運行從 DockerHub中提取的 Apache 2.4 Web 服務器碼頭圖像(httpd:2.4)。

  1. 如同 CodeCatalystECSUser AWS CloudShell,在中建立工作定義檔案:

    cat > taskdef.json
  2. 在提示符下粘貼以下代碼:

    { "executionRoleArn": "arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }

    在前面的代碼中,替換 arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role

    與您在中所記錄ARN的任務執行角色若要建立作業執行角色

  3. 將游標置於最後一個大括號 (}) 之後。

  4. 按,Enter然後Ctrl+d保存文件並退出貓。

向 Amazon 註冊任務定義文件 ECS
  1. 如同 CodeCatalystECSUser AWS CloudShell,在中註冊任務定義:

    aws ecs register-task-definition \ --cli-input-json file://taskdef.json
  2. (選擇性) 確認工作定義是否已註冊:

    aws ecs list-task-definitions

    codecatalyst-ecs-task-def任務定義應該會出現在清單中。

要創建 Amazon ECS 服務

Amazon ECS 服務運行 Apache 佔位符應用程序的任務(和相關的 Docker 容器),以及更高版本的 Hello World 應用程序。

  1. 作為CodeCatalystECSUser,切換到 Amazon 彈性容器服務主控台(如果尚未這樣做)。

  2. 選擇您先前建立的叢集codecatalyst-ecs-cluster

  3. 在「服務」標籤中,選擇「建立」。

  4. 在「建立」頁面中,執行下列動作:

    1. 保留所有預設設定,但接下來列出的設定除外。

    2. 針對 [啟動類型],選擇FARGATE

    3. 在「工作定義」下的「列」下拉式清單中,選擇:

      codecatalyst-ecs-task-def

    4. 在「服務名稱」中,輸入:

      codecatalyst-ecs-service
    5. 針對 [想要的工作],輸入:

      3

      在本教學課程中,每項工作都會啟動單一 Docker 容器。

    6. 展開 [網] 區段。

    7. 對於 VPC,選擇任何VPC。

    8. 對於子網路,請選擇任何子網路。

      注意

      僅指定一個子網路。這就是本教程所需要的一切。

      注意

      如果您沒有VPC和子網路,請建立它們。請參閱 Amazon VPC 使用者指南中的VPC建立子網路和建立子網路。VPC

    9. 針對 [安全性群組],選擇 [建立新的安全性群組],然後執行下列動作:

      1. 在「安全性群組名稱」中,輸入:

        codecatalyst-ecs-security-group
      2. 對於安全性群組說明,請輸入:

        CodeCatalyst ECS security group
      3. 選擇新增規則。對於「類型HTTP,請選擇「來源」,然後選擇「任意位置

    10. 選擇底部的 [建立]。

    11. 等待服務建立完成。這可能需要幾分鐘的時間。

  5. 選擇 [作業] 索引標籤,然後選擇 [重新整理] 按鈕。確認所有三個工作的 [上次狀態] 欄都設定為 [執行中]。

(選擇性) 若要確認您的 Apache 預留位置應用程式正在執行
  1. 在 [工作] 索引標籤中,選擇三個工作中的任何一個。

  2. 在 [公用 IP] 欄位中,選擇 [開啟位址]。

    隨即顯示It Works!頁面。這表明 Amazon ECS 服務成功啟動了使用 Apache 映像啟動 Docker 容器的任務。

    在本教學中,您已手動部署 Amazon ECS 叢集、服務和任務定義,以及 Apache 預留位置應用程式。有了這些項目,您現在就可以建立工作流程,以教學課程的 Hello World 應用程式取代 Apache 預留位置應用程式。

步驟 3:創建一個 Amazon ECR 映像存儲庫

在本節中,您將在 Amazon 彈性容器註冊表(AmazonECR)中創建一個私有映像存儲庫。此儲存庫會儲存教學課程的 Docker 映像檔,以取代您先前部署的 Apache 預留位置影像。

如需 Amazon 的詳細資訊ECR,請參閱 Amazon 彈性容器登錄使用者指南

在 Amazon 中創建映像存儲庫 ECR
  1. 如在中 CodeCatalystECSUser AWS CloudShell,在 Amazon 中創建一個空存儲庫ECR:

    aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
  2. 顯示 Amazon ECR 存儲庫的詳細信息:

    aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
  3. 請注意“repositoryUri”:值,例如,111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo

    稍後在將存放庫新增至工作流程時需要它。

步驟 4:建立 AWS 角色

在本節中,您會建立 CodeCatalyst 工作流程才能運作所需的 AWS IAM角色。這些角色包括:

  • 建立角色 — 授予 CodeCatalyst 建置動作 (在工作流程中) 存取您的 AWS 帳戶並寫入 Amazon ECR 和 Amazon 的權限EC2。

  • 部署角色 — 授予部 CodeCatalyst 署至ECS動作 (在工作流程中) 存取 AWS 帳戶ECS、Amazon 和其他一些 AWS 服務的權限。

有關IAM角色的詳細資訊,請參閱《使用指南》中的AWS Identity and Access Management 〈IAM角色

注意

為了節省時間,您可以建立一個稱為角色的單一CodeCatalystWorkflowDevelopmentRole-spaceName角色,而不是先前列出的兩個角色。如需詳細資訊,請參閱 為您的帳戶和空間建立CodeCatalystWorkflowDevelopmentRole-spaceName角色。瞭解CodeCatalystWorkflowDevelopmentRole-spaceName角色具有非常廣泛的權限,可能會造成安全風險。我們建議您只在不太擔心安全性的教學課程和案例中使用此角色。本教學課程假設您正在建立先前列出的兩個角色。

若要建立組建和部署角色,您可以使用 AWS Management Console 或 AWS CLI.

AWS Management Console

若要建立建置和部署角色,請完成下列一系列程序。

若要建立建置角色
  1. 建立角色的策略,執行方式如下:

    1. 登入 AWS。

    2. 開啟位於 IAM 的 https://console.aws.amazon.com/iam/ 主控台。

    3. 在導覽窗格中,選擇政策

    4. 選擇 Create policy (建立政策)。

    5. 選擇 (JSON) 索引標籤。

    6. 刪除現有的程式碼。

    7. 貼上以下程式碼:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
      注意

      第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。

      "Resource": "*"
    8. 選擇下一步:標籤

    9. 選擇下一步:檢閱

    10. 名稱中,輸入:

      codecatalyst-ecs-build-policy
    11. 選擇建立政策

      您現在已建立權限原則。

  2. 建立組建角色,如下所示:

    1. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)

    2. 選擇 [自訂信任原則]。

    3. 刪除現有的自訂信任原則。

    4. 新增下列自訂信任原則:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. 選擇下一步

    6. 在 [權限] 原則中,搜尋codecatalyst-ecs-build-policy,選取其核取方塊。

    7. 選擇下一步

    8. 在「角色名稱」中,輸入:

      codecatalyst-ecs-build-role
    9. 對於「角色」描述,請輸入:

      CodeCatalyst ECS build role
    10. 選擇建立角色

    您現在已建立具有權限原則和信任原則的組建角色。

  3. 取得建置角色ARN,如下所示:

    1. 在導覽窗格中,選擇角色

    2. 在搜尋方塊中,輸入剛建立的角色名稱 (codecatalyst-ecs-build-role)。

    3. 從清單中選擇角色。

      此時會顯示角色的 [摘要] 頁面。

    4. 在頂部複製ARN值。供稍後使用。

若要建立部署角色
  1. 建立角色的策略,執行方式如下:

    1. 登入 AWS。

    2. 開啟位於 IAM 的 https://console.aws.amazon.com/iam/ 主控台。

    3. 在導覽窗格中,選擇政策

    4. 選擇建立政策

    5. 選擇 (JSON) 索引標籤。

    6. 刪除現有的程式碼。

    7. 貼上以下程式碼:

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      注意

      第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元。然後,您可以在策略可用之後使用資源名稱來縮小策略的範圍。

      "Resource": "*"
    8. 選擇下一步:標籤

    9. 選擇下一步:檢閱

    10. 名稱中,輸入:

      codecatalyst-ecs-deploy-policy
    11. 選擇建立政策

      您現在已建立權限原則。

  2. 建立部署角色,如下所示:

    1. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)

    2. 選擇 [自訂信任原則]。

    3. 刪除現有的自訂信任原則。

    4. 新增下列自訂信任原則:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. 選擇下一步

    6. 在 [權限] 原則中,搜尋codecatalyst-ecs-deploy-policy,選取其核取方塊。

    7. 選擇下一步

    8. 在「角色名稱」中,輸入:

      codecatalyst-ecs-deploy-role
    9. 對於「角色」描述,請輸入:

      CodeCatalyst ECS deploy role
    10. 選擇建立角色

    您現在已建立具有信任原則的部署角色。

  3. 取得部署角色ARN,如下所示:

    1. 在導覽窗格中,選擇角色

    2. 在搜尋方塊中,輸入剛建立的角色名稱 (codecatalyst-ecs-deploy-role)。

    3. 從清單中選擇角色。

      此時會顯示角色的 [摘要] 頁面。

    4. 在頂部複製ARN值。供稍後使用。

AWS CLI

若要建立建置和部署角色,請完成下列一系列程序。

若要為這兩個角色建立信任原則

如同 CodeCatalystECSUser AWS CloudShell,在中建立信任原則檔案:

  1. 建立檔案:

    cat > codecatalyst-ecs-trust-policy.json
  2. 在終端提示符下,粘貼以下代碼:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  3. 將游標置於最後一個大括號 (}) 之後。

  4. 按,Enter然後Ctrl+d保存文件並退出貓。

若要建立建置原則和建置角色
  1. 建立建置原則:

    1. 如同 CodeCatalystECSUser AWS CloudShell,在中建立組建原則檔案:

      cat > codecatalyst-ecs-build-policy.json
    2. 在提示符下,輸入以下代碼:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    3. 將游標置於最後一個大括號 (}) 之後。

    4. 按,Enter然後Ctrl+d保存文件並退出貓。

  2. 將構建策略添加到 AWS:

    aws iam create-policy \ --policy-name codecatalyst-ecs-build-policy \ --policy-document file://codecatalyst-ecs-build-policy.json
  3. 在命令輸出中,記下"arn":值,例如,arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy。你ARN稍後需要這個。

  4. 建立建置角色並將信任原則附加至該角色:

    aws iam create-role \ --role-name codecatalyst-ecs-build-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. 將組建原則附加至組建角色:

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy

    位置 arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy 會取代為您先前提到ARN的組建原則。

  6. 顯示建置角色的詳細資料:

    aws iam get-role \ --role-name codecatalyst-ecs-build-role
  7. 請記下角色的"Arn":值,例如,arn:aws:iam::111122223333:role/codecatalyst-ecs-build-role。你ARN稍後需要這個。

若要建立部署原則和部署角色
  1. 建立部署原則:

    1. 在 AWS CloudShell中建立部署原則檔案:

      cat > codecatalyst-ecs-deploy-policy.json
    2. 在提示符下,輸入以下代碼:

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      注意

      第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。

      "Resource": "*"
    3. 將游標置於最後一個大括號 (}) 之後。

    4. 按,Enter然後Ctrl+d保存文件並退出貓。

  2. 將部署原則新增至 AWS:

    aws iam create-policy \ --policy-name codecatalyst-ecs-deploy-policy \ --policy-document file://codecatalyst-ecs-deploy-policy.json
  3. 在命令輸出中,記下部署原則的"arn":值,例如arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy。你ARN稍後需要這個。

  4. 建立部署角色並將信任原則附加至該角色:

    aws iam create-role \ --role-name codecatalyst-ecs-deploy-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. 將部署原則附加至部署角色,其中 arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy 會取代為您先前所述ARN的部署原則。

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy
  6. 顯示部署角色的詳細資料:

    aws iam get-role \ --role-name codecatalyst-ecs-deploy-role
  7. 請記下角色的"Arn":值,例如,arn:aws:iam::111122223333:role/codecatalyst-ecs-deploy-role。你ARN稍後需要這個。

步驟 5:將 AWS 角色新增至 CodeCatalyst

在此步驟中,您將組建角色 (codecatalyst-ecs-build-role) 和部署 role (codecatalyst-ecs-deploy-role) 新增至空間中的 CodeCatalyst 帳戶連線。

若要將建置和部署角色新增至您的帳戶連線
  1. 在中 CodeCatalyst,導覽至您的空間。

  2. 選擇AWS 帳戶。此時會顯示帳戶連線清單。

  3. 選擇代表您建立組建和部署角色之 AWS 帳戶的帳戶連線。

  4. 管理主控台選擇 [ AWS 管理角色]

    將顯示 [新增IAM角色至 Amazon CodeCatalyst 空間] 頁面。您可能需要登入才能存取此頁面。

  5. 選取 [新增您在中建立的現有角色] IAM。

    這時系統顯示下拉列表。此清單會顯示具有信任原則的所有IAM角色,其中包括codecatalyst-runner.amazonaws.com.rproxy.goskope.comcodecatalyst.amazonaws.com服務主體。

  6. 在下拉式清單中,選擇codecatalyst-ecs-build-role,然後選擇 [新增角色]。

    注意

    如果您看到The security token included in the request is invalid,可能是因為您沒有正確的權限。若要修正此問題,請使 AWS 用您建立 CodeCatalyst空間時使用的 AWS 帳戶登出以重新登入。

  7. 選擇 [新增IAM角色],選擇 [新增您在其中建立的現有角色]IAM,然後在下拉式清單中選擇codecatalyst-ecs-deploy-role。選擇 Add role (新增角色)

    您現在已將組建和部署角色新增至您的空間。

  8. 複製 Amazon CodeCatalyst 顯示名稱的值。在建立工作流程時,您將需要此值。

步驟 6:建立來源儲存庫

在此步驟中,您可以在中建立來源儲存庫 CodeCatalyst。此儲存庫儲存自學課程的來源檔案,例如工作定義檔案。

如需來源儲存庫的詳細資訊,請參閱建立來源儲存庫

若要建立來源儲存庫
  1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

  2. 導航到您的項目,codecatalyst-ecs-project

  3. 在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。

  4. 選擇新增儲存區域,然後選擇建立儲存庫

  5. 存放庫名稱中,輸入:

    codecatalyst-ecs-source-repository
  6. 選擇建立

步驟 7:添加源文件

在本節中,您將 Hello World 源文件添加到您的 CodeCatalyst 存儲庫中,codecatalyst-ecs-source-repository. 它們包括:

  • index.html檔案 — 在瀏覽器中顯示 Hello World 訊息。

  • Docker 檔案 — 描述要用於 Docker 影像的基本影像,以及要套用到它的 Docker 指令。

  • taskdef.json檔案 — 定義將工作啟動到叢集時要使用的 Docker 映像檔。

資料夾結構如下:

. |— public-html | |— index.html |— Dockerfile |— taskdef.json
注意

下面的說明告訴你如何使用 CodeCatalyst 控制台添加文件,但如果你願意,你可以使用 Git。如需詳細資訊,請參閱 複製來源儲存庫

index.html

index.html文件在瀏覽器中顯示 Hello World 消息。

若要新增 index.html 檔案的步驟
  1. 在 CodeCatalyst 主控台中,移至您的來源儲存庫、codecatalyst-ecs-source-repository.

  2. 在 [檔] 中選擇 [建立檔案]。

  3. 在「檔案名稱」中,輸入:

    public-html/index.html
    重要

    確保包括public-html/前綴以創建相同名稱的文件夾。預期index.html會位於此資料夾中。

  4. 在文字方塊中,輸入下列程式碼:

    <html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello World</h1> </body> </html>
  5. 選擇「確認」,然後再次選擇「確認」。

    index.html新增至資public-html料夾中的儲存庫。

Dockerfile

Docker 文件描述了要使用的基本碼頭圖像以及要應用於它的碼頭命令。如需 Docker 檔案的詳細資訊,請參閱 Doc ker 檔案參考。

此處指定的碼頭文件表示使用 Apache 2.4 基本圖像()httpd。它還包括將名為的源文件複製index.html到服務網頁的 Apache 服務器上的文件夾的說明。碼頭文件中的EXPOSE指令告訴碼頭集裝箱正在接聽端口 80。

添加碼頭文件
  1. 在來源儲存庫中,選擇 [建立檔案]。

  2. 在「檔案名稱」中,輸入:

    Dockerfile

    請勿包含副檔名。

    重要

    Docker 文件必須駐留在存儲庫的根文件夾中。工作流程的Docker build命令期望它在那裡。

  3. 在文字方塊中,輸入下列程式碼:

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
  4. 選擇「確認」,然後再次選擇「確認」。

    碼頭文件被添加到您的存儲庫中。

任務定義

您在此步驟中新增的taskdef.json檔案步驟 2:將預留位置應用程式部署到 Amazon ECS與您在中指定的檔案相同,但差異如下:

這裡的任務定義不是在image:字段(httpd:2.4)中指定硬編碼的 Docker 映像名稱,而是使用幾個變量來表示圖像:和。$REPOSITORY_URI $IMAGE_TAG當您在稍後的步驟中執行工作流程時,這些變數會取代為工作流程建置動作所產生的實際值。

如需任務定義參數的詳細資訊,請參閱 Amazon 彈性容器服務開發人員指南中的任務定義參數。

若要新增工作定義 .json 檔案
  1. 在來源儲存庫中,選擇 [建立檔案]。

  2. 在「檔案名稱」中,輸入:

    taskdef.json
  3. 在文字方塊中,輸入下列程式碼:

    { "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }

    在前面的代碼中,替換

    arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role

    與您在中所記錄ARN的任務執行角色若要建立作業執行角色

  4. 選擇「確認」,然後再次選擇「確認」。

    taskdef.json檔案即會新增至您的儲存庫。

步驟 8:建立並執行工作流程

在此步驟中,您會建立一個工作流程,將來源檔案建置到 Docker 映像中,然後將映像部署到 Amazon ECS 叢集。此部署取代現有的 Apache 預留位置應用程式。

工作流程由下列依序執行的建置區塊組成:

  • 觸發器 — 當您將變更推送至來源儲存庫時,此觸發器會自動啟動工作流程執行。關於觸發條件的詳細資訊,請參閱 使用觸發器啟動工作流程自動執行

  • 構建操作(BuildBackend)-在觸發器上,該操作使用 Docker 文件構建 Docker 映像並將圖像推送到 Amazon。ECR建置動作也會taskdef.json使用正確的image欄位值更新,然後建立此檔案的輸出成品。此成品會做為下一個部署動作的輸入。

    如需建置動作的詳細資訊,請參閱以工作流程建置

  • 部署動作 (DeployToECS) — 建置動作完成後,部署動作會尋找建置動作 (TaskDefArtifact) 所產生的輸出成品,尋找taskdef.json內部成品,然後將其註冊至 Amazon ECS 服務。然後,服務會依照taskdef.json檔案中的指示,在您的 Amazon 叢集中執行三個 Amazon ECS 任務 (以及相關聯的 Hello World Docker 容器)。ECS

若要建立工作流程
  1. 在 CodeCatalyst 主控台的功能窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  2. 選擇建立工作流程

  3. 針對來源儲存庫,選擇codecatalyst-ecs-source-repository

  4. 對於「分支」,請選擇main

  5. 選擇建立

  6. 刪除範YAML例程式碼。

  7. 添加以下YAML代碼:

    注意

    在下面的YAML代碼中,如果需要,可以省略Connections:部分。如果您省略這些區段,則必須確定您環境中「預設IAM角色」欄位中指定的角色包含中所述兩個角色的權限和信任原則步驟 5:將 AWS 角色新增至 CodeCatalyst。如需使用預設IAM角色設定環境的詳細資訊,請參閱建立環境

    Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo - Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com #build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-deploy-role Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region: us-west-2 cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.json

    在前面的代碼中,替換:

    • 的兩個執行個體 codecatalyst-ecs-environment 使用您在中建立的環境名稱必要條件

    • 的兩個執行個體 codecatalyst-account-connection 與您的帳戶連接的顯示名稱。顯示名稱可能是數字。如需詳細資訊,請參閱 步驟 5:將 AWS 角色新增至 CodeCatalyst

    • codecatalyst-ecs-build-role 使用您在中建立之建置角色的名稱步驟 4:建立 AWS 角色

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo (在Value:屬性中)使用您在中創建URI的 Amazon ECR 存儲庫步驟 3:創建一個 Amazon ECR 映像存儲庫

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com (在Run: aws ecr命令中)使用不帶圖像後綴URI的 Amazon ECR 存儲庫(/codecatalyst-ecs-image-repo)。

    • codecatalyst-ecs-deploy-role 使用您在中建立的部署角色名稱步驟 4:建立 AWS 角色

    • 的兩個執行個體 us-west-2 使用您的 AWS 區域代碼。如需區域代碼的清單,請參閱 AWS 一般參考.

    注意

    如果您決定不建立建置和部署角色,請取代 codecatalyst-ecs-build-role 以及 codecatalyst-ecs-deploy-roleCodeCatalystWorkflowDevelopmentRole-spaceName角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 4:建立 AWS 角色

    提示

    您可以針對此目find的使用 Render Amazon ECS 任務定義動作,而不是使用先前工作流程程式碼中顯示的和sed命令來更新儲存庫和映像名稱。如需詳細資訊,請參閱 修改 Amazon ECS 任務定義

  8. (選擇性) 選擇「驗證」,確定YAML程式碼在認可之前是有效的。

  9. 選擇 Commit (遞交)。

  10. 在「提交工作流程」對話方塊中,輸入以下內容:

    1. 對於提交訊息,請移除文字並輸入:

      Add first workflow
    2. 針對「儲存庫」,選擇codecatalyst-ecs-source-repository

    3. 選擇「主要」做為「分支名稱」。

    4. 選擇 Commit (遞交)。

    您現在已建立工作流程。工作流程執行會自動啟動,因為工作流程頂端定義了觸發器。具體而言,當您認可 (並推送) workflow.yaml 檔案至來源儲存庫時,觸發程序會啟動工作流程執行。

若要檢視工作流程執行進度
  1. 在 CodeCatalyst 主控台的瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  2. 選擇您剛建立的工作流程codecatalyst-ecs-workflow

  3. 選擇BuildBackend查看構建進度。

  4. 選擇DeployToECS以查看部署進度。

    如需檢視執行詳細資訊的詳細資訊,請參閱檢視工作流程執行狀態與詳細

驗證部署的步驟
  1. 在打開 Amazon ECS 經典控制台https://console.aws.amazon.com/ecs/

  2. 選擇您的叢集、codecatalyst-ecs-cluster.

  3. 選擇 Tasks (任務) 索引標籤。

  4. 選擇三個任務中的任何一個。

  5. 在 [公用 IP] 欄位中,選擇 [開啟位址]。

    瀏覽器中會出現「Hello World」頁面,表示 Amazon ECS 服務已成功部署您的應用程式。

步驟 9:對源文件進行更改

在本節中,您會變更來源儲存庫中的index.html檔案。這項變更會導致工作流程建立新的 Docker 映像、使用提交 ID 加上標記、將其推送到 AmazonECR,然後將其部署到 Amazon ECS。

若要變更 index.html 的步驟
  1. 在 CodeCatalyst 主控台的導覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫],然後選擇您的存放庫codecatalyst-ecs-source-repository

  2. 選擇 public-html (下一步),然後選擇 index.html (完成)。

    index.html會顯示的內容。

  3. 選擇編輯

  4. 在第 14 行中,將Hello World文字變更為Tutorial complete!

  5. 選擇「確認」,然後再次選擇「確認」。

    認可會啟動新的工作流程執行。

  6. (選擇性) 移至來源儲存庫的主頁面,選擇 [檢視認可],然後記下index.html變更的提交 ID。

  7. 觀看部署進度:

    1. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

    2. 選擇codecatalyst-ecs-workflow檢視最新執行。

    3. 選擇BuildBackendDeployToECS以查看工作流程執行進度。

  8. 確認您的應用程式已更新,如下所示:

    1. 在打開 Amazon ECS 經典控制台https://console.aws.amazon.com/ecs/

    2. 選擇您的叢集、codecatalyst-ecs-cluster.

    3. 選擇 Tasks (任務) 索引標籤。

    4. 選擇三個任務中的任何一個。

    5. 在 [公用 IP] 欄位中,選擇 [開啟位址]。

      隨即顯示Tutorial complete!頁面。

  9. (選擇性) 在中 AWS,切換至 Amazon ECR 主控台,並確認新的 Docker 映像已使用步驟 6 中的提交 ID 標記。

清除

清理本教程中使用的文件和服務,以避免被收取費用。

在中 AWS Management Console,按照以下順序進行清理:

  1. 在 AmazonECS,請執行以下操作:

    1. 刪除codecatalyst-ecs-service

    2. 刪除codecatalyst-ecs-cluster

    3. 取消註冊codecatalyst-ecs-task-definition

  2. 在 AmazonECR,刪除codecatalyst-ecs-image-repo

  3. 在 AmazonEC2,刪除codecatalyst-ecs-security-group

  4. 在IAM身分識別中心中,刪除:

    1. CodeCatalystECSUser

    2. CodeCatalystECSPermissionSet

在主 CodeCatalyst 控台中,清理如下:

  1. 刪除codecatalyst-ecs-workflow

  2. 刪除codecatalyst-ecs-environment

  3. 刪除codecatalyst-ecs-source-repository

  4. 刪除codecatalyst-ecs-project

在本教學中,您學會了如何使用工作 CodeCatalyst 流程和部署到 Amazon ECS 動作將應用程式部署到 Amazon ECS 服務。