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

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

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

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

提示

您可以使用為您完成完整 Amazon ECS 設定的藍圖,而不是逐步完成本教學課程。您將需要使用任一 Node.js API 與 AWS FargateJava API 與 AWS Fargate藍圖。如需詳細資訊,請參閱 使用藍圖建立專案

必要條件

開始之前:

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

  • 在您的空間中,您需要一個空的,從頭開始的 CodeCatalyst項目,名為:

    codecatalyst-ecs-project

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

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

    codecatalyst-ecs-environment

    設定此環境的方式如下:

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

    • 將您的 AWS 帳戶 Connect 到它。

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

    如需詳細資訊,請參閱 使 CodeCatalyst用環境部署到 VPC AWS 帳戶 和 VPC

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

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

注意

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

如需 IAM 身分中心使用者的詳細資訊 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. 複查資訊,然後選擇「提交」。

    您現在已經分配CodeCatalystECSUser和您CodeCatalystECSPermissionSet的 AWS 帳戶,將它們綁定在一起。

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

    注意

    如果您沒有此信息,請轉到 IAM 身份中心的CodeCatalystECSUser詳細信息頁面,選擇「重置密碼」,「生成一次性密碼 [...] ,然後再次重設密碼以在螢幕上顯示資訊。

  2. 登出 AWS。

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

  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" }

    在前面的代碼中,替換成組:AWN:IAM:: 11112222333:角色/角色 codecatalyst-ecs-task-execution

    使用您在中若要建立作業執行角色記錄的任務執行角色的 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 預留位置應用程式的任務 (以及相關聯的碼頭容器),以及之後的 Hello World 應用程式。

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

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

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

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

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

    2. 針對 Launch type (啟動類型),選擇 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 映像啟動碼頭容器的任務。

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

步驟 3:建立 Amazon ECR 映像儲存庫

在本節中,您將在 Amazon Elastic Container Registry (Amazon ECR) 中創建一個私有映像存儲庫。此儲存庫會儲存教學課程的 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 帳戶、Amazon ECS 和其他 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. 前往 https://console.aws.amazon.com/iam/ 開啟 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. 前往 https://console.aws.amazon.com/iam/ 開啟 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: aw: IAM:: 111122333: 政策/已被您先前提到的建置政策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: aw: iam:: 11112222333: 政策/會取代為您先前提到的部署政策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.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: AW: IAM:: 帳戶 ID: 角色/角色 codecatalyst-ecs-task-execution

    使用您在中若要建立作業執行角色記錄的任務執行角色的 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 ECS 叢集內執行三個 Amazon ECS 任務 (以及相關聯的 Hello World 泊塢視窗容器)。

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

  2. 選擇建立工作流程

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

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

  5. 選擇建立

  6. 刪除 YAML 範例程式碼。

  7. 新增下列 YAML 程式碼:

    注意

    在下面的 YAML 代碼中,如果需要,可以省略Connections:部分。如果您省略這些區段,則必須確保您環境的 D efault 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 角色

    • (在屬性中)與您在其中創建的 Amazon ECR 存儲庫的 URI 一起使用。codecatalyst-ecs-image-repo Value: 步驟 3:建立 Amazon ECR 映像儲存庫

    • 上 Amazon ECR 儲存庫的 URI,不含影像尾碼 () 西部-亞馬遜 ECR 儲存庫的 URI ()。Run: aws ecr /codecatalyst-ecs-image-repo

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

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

    注意

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

    提示

    您可以使用 Render Amazon ECS 任務定義動作,而不是使用先前工作流程程式碼中顯示的和sed命令來更新儲存庫和映像名稱。find如需詳細資訊,請參閱 使用工作流程修改 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 標記它、將其推送到 Amazon ECR,然後將其部署到 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. 在 Amazon ECS 中,執行以下操作:

    1. 刪除codecatalyst-ecs-service

    2. 刪除codecatalyst-ecs-cluster

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

  2. 在 Amazon ECR 中,刪除codecatalyst-ecs-image-repo

  3. 在 Amazon EC2 中,刪除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 服務。