チュートリアル: Amazon ECR ソース、ECS - CodeDeploy 間のデプロイでパイプラインを作成する - AWS CodePipeline

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: Amazon ECR ソース、ECS - CodeDeploy 間のデプロイでパイプラインを作成する

このチュートリアルでは、AWS CodePipeline で、Dockerイメージをサポートする blue/green のデプロイを使用してコンテナアプリケーションをデプロイするパイプラインを構成します。Blue/Green デプロイでは、古いバージョンと一緒に新しいバージョンのアプリケーションを起動し、トラフィックを再ルーティングする前に新しいバージョンをテストできます。また、デプロイプロセスをモニタリングし、問題がある場合は迅速にロールバックすることもできます。

注記

このチュートリアルでは、CodePipeline の Amazon ECS から CodeDeploy Blue/Green デプロイアクションについて説明します。CodePipeline で Amazon ECS スタンダードデプロイアクションを使用するチュートリアルについては、チュートリアル: を使用した Amazon ECS 標準デプロイ CodePipeline を参照してください。

完了したパイプラインは、Amazon ECR などのイメージリポジトリに保存されているイメージへの変更を検出し、CodeDeploy を使用してトラフィックを AmazonECS クラスターとロードバランサーにルーティングおよびデプロイします。CodeDeploy は、リスナーを使用して、AppSpec ファイルで指定し更新されたコンテナのポートにトラフィックを再ルーティングします。ロードバランサー、製造リスナー、ターゲットグループ、Amazon ECS アプリケーションが青/緑のデプロイでどのように使用されるかについては、チュートリアル:Amazon ECS サービスのデプロイ を参照してください。

また、Amazon ECS タスク定義が保存されている CodeCommit リポジトリなどのソース場所を使用するようにパイプラインを設定することもできます。このチュートリアルでは、これらの AWS リソースをそれぞれ設定してから、各リソースのアクションを含むステージでパイプラインを作成します。

ソースコードが変更されたり、新しいベースイメージが Amazon ECR にアップロードしたときは、継続的デリバリーパイプラインが自動的にコンテナイメージを構築してデプロイします。

このフローでは、次のアーティファクトを使用します。

  • Amazon ECR イメージリポジトリのコンテナ名とリポジトリ URI を指定する Docker イメージファイル。

  • Docker イメージ名、コンテナ名、Amazon ECS サービス名、およびロードバランサーの設定を一覧表示する Amazon ECS タスク定義。

  • Amazon ECS タスク定義ファイルの名前、更新されたアプリケーションのコンテナの名前、および CodeDeploy が製造トラフィックを再ルーティングするコンテナポートを指定する CodeDeployAppSpec ファイル。デプロイライフサイクルイベントフック中に実行できるオプションのネットワーク設定と Lambda 関数も指定できます。

注記

Amazon ECR イメージリポジトリへの変更をコミットすると、パイプラインソースアクションはそのコミット用に imageDetail.json ファイルを作成します。imageDetail.json ファイルの詳細については、「Amazon ECS Blue/Green デプロイアクション用の imageDetail.json ファイル」を参照してください。

パイプラインを作成または編集し、デプロイステージのソースアーティファクトを更新または指定するときは、使用する最新の名前とバージョンのソースアーティファクトを必ず指してください。パイプラインを設定した後、イメージまたはタスク定義を変更したら、リポジトリ内のソースアーティファクトファイルを更新してから、パイプラインのデプロイステージを編集する必要があります。

前提条件

以下のリソースがすでに作成されている必要があります。

ステップ 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. この例に示すように、us-west-2 リージョンと 111122223333 アカウント ID を指定して aws ecr get-login-password コマンドを実行します。

    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 リポジトリにプッシュする

このセクションでは、Amazon ECS でタスク定義 JSON ファイルを作成します。次に、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 サービスを作成するときに、ロードバランサーで作成したサブネット名とターゲットグループ値を使用します。Application Load Balancer または Network Load Balancer を作成できます。ロードバランサーでは、2 つのパブリックサブネットを別々のアベイラビリティーゾーンに持つ VPC を使用する必要があります。以下のステップでは、デフォルト VPC を確認して、ロードバランサーを作成してから、ロードバランサーの 2 つのターゲットグループを作成します。詳細については、「Network Load Balancer のターゲットグループ」を参照してください。

デフォルト VPC とパブリックサブネットを確認するには
  1. AWS Management Console にサインインして、Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. 使用するデフォルト VPC を確認します。ナビゲーションペインで、[Your VPCs(お使いの VPC)] を選択します。デフォルトのVPC 列に はい と表示されている VPC に注意してください。これがデフォルト VPC です。選択するデフォルトのサブネットが含まれています。

  3. [サブネット] を選択します。デフォルトのサブネット 列に はい と表示されている 2 つのサブネットを選択します。

    注記

    サブネット ID を書き留めます。これらは、このチュートリアルで後ほど必要になります。

  4. サブネットを選択後、[説明] タブを選択します。使用するサブネットが、異なるアベイラビリティーゾーンにあることを確認します。

  5. サブネットを選択後、[Route Table] タブを選択します。使用する各サブネットがパブリックサブネットであることを確認するには、ルートテーブルにゲートウェイ行が含まれていることを確認します。

Amazon EC2 Application Load Balancer を作成するには
  1. AWS Management Console にサインインし、Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. [Create Load Balancer] を選択します。

  4. [Application Load Balancer] を選択し、[Create] を選択します。

  5. [Name] に、ロードバランサーの名前を入力します。

  6. [Scheme] で、[インターネット向け] を選択します。

  7. [IP address type] で、[ipv4] を選択します。

  8. ロードバランサー用に 2 つのリスナーポートを設定するには:

    1. [Load Balancer Protocol (ロードバランサーのプロトコル)] で、[HTTP] を選択します。[ロードバランサーのポート] に「80」と入力します。

    2. [リスナーの追加] を選択します。

    3. 2 番目のリスナーの [Load Balancer Protocol] で、[HTTP] を選択します。[ロードバランサーのポート] に「8080」と入力します。

  9. [アベイラビリティーゾーン] の [VPC] で、デフォルトの VPC を選択します。次に、使用する 2 つのデフォルトサブネットを選択します。

  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] の順に選択します。

ロードバランサーの 2 番目のターゲットグループを作成するには
  1. ロードバランサーがプロビジョニングされたら、Amazon EC2 コンソールを開きます。ナビゲーションペインで、[ターゲットグループ] を選択します。

  2. [ターゲットグループの作成] を選択します。

  3. [Name] に、ターゲットグループの名前 (例: target-group-2) を入力します。

  4. [Target type] で、[IP] を選択します。

  5. [Protocol] で、[HTTP] を選択します。[Port] に「8080」と入力します。

  6. [VPC] で、デフォルトの VPC を選択します。

  7. [Create] (作成) を選択します。

    注記

    デプロイを実行するには、ロードバランサー用に 2 つのターゲットグループを作成する必要があります。最初のターゲットグループの ARN を書き留める必要があります。この ARN は、次のステップの create-service JSON ファイルで使用されます。

2 番目のターゲットグループを含めるようにロードバランサーを更新するには
  1. Amazon EC2 コンソールを開きます。ナビゲーションペインで、[ロードバランサー] を選択します。

  2. ロードバランサーを選択後、[Listeners] を選択します。ポート 8080 のリスナーを選択後、[編集] を選択します。

  3. [Forward to] の横の鉛筆アイコンを選択します。2 番目のターゲットグループを選択してから、チェックマークを選択します。[更新] を選択して、更新を保存します。

ステップ 4: Amazon ECS クラスターとサービスを作成する

このセクションでは、CodeDeploy がデプロイ中に(EC2インスタンスではなくAmazon ECS クラスターに)トラフィックをルーティングするAmazon ECS クラスターとサービスを作成します。Amazon ECS サービスを作成するには、ロードバランサーで作成したサブネット名、セキュリティグループ、ターゲットグループの値を使用してサービスを作成する必要があります。

注記

これらのステップを使用して Amazon ECS クラスターを作成するときは、AWS Fargate コンテナーをプロビジョニングする ネットワークのみ のクラスターテンプレートを使用します。AWSFargate は、コンテナインスタンスのインフラストラクチャを管理するテクノロジーです。Amazon ECS クラスター用の Amazon EC2 インスタンスを手動で選択または作成する必要はありません。

Amazon ECS クラスターを作成するには
  1. Amazon ECS クラシックコンソール (https://console.aws.amazon.com/ecs/) を開きます。

  2. ナビゲーションペインで [Clusters] (クラスター) を選択します。

  3. [Create cluster] (クラスターを作成) を選択します。

  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 コンソールを開き、ナビゲーションペインの ロードバランシングターゲットグループ を選択します。最初のターゲットグループを選択します。[説明] タブから 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. JSON ファイルを指定して、create-service コマンドを実行します。

    重要

    ファイル名の前に必ず 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. [アプリケーション名] に、使用する名前を入力します。

  3. [コンピューティングプラットフォーム] で [Amazon ECS] を選択します。

  4. [Create application] を選択します。

次に、CodeDeploy デプロイ グループを作成します。
  1. アプリケーションページの [デプロイグループ] タブで [デプロイグループの作成] を選択します。

  2. [デプロイグループ名] に、デプロイグループを表す名前を入力します。

  3. サービスロール で、CodeDeployに Amazon ECS へのアクセスを許可するサービスロールを選択します。新しいサービスロールを作成するには、次の手順を実行します。

    1. https://console.aws.amazon.com/iam/ で IAM コンソール を開きます。

    2. コンソールダッシュボードで [ロール] を選択します。

    3. [Create role] (ロールの作成) を選択します。

    4. [信頼されたエンティティのタイプを選択] で、[AWS のサービス ] を選択します。ユースケースの選択 で、CodeDeploy を選択します。[ユースケースの選択] で、[CodeDeploy - ECS] を選択します。[Next: Permissions] (次のステップ: アクセス許可) を選択します。AWSCodeDeployRoleForECS マネージドポリシーはロールにアタッチ済みです。

    5. [次の手順: タグ]、[次の手順: 確認] の順に選択します。

    6. ロールの名前 (例: CodeDeployECSRole) を入力し、[ロールの作成] を選択します。

  4. 環境設定 で、Amazon ECS クラスターの名前とサービス名を選択します。

  5. ロードバランサー から、Amazon ECS サービスにトラフィックを提供するロードバランサーの名前を選択します。

  6. [Production listener port] から、Amazon ECS サービスへの本稼働トラフィックを提供するリスナーのポートとプロトコルを選択します。[Test listener port] で、テストリスナーのポートとプロトコルを選択します。

  7. [Target group 1 name] および [Target group 2 name] から、デプロイ時にトラフィックをルーティングするターゲットグループを選択します。これらが、ロードバランサー用に作成したターゲットグループであることを確認します。

  8. すぐにトラフィックを再ルーティング を選択して、デプロイが成功してから更新された Amazon ECS タスクにトラフィックを再ルーティングするまでの時間を決定します。

  9. デプロイグループの作成 を選択します。

ステップ 6: パイプラインを作成する

このセクションでは、次のアクションを使用してパイプラインを作成します。

  • ソースアーティファクトがタスク定義と AppSpec ファイルである CodeCommit アクション。

  • ソースアーティファクトがイメージファイルである Amazon ECR ソースアクションを持つソースステージ。

  • デプロイが CodeDeploy アプリケーションとデプロイグループで実行される、Amazon ECS デプロイアクションを使用したデプロイステージ。

ウィザードで 2 ステージパイプラインを作成するには
  1. AWS Management Console にサインインして、CodePipeline コンソール http://console.aws.amazon.com/codesuite/codepipeline/home を開きます。

  2. [ようこそ] ページ、[Getting started (開始方法)] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。

  3. [ステップ 1: パイプラインの設定を選択する] の [パイプライン名] に「MyImagePipeline」と入力します。

  4. このチュートリアルの目的では、[パイプラインタイプ] で、[V1] を選択します。[V2] を選択することもできますが、パイプラインタイプは特性と価格が異なることに注意してください。詳細については、「パイプラインのタイプ」を参照してください。

  5. サービスロール で、新しいサービスロール を選択して、CodePipeline が IAM でサービスロールを作成できるようにします。

  6. [詳細設定] をデフォルト設定のままにし、[次へ] を選択します。

  7. [Step 2: Add source stage (ステップ 2: ソースステージの追加)] の [ソースプロバイダ] で、[AWS CodeCommit] を選択します。リポジトリ名 で、ステップ 1: CodeCommit リポジトリを作成する で作成した CodeCommit リポジトリの名前を選択します。[Branch name] で、最新のコード更新を含むブランチの名前を選択します。

    [Next] (次へ) をクリックします。

  8. [Step 3: Add build stage] (ステップ 3: ビルドステージを追加する) で、[Skip build stage] (ビルドステージのスキップ) を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。[Next] (次へ) をクリックします。

  9. ステップ 4: デプロイステージを追加する:

    1. [Deploy provider] で、[Amazon ECS (Blue/Green)] を選択します。[アプリケーション名] で、codedeployapp などの、アプリケーションの名前を入力またはリストから選択します。[デプロイグループ] に、codedeploydeplgroup などの、デプロイグループの名前を入力またはリストから選択します。

      注記

      「デプロイ」は、[ステップ 4: デプロイ] ステップで作成されるステージにデフォルトで付けられる名前であり、「ソース」は、パイプラインの最初のステージに付けられる名前です。

    2. [Amazon ECS タスク定義] で、[SourceArtifact] を選択します。フィールドに [taskdef.json] と入力します。

    3. AWS CodeDeploy AppSpec ファイル で、SourceArtifact を選択します。フィールドに [appspec.yaml] と入力します。

      注記

      この時点では、[Dynamically update task definition image] に情報は入力しないでください。

    4. [Next] (次へ) をクリックします。

  10. [ステップ 5: 確認] で情報を確認し、[パイプラインの作成] を選択します。

Amazon ECR ソースアクションをパイプラインに追加するには

パイプラインを表示し、Amazon ECR ソースアクションをパイプラインに追加します。

  1. パイプラインを選択します。左上の [Edit] (編集) を選択します。

  2. ソースステージで、[ステージを編集] を選択します。

  3. CodeCommitソースアクションの横にある +アクションの追加 を選択して、並列アクションを追加します。

  4. [アクション名] に、名前を入力します (例えば、Image)。

  5. [アクションプロバイダ] で [Amazon ECR] を選択します。

    
                        Amazon ECR ソースアクションをパイプラインに追加します。
  6. リポジトリ名 で、Amazon ECR リポジトリの名前を選択します。

  7. [Image tag] で、イメージの名前とバージョンを指定します (最新でない場合)。

  8. 出力アーティファクトで、次のステージで使用するイメージ名およびリポジトリ URI 情報が含まれている出力アーティファクトのデフォルト(例: MyImage)を選択します。

  9. アクション画面で、[Save] を選択します。ステージ画面で、[Done] を選択します。パイプラインで、[Save] を選択します。メッセージは、Amazon ECR ソースアクション用に作成されるAmazon CloudWatch Events ルールを示しています。

ソースアーティファクトをデプロイアクションに関連付けるには
  1. デプロイステージで 編集 を選択後、アイコンを選択して、Amazon ECS (Blue/Green) アクションを編集します。

  2. ペインの下部までスクロールします。[入力アーティファクト] で [Add] を選択します。新しい Amazon ECR リポジトリ (例: MyImage など) からソースアーティファクトを追加します。

  3. [タスク定義] で [SourceArtifact] を選択し、「taskdef.json」と入力されていることを確認します。

  4. AWS CodeDeploy AppSpec ファイル で、SourceArtifact を選択し、appspec.yamlと入力されていることを確認します。

  5. [Dynamically update task definition image] の [Input Artifact with Image URI] で、[MyImage] を選択し、taskdef.json ファイルで使用されているプレースホルダー「 IMAGE1_NAME」を入力します。[Save (保存)] を選択します。

  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. 変更を送信してパイプラインのビルドを開始するには、[変更をリリース][リリース] の順に選択します。

  8. デプロイアクションを選択して CodeDeploy で表示し、トラフィックシフトの進捗状況を確認します。

    注記

    オプションの待機時間を示すデプロイステップが表示される場合があります。デフォルトで、CodeDeploy はデプロイが成功してから 1 時間後に元のタスク設定を終了します。この時間を使用してタスクをロールバックまたは終了することはできますが、それ以外の場合、タスクセットが終了した時点でデプロイは完了します。

ステップ 7: パイプラインに変更を加えてデプロイを確認する

イメージを変更して、その変更を Amazon ECR リポジトリにプッシュします。これにより、パイプラインの実行がトリガーされます。イメージソースの変更がデプロイされていることを確認します。