教學課程:使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道 - AWS CodePipeline

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

教學課程:使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道

在本教學課程中,您會在 中設定管道 AWS CodePipeline ,使用支援 Docker 映像的藍/綠部署來部署容器應用程式。在藍/綠部署中,您可以同時啟動新舊版本的應用程式,並在重新路由流量之前測試新版本。您也可以監控部署程序,並在發生問題時快速復原。

重要

在建立管道的過程中,CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。(這與用於 S3 來源動作的儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中,請確定 S3 成品儲存貯體屬於 AWS 帳戶 安全且可靠的 。

注意

本教學課程適用於 Amazon ECS 到 CodePipeline 的 CodeDeploy 藍/綠部署動作。 CodePipeline 如需在 CodePipeline 中使用 Amazon ECS 標準部署動作的教學課程,請參閱 教學課程:使用 CodePipeline 進行 Amazon ECS 標準部署

已完成的管道會偵測儲存在 Amazon ECR 等映像儲存庫中的映像變更,並使用 CodeDeploy 將流量路由和部署到 Amazon ECS 叢集和負載平衡器。CodeDeploy 使用接聽程式將流量重新路由到 AppSpec 檔案中指定之已更新容器的連接埠。如需如何在藍/綠部署中使用負載平衡器、生產接聽程式、目標群組和 Amazon ECS 應用程式的詳細資訊,請參閱教學課程:部署 Amazon ECS Service

管道也會設定為使用來源位置,例如 CodeCommit,其中存放您的 Amazon ECS 任務定義。在本教學課程中,您會設定每個 AWS 資源,然後使用包含每個資源動作的階段來建立管道。

每當原始碼變更或將新的基礎映像上傳至 Amazon ECR 時,您的持續交付管道會自動建置和部署容器映像。

此流程使用以下成品:

  • 指定 Amazon ECR 映像儲存庫容器名稱和儲存庫 URI 的 Docker 映像檔案。

  • 列出 Docker 映像名稱、容器名稱、Amazon ECS 服務名稱和負載平衡器組態的 Amazon ECS 任務定義。

  • CodeDeploy AppSpec 檔案,可指定 Amazon ECS 任務定義檔案的名稱、更新應用程式容器的名稱,以及 CodeDeploy 重新路由生產流量的容器連接埠。它也可以指定選用的網路組態和 Lambda 函數,您可以在部署生命週期事件勾點中執行它們。

注意

當您將變更遞交至 Amazon ECR 映像儲存庫時,管道來源動作會建立該遞交imageDetail.json的檔案。如需 imageDetail.json 詳細資訊,請參閱 imageDetailAmazon ECS 藍/綠部署動作的 .json 檔案

當您建立或編輯管道,以及更新或指定部署階段的來源成品時,請確保指向的來源成品具有您想要使用的最新名稱和版本。在您設定管道之後,若您變更映像或任務定義檔案,則您可能需要在儲存庫中更新來源成品,然後在管道中編輯部署階段。

必要條件

您必須已建立以下資源:

  • CodeCommit 儲存庫。您可以使用您在 中建立的 AWS CodeCommit 儲存庫教學課程:建立簡單的管道 (CodeCommit 儲存庫)

  • 啟動 Amazon EC2 Linux 執行個體並安裝 Docker 以建立映像,如本教學課程所示。如果您已擁有想要使用的映像,則可略過此先先決條件。

步驟 1:建立映像並推送至 Amazon ECR 儲存庫

在本節中,您可以使用 Docker 建立映像,然後使用 AWS CLI 建立 Amazon ECR 儲存庫,並將映像推送至儲存庫。

注意

如果您已擁有想要使用的映像,則可略過此先步驟。

建立映像
  1. 登入您已在其中安裝 Docker 安裝的 Linux 執行個體。

    拉下 nginx 的映像。此命令提供nginx:latest映像:

    docker pull nginx
  2. 執行 docker images。您應該會在清單中看到映像。

    docker images
建立 Amazon ECR 儲存庫並推送映像
  1. 建立 Amazon ECR 儲存庫,以便存放 映像。記下輸出中的 repositoryUri

    aws ecr create-repository --repository-name nginx

    輸出:

    { "repository": { "registryId": "aws_account_id", "repositoryName": "nginx", "repositoryArn": "arn:aws:ecr:us-east-1:aws_account_id:repository/nginx", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/nginx" } }
  2. 為映像標記上一步中的 repositoryUri 值。

    docker tag nginx:latest aws_account_id.dkr.ecr.us-east-1.amazonaws.com/nginx:latest
  3. 執行 aws ecr get-login-password命令,如 us-west-2區域和 111122223333 帳戶 ID 的範例所示。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com/nginx
  4. 使用先前步驟repositoryUri中的 ,將映像推送至 Amazon ECR。

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/nginx:latest

步驟 2:建立任務定義和 AppSpec 來源檔案,並推送至 CodeCommit 儲存庫

在本節中,您會建立任務定義 JSON 檔案,並將其註冊至 Amazon ECS。然後,您可以為 CodeDeploy 建立 AppSpec 檔案,並使用 Git 用戶端將檔案推送至 CodeCommit 儲存庫。

針對您的映像建立任務定義
  1. 使用下列內容建立名為 taskdef.json 的檔案。對於 image,輸入您的映像名稱,例如 nginx。當您的管道執行時,此值即會更新。

    注意

    請確定任務定義中指定的執行角色包含 AmazonECSTaskExecutionRolePolicy。如需詳細資訊,請參閱《Amazon ECS 開發人員指南》中的 Amazon ECS 任務執行 IAM 角色

    { "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "nginx", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "ecs-demo" }
  2. 註冊具有 taskdef.json 檔案的任務定義。

    aws ecs register-task-definition --cli-input-json file://taskdef.json
  3. 在註冊任務定義之後,請編輯您的檔案以移除映像名稱,並在映像欄位中包含 <IMAGE1_NAME> 預留位置文字。

    { "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "<IMAGE1_NAME>", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "ecs-demo" }
建立 AppSpec 檔案
  • AppSpec 檔案用於 CodeDeploy 部署。此檔案會使用下列格式,其中包含選用欄位:

    version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "task-definition-ARN" LoadBalancerInfo: ContainerName: "container-name" ContainerPort: container-port-number # Optional properties PlatformVersion: "LATEST" NetworkConfiguration: AwsvpcConfiguration: Subnets: ["subnet-name-1", "subnet-name-2"] SecurityGroups: ["security-group"] AssignPublicIp: "ENABLED" Hooks: - BeforeInstall: "BeforeInstallHookFunctionName" - AfterInstall: "AfterInstallHookFunctionName" - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName" - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName" - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"

    如需 AppSpec 檔案的詳細資訊,包括範例,請參閱 CodeDeploy AppSpec 檔案參考

    使用下列內容建立名為 appspec.yaml 的檔案。對於 TaskDefinition,不要變更 <TASK_DEFINITION> 預留位置文字。當您的管道執行時,此值即會更新。

    version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: <TASK_DEFINITION> LoadBalancerInfo: ContainerName: "sample-website" ContainerPort: 80
將檔案推送至 CodeCommit 儲存庫
  1. 將檔案推送或上傳至 CodeCommit 儲存庫。這些檔案是由建立管道精靈為 CodePipeline 中的部署動作建立的來源成品。在本機目錄中,您的檔案應該如下所示:

    /tmp |my-demo-repo |-- appspec.yaml |-- taskdef.json
  2. 選擇您要用來上傳檔案的方法:

    1. 若要在您的本機電腦上從複製的儲存庫中使用 Git 命令列:

      1. 將目錄變更為您的本機儲存庫:

        (For Linux, macOS, or Unix) cd /tmp/my-demo-repo (For Windows) cd c:\temp\my-demo-repo
      2. 請執行下列命令來同時將所有檔案放入階段:

        git add -A
      3. 請執行下列命令來確認檔案並附加確認訊息:

        git commit -m "Added task definition files"
      4. 執行下列命令,將檔案從本機儲存庫推送至 CodeCommit 儲存庫:

        git push
    2. 若要使用 CodeCommit 主控台上傳檔案:

      1. 開啟 CodeCommit 主控台,然後從儲存庫清單中選擇您的儲存庫

      2. 選擇 Add file (新增檔案),然後選擇 Upload file (上傳檔案)

      3. 選擇 Choose file (選擇檔案),然後瀏覽您的檔案。輸入您的使用者名稱和電子郵件地址來確定變更。選擇 Commit changes (遞交變更)

      4. 對於您要上傳的每個檔案重複此步驟。

步驟 3:建立 Application Load Balancer 和目標群組

在本節中,您會建立 Amazon EC2 Application Load Balancer。您稍後在建立 Amazon ECS 服務時,會使用您透過負載平衡器建立的子網路名稱和目標群組值。您可以建立應用程式負載平衡器或網路負載平衡器。負載平衡器必須使用 VPC 搭配不同可用區域中的兩個子網路。在這些步驟中,您確認預設 VPC、建立一個負載平衡器,然後為您的負載平衡器建立兩個目標群組。如需詳細資訊,請參閱「網路負載平衡器的目標群組」。

驗證您的預設 VPC 和公有子網路
  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/vpc/:// 開啟 Amazon VPC 主控台。

  2. 驗證要使用的預設 VPC。在導覽窗格中,選擇 Your VPCs (您的 VPC)。請注意,哪個 VPC 在 Default VPC (預設 VPC) 欄中顯示 Yes (是)。這是預設 VPC。它包含供您選取的預設子網路。

  3. 選擇 Subnets (子網路)。選擇兩個在 Default subnet (預設子網路) 欄中顯示 Yes (是) 的子網路。

    注意

    記下您的子網路 ID。本教學的稍後部分將需要這些資訊。

  4. 選擇子網路,然後選擇 Description (描述) 標籤。驗證您想要使用的子網路是否位於不同的可用區域中。

  5. 選擇子網路,然後選擇 Route Table (路由表) 標籤。若要驗證您想要使用的每個子網路是否為公有子網路,請確認閘道資料列包含在路由表中。

建立 Amazon EC2 Application Load Balancer
  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/ec2/:// 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Load Balancers (負載平衡器)

  3. 選擇 Create Load Balancer (建立負載平衡器)

  4. 選擇 Application Load Balancer (應用程式負載平衡器),然後選擇 Create (建立)

  5. Name (名稱) 中,輸入負載平衡器的名稱。

  6. Scheme (結構描述) 中,選擇 internet-facing (面向網際網路)

  7. IP address type (IP 地址) 中,選擇 ipv4

  8. 為您的負載平衡器設定兩個接聽程式連接埠:

    1. Load Balancer Protocol (負載平衡器通訊協定) 下,選擇 HTTP。在 Load Balancer Port (負載平衡器連接埠) 下,輸入 80

    2. 選擇 Add listener (新增接聽程式)

    3. 在第二個接聽程式的 Load Balancer Protocol (負載平衡器通訊協定) 下,選擇 HTTP。在 Load Balancer Port (負載平衡器連接埠) 下,輸入 8080

  9. Availability Zones (可用區域) 下,於 VPC 中,選擇預設 VPC。接著,選擇您想要使用的兩個預設子網路。

  10. 選擇 Next: Configure Security Settings (下一步:設定安全設定)

  11. 選擇 Next: Configure Security Groups (下一步:設定安全群組)

  12. 選擇 Select an existing security group (選取現有的安全群組),並記下安全群組 ID。

  13. 選擇 Next: Configure Routing (下一步:設定路由)

  14. Target group (目標群組) 中,選擇 New target group (新增目標群組),然後設定您的第一個目標群組:

    1. Name (名稱) 中,輸入目標群組名稱 (例如,target-group-1)。

    2. Target type (目標類型) 中,選擇 IP

    3. Protocol (通訊協定) 中,選擇 HTTP。在 Port (連接埠) 中,輸入 80

    4. 選擇 Next: Register Targets (下一步:註冊目標)

  15. 選擇 Next: Review (下一步:檢視),然後選擇 Create (建立)

為您的負載平衡器建立第二個目標群組
  1. 佈建負載平衡器之後,請開啟 Amazon EC2 主控台。在導覽窗格中,選擇 Target Groups (目標群組)

  2. 選擇 Create target group (建立目標群組)

  3. Name (名稱) 中,輸入目標群組名稱 (例如,target-group-2)。

  4. Target type (目標類型) 中,選擇 IP

  5. Protocol (通訊協定) 中,選擇 HTTP。在 Port (連接埠) 中,輸入 8080

  6. VPC 中,選擇預設 VPC。

  7. 選擇 Create (建立)。

    注意

    您必須具有兩個針對負載平衡器建立的目標群組,才能執行部署。您只需要記下第一個目標群組的 ARN。在下一個步驟中,此 ARN 會用於 create-service JSON 檔案中。

更新您的負載平衡器以包含您的第二個目標群組
  1. 開啟 Amazon EC2 主控台。在導覽窗格中,選擇 Load Balancers (負載平衡器)

  2. 選擇您的負載平衡器,然後選擇 Listeners (接聽程式) 標籤。選擇使用連接埠 8080 的接聽程式,然後選擇 Edit (編輯)

  3. 選擇 Forward to (轉寄至) 旁邊的鉛筆圖示。選擇您的第二個目標群組,然後選擇核取記號。選擇 Update (更新) 來儲存更新。

步驟 4:建立 Amazon ECS 叢集和服務

在本節中,您會建立 Amazon ECS 叢集和服務,其中 CodeDeploy 會在部署期間路由流量 (至 Amazon ECS 叢集,而不是 EC2 執行個體)。若要建立 Amazon ECS 服務,您必須使用使用使用負載平衡器建立的子網路名稱、安全群組和目標群組值來建立服務。

注意

當您使用這些步驟來建立 Amazon ECS 叢集時,您可以使用僅限網路叢集範本,其中佈建 AWS Fargate 容器。 AWS Fargate 是一種技術,可為您管理您的容器執行個體基礎設施。您不需要為 Amazon ECS 叢集選擇或手動建立 Amazon EC2 執行個體。

建立 Amazon ECS 叢集
  1. 開啟 Amazon ECS 傳統主控台,網址為 https://console.aws.amazon.com/ecs/

  2. 在導覽窗格中,選擇叢集

  3. 選擇建立叢集

  4. 選擇僅限聯網叢集範本,使用 AWS Fargate,然後選擇下一步

  5. Configure cluster (設定叢集) 頁面上輸入叢集名稱。您可以為您的資源新增選用的標籤。選擇 Create (建立)。

建立 Amazon ECS 服務

使用 AWS CLI 在 Amazon ECS 中建立您的服務。

  1. 建立 JSON 檔案,並將其命名為 create-service.json。將下列內容貼入 JSON 檔案中。

    對於 taskDefinition 欄位,當您在 Amazon ECS 中註冊任務定義時,您會為其提供一個系列。這類似用於多個任務定義版本的名稱,以修訂版號碼指定。在此範例中,請將「ecs-demo:1」用於您檔案中的系列和修訂版號碼。在 步驟 3:建立 Application Load Balancer 和目標群組 中使用您建立的子網路名稱、安全群組和目標群組值,以及您的負載平衡器。

    注意

    您需要在這個檔案包含您的目標群組 ARN。開啟 Amazon EC2 主控台,然後從導覽窗格的 LOAD BALANCING 下,選擇目標群組。選擇您的第一個目標群組。從 Description (描述) 標籤複製您的 ARN。

    { "taskDefinition": "family:revision-number", "cluster": "my-cluster", "loadBalancers": [ { "targetGroupArn": "target-group-arn", "containerName": "sample-website", "containerPort": 80 } ], "desiredCount": 1, "launchType": "FARGATE", "schedulingStrategy": "REPLICA", "deploymentController": { "type": "CODE_DEPLOY" }, "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-1", "subnet-2" ], "securityGroups": [ "security-group" ], "assignPublicIp": "ENABLED" } } }
  2. 執行 create-service 命令,指定 JSON 檔案:

    重要

    請確認在檔案名稱之前包含 file://。這是此命令必要項目。

    此範例會建立名為 my-service 的服務。

    注意

    此範例命令會建立名為 my-service 的服務。如果您已經有使用此名稱的服務,此命令會傳回錯誤。

    aws ecs create-service --service-name my-service --cli-input-json file://create-service.json

    輸出會傳回您服務的描述欄位。

  3. 執行 describe-services 命令,以驗證是否已建立您的服務。

    aws ecs describe-services --cluster cluster-name --services service-name

步驟 5:建立 CodeDeploy 應用程式和部署群組 (ECS 運算平台)

當您為 Amazon ECS 運算平台建立 CodeDeploy 應用程式和部署群組時,應用程式會在部署期間使用,以參考正確的部署群組、目標群組、接聽程式和流量重新路由行為。

建立 CodeDeploy 應用程式
  1. 開啟 CodeDeploy 主控台,然後選擇建立應用程式

  2. Application name (應用程式名稱) 中,輸入您想要使用的名稱。

  3. Compute Platform (運算平台) 中,選擇 Amazon ECS

  4. 選擇建立應用程式

建立 CodeDeploy 部署群組
  1. 在您應用程式頁面的 Deployment groups (部署群組) 標籤上,選擇 Create deployment group (建立部署群組)

  2. Deployment group name (部署群組名稱) 中,輸入描述部署群組的名稱。

  3. 服務角色中,選擇授予 CodeDeploy 存取 Amazon ECS 的服務角色。若要建立新的服務角色,請遵循下列步驟:

    1. 在 https://https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

    2. 從主控台儀表板,選擇 Roles (角色)

    3. 選擇建立角色

    4. 選取信任實體類型下,選取 AWS 服務。在 Choose a use case (選擇使用案例) 下,選取 CodeDeploy。在 Select your use case (選取您的使用案例) 下,選取 CodeDeploy - ECS。選擇下一步:許可AWSCodeDeployRoleForECS 受管政策已連接至角色。

    5. 選擇 Next: Tags (下一步:標籤),然後選擇 Next: Review (下一步:檢閱)

    6. 輸入角色的名稱 (例如 CodeDeployECSRole),然後選擇 Create role (建立角色)

  4. 環境組態中,選擇您的 Amazon ECS 叢集名稱和服務名稱。

  5. 負載平衡器中,選擇為 Amazon ECS 服務提供流量的負載平衡器名稱。

  6. Production listener port (生產接聽程式連接埠) 中,為接聽程式選擇連接埠和通訊協定,而此接聽程式會對 Amazon ECS 服務提供生產流量。從 Test listener port (測試接聽程式連接埠),為測試接聽程式選擇連接埠和通訊協定。

  7. Target group 1 name (目標群組 1 名稱)Target group 2 name (目標群組 2 名稱) 中,選擇在部署期間用來路由流量的目標群組。確定這些是您為負載平衡器建立的目標群組。

  8. 選擇立即重新路由流量,以判斷成功部署後將流量重新路由至更新後的 Amazon ECS 任務的時間長度。

  9. 選擇 Create deployment group (建立部署群組)

步驟 6:建立管道

在本節中,您可以採取下列動作建立管道:

  • CodeCommit 動作,其中來源成品是任務定義和 AppSpec 檔案。

  • 具有 Amazon ECR 來源動作的來源階段,其中來源成品是映像檔案。

  • 具有 Amazon ECS 部署動作的部署階段,其中部署使用 CodeDeploy 應用程式和部署群組執行。

使用精靈建立兩階段管道
  1. 登入 AWS Management Console ,並在 https://http://console.aws.amazon.com/codesuite/codepipeline/home 開啟 CodePipeline 主控台。

  2. Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)

  3. 步驟 1:選擇建立選項頁面的建立選項下,選擇建置自訂管道選項。選擇 Next (下一步)

  4. 步驟 2:選擇管道設定,在管道名稱中輸入 MyImagePipeline

  5. CodePipeline 提供 V1 和 V2 類型的管道,其特性和價格有所不同。V2 類型是您可以在 主控台中選擇的唯一類型。如需詳細資訊,請參閱管道類型。如需 CodePipeline 定價的資訊,請參閱定價

  6. 服務角色中,選擇新服務角色,以允許 CodePipeline 在 IAM 中建立服務角色。

  7. Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)

  8. 步驟 3:新增來源階段中,在來源提供者中選擇 AWS CodeCommit。在儲存庫名稱中,選擇您在 中建立的 CodeCommit 儲存庫名稱步驟 1:建立 CodeCommit 儲存庫。在 Branch name (分支名稱) 中,選擇包含最新程式碼更新的分支名稱。

    選擇 Next (下一步)

  9. 步驟 4:新增建置階段,選擇略過建置階段,然後再次選擇略過以接受警告訊息。選擇 Next (下一步)

  10. 步驟 5:新增測試階段,選擇略過測試階段,然後再次選擇略過以接受警告訊息。

    選擇 Next (下一步)

  11. 步驟 6:新增部署階段

    1. Deploy provider (部署提供者) 中,選擇 Amazon ECS (Blue/Green) (Amazon ECS (藍/綠))。在 Application name (應用程式名稱) 中,輸入應用程式名稱或從清單中選擇應用程式名稱,例如,codedeployapp。在 Deployment group (部署群組) 中,輸入部署群組名稱或從清單中選擇部署群組名稱,例如,codedeploydeplgroup

      注意

      名稱「Deploy」(部署),是預設指定給在 Step 4: Deploy (步驟 4:部署) 步驟中建立的階段名稱,如同「Source」(來源) 是管道的第一階段所指定的名稱。

    2. Amazon ECS task definition (Amazon ECS 任務定義) 下,選擇 SourceArtifact。在欄位中,輸入 taskdef.json

    3. AWS CodeDeploy AppSpec 檔案下,選擇 SourceArtifact。在欄位中,輸入 appspec.yaml

      注意

      此時,不要在 Dynamically update task definition image (動態更新任務定義映像) 下填寫任何資訊。

    4. 選擇 Next (下一步)

  12. 步驟 7:檢閱中,檢閱資訊,然後選擇建立管道

將 Amazon ECR 來源動作新增至管道

檢視您的管道,並將 Amazon ECR 來源動作新增至您的管道。

  1. 選擇您的管道。在左上角,選擇 Edit (編輯)

  2. 在來源階段中,選擇 Edit stage (編輯階段)

  3. 選擇 CodeCommit 來源動作旁的 + 新增動作,以新增平行動作。

  4. Action name (動作名稱) 中,輸入名稱 (例如,Image)。

  5. Action provider (動作提供者)中,選擇 Amazon ECR

    將 Amazon ECR 來源動作新增至您的管道。
  6. 儲存庫名稱中,選擇 Amazon ECR 儲存庫的名稱。

  7. Image tag (映像標籤) 中,指定映像名稱和版本,如果與最新不同的話。

  8. Output artifacts (輸出成品) 中,選擇輸出成品預設值 (例如 MyImage),其中包含您要下一個階段使用的映像名稱和儲存庫 URI 資訊。

  9. 在動作畫面上選擇 Save (儲存)。在階段畫面上選擇 Done (完成)。在管道上選擇 Save (儲存)。訊息顯示要為 Amazon ECR 來源動作建立的 Amazon CloudWatch Events 規則。

將您的來源成品連線至部署動作
  1. 在部署階段選擇編輯,然後選擇 圖示來編輯 Amazon ECS (藍/綠) 動作。

  2. 捲動到窗格底部。在 Input artifacts (輸入成品) 中,選擇 Add (新增)。從新的 Amazon ECR 儲存庫新增來源成品 (例如 MyImage)。

  3. Task Definition (任務定義) 中,選擇 SourceArtifact,然後確認已輸入 taskdef.json

  4. AWS CodeDeploy AppSpec 檔案中,選擇 SourceArtifact,然後appspec.yaml輸入驗證。

  5. Dynamically update task definition image (動態更新任務定義映像)Input Artifact with Image URI (輸入成品與映像 URI) 中,選擇 MyImage,然後輸入 taskdef.json 檔案中使用的預留位置文字: IMAGE1_NAME。選擇 Save (儲存)。

  6. 在 AWS CodePipeline 窗格中,選擇儲存管道變更,然後選擇儲存變更。檢視已更新的管道。

    建立此範例管道後,主控台項目的動作組態會顯示在管道結構中,如下所示:

    "configuration": { "AppSpecTemplateArtifact": "SourceArtifact", "AppSpecTemplatePath": "appspec.yaml", "TaskDefinitionTemplateArtifact": "SourceArtifact", "TaskDefinitionTemplatePath": "taskdef.json", "ApplicationName": "codedeployapp", "DeploymentGroupName": "codedeploydeplgroup", "Image1ArtifactName": "MyImage", "Image1ContainerName": "IMAGE1_NAME" },
  7. 若要提交您的變更並啟動管道建置,請選擇 ​Release change (發行變更),然後選擇 ​Release (發行)

  8. 選擇部署動作以在 CodeDeploy 中檢視,並查看流量轉移的進度。

    注意

    您可以查看顯示選用等待時間的部署步驟。根據預設,CodeDeploy 會在成功部署後等待一小時,再終止原始任務集。您可以利用這段時間復原或終止任務,但在任務集終止時,您的部署任務會以別的方式完成。

步驟 7:變更您的管道並驗證部署

對您的映像進行變更,然後將變更推送到您的 Amazon ECR 儲存庫。這會觸發您的管道執行。驗證是否已部署您的映像來源。