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

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

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

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

注意

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

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

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

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

此流程使用以下成品:

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

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

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

注意

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

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

必要條件

您必須已建立以下資源:

  • 一個 CodeCommit 存儲庫。您可以使用在 教學:建立範本管道 (CodeCommit 儲存庫) 中建立的 AWS CodeCommit 儲存庫。

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

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

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

注意

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

建立映像
  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 帳戶識別碼。

    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. 使用前面的步驟將映像推送到 Amazon ECR。repositoryUri

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

第 2 步:創建任務定義和 AppSpec 源文件並推送到 CodeCommit 存儲庫

在本節中,您會建立任務定義 JSON 檔案,並在 Amazon ECS 中註冊該檔案。然後,您可以為 Git 客戶端創建一個 AppSpec 文件, CodeDeploy 並使用該文件將文件推送到您的 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 存儲庫。這些檔案是 Create Pipeline (建立管道) 精靈針對 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. 選擇建立

    注意

    您必須具有兩個針對負載平衡器建立的目標群組,才能執行部署。您只需要記下第一個目標群組的 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 容器的僅限聯網叢集範本。 AWSFargate 是一項為您管理容器執行個體基礎架構的技術。您不需要為您的 Amazon ECS 叢集選擇或手動建立 Amazon EC2 執行個體。

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

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

  3. 選擇 建立叢集

  4. 選擇使用 AWS Fargate 的僅限網路連線叢集範本,然後選擇 [下一步]。

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

要創建一個 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 主控台,然後從導覽窗格的「負載平衡」下選擇「目標群組」。選擇您的第一個目標群組。從 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. 服務角色中,選擇授與 Amazon ECS CodeDeploy 存取權的服務角色。若要建立新的服務角色,請遵循下列步驟:

    1. https://console.aws.amazon.com/iam/ 開啟身分與存取權管理主控台。

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

    3. 選擇建立角色

    4. [選取信任實體的類型] 底下,選取AWS 服務。在 [選擇使用案例] 下,選取CodeDeploy。在 [選取您的使用案例] 下,選取 [CodeDeploy -ECS]。選擇 Next: Permissions (下一步:許可)。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並開啟 CodePipeline 主控台,網址為 http://console.aws.amazon.com/codesuite/codepipeline/home

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

  3. Step 1: Choose pipeline settings (步驟 1:選擇管道設定)Pipeline name (管道名稱) 中,輸入 MyImagePipeline

  4. 管線類型中,針對本教學課程的目的選擇 V1。您也可以選擇 V2;但是請注意,管道類型在特性和價格上有所不同。如需詳細資訊,請參閱管線類型

  5. Service role (服務角色),選擇 New service role (新增服務角色),以允許 CodePipeline 在 IAM 中建立服務角色。

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

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

    選擇下一步

  8. Step 3: Add build stage (步驟 3:新增建置階段) 中,選擇 Skip build stage (跳過建置階段),然後再次選擇 Skip (跳過) 來接受警告訊息​。選擇下一步

  9. Step 4: Add deploy stage (步驟 4:新增部署階段) 中:

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

      注意

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

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

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

      注意

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

    4. 選擇下一步

  10. Step 5: Review (步驟 5:檢閱) 中,檢閱資訊,然後選擇 Create pipeline (建立管道)

若要將 Amazon ECR 來源動作新增至您的管道

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

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

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

  3. 通過選擇 CodeCommit 源操作旁邊的 + 添加操作添加 parallel 操作。

  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 事件規則。

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

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

  3. 在「作業定義」中,選擇 SourceArtifact,然後確認taskdef.json是否已輸入。

  4. AWS CodeDeploy AppSpec 檔案中,選擇 SourceArtifact,然後確認appspec.yaml已輸入。

  5. 動態更新工作定義影像的使用影像 URI 的輸入 Artifact 影中 MyImage,選擇,然後輸入taskdef.json檔案中使用的預留位置文字: IMAGE1_NAME。選擇儲存

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

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

    "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 儲存庫。這會觸發您的管道執行。驗證是否已部署您的映像來源。