

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

# Amazon ECS および CodeDeploy ブルー/グリーンデプロイアクションリファレンス
<a name="action-reference-ECSbluegreen"></a>

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

完成したパイプラインは、イメージまたはタスク定義ファイルの変更を検出し、CodeDeploy を使用して Amazon ECS クラスターとロードバランサーにトラフィックをルーティングしてデプロイします。CodeDeploy は、特別なポートを介して新しいタスクをターゲットにできる新しいリスナーをロードバランサーに作成します。また、Amazon ECS タスク定義が保存されている CodeCommit リポジトリなどのソース場所を使用するようにパイプラインを設定することもできます。

パイプラインを作成する前に、Amazon ECS リソース、CodeDeploy リソース、ロードバランサーとターゲットグループをすでに作成しておく必要があります。イメージリポジトリにイメージにタグを付けて保存し、タスク定義と AppSpec ファイルをファイルリポジトリにアップロードしておく必要があります。

**注記**  
このトピックでは、CodePipeline の Amazon ECS から CodeDeploy Blue/Green デプロイアクションについて説明します。CodePipeline での Amazon ECS 標準デプロイアクションの詳細については、「[Amazon Elastic Container Service デプロイアクションリファレンス](action-reference-ECS.md)」を参照してください。

**Topics**
+ [アクションタイプ](#action-reference-ECSbluegreen-type)
+ [設定パラメータ](#action-reference-ECSbluegreen-config)
+ [入力アーティファクト](#action-reference-ECSbluegreen-input)
+ [出力アーティファクト](#action-reference-ECSbluegreen-output)
+ [サービスロールのアクセス許可: `CodeDeployToECS` アクション](#edit-role-codedeploy-ecs)
+ [アクションの宣言](#action-reference-ECSbluegreen-example)
+ [関連情報](#action-reference-ECSbluegreen-links)

## アクションタイプ
<a name="action-reference-ECSbluegreen-type"></a>
+ カテゴリ:`Deploy`
+ 所有者: `AWS`
+ プロバイダー: `CodeDeployToECS`
+ バージョン: `1`

## 設定パラメータ
<a name="action-reference-ECSbluegreen-config"></a>

**ApplicationName**  
必須: はい  
CodeDeploy 内のアプリケーションの名前。パイプラインを作成する前に、CodeDeploy でアプリケーションをすでに作成しておく必要があります。

**DeploymentGroupName**  
必須: はい  
CodeDeploy アプリケーション用に作成した Amazon ECS タスクセットに指定されているデプロイグループ。パイプラインを作成する前に、CodeDeploy でデプロイグループをすでに作成しておく必要があります。

**TaskDefinitionTemplateArtifact**  
必須: はい  
デプロイアクションにタスク定義ファイルを提供する入力アーティファクトの名前。これは通常、ソースアクションからの出力アーティファクトの名前です。コンソールを使用する場合、ソースアクションの出力アーティファクトのデフォルト名は `SourceArtifact` になります。

**AppSpectemplateArtifact**  
必須: はい  
デプロイアクションに AppSpec ファイルを提供する入力アーティファクトの名前。この値は、パイプラインの実行時に更新されます。これは通常、ソースアクションからの出力アーティファクトの名前です。コンソールを使用する場合、ソースアクションの出力アーティファクトのデフォルト名は `SourceArtifact` になります。AppSpec ファイル内の `TaskDefinition` では、[こちら](tutorials-ecs-ecr-codedeploy.md#tutorials-ecs-ecr-codedeploy-taskdefinition)に示されているように `<TASK_DEFINITION>` プレースホルダーテキストを使用できます。

**AppSpecTemplatePath**  
必須: いいえ  
パイプラインの CodeCommit リポジトリなど、パイプラインのソースファイルのロケーションに保存されている AppSpec ファイルのファイル名。デフォルトのファイル名は `appspec.yaml` です。AppSpec ファイルが同じ名前で、ファイルリポジトリのルートレベルに保存されている場合は、ファイル名を指定する必要はありません。パスがデフォルトでない場合は、パスとファイル名を入力します。

**TaskDefinitionTemplatePath**  
必須: いいえ  
パイプラインの CodeCommit リポジトリなど、パイプラインのファイルソースのロケーションに保存されているタスク定義のファイル名。デフォルトのファイル名は `taskdef.json` です。タスク定義ファイルが同じ名前で、ファイルリポジトリのルートレベルに保存されている場合は、ファイル名を指定する必要はありません。パスがデフォルトでない場合は、パスとファイル名を入力します。

**イメージ<Number>ArtifactName**  
必須: いいえ  
デプロイアクションにイメージを提供する入力アーティファクトの名前。これは一般に、Amazon ECR ソースアクションからの出力など、イメージリポジトリの出力アーティファクトです。  
`<Number>` に指定できる値は 1 から 4 までです。

**イメージ<Number>ContainerName**  
必須: いいえ  
Amazon ECR ソースリポジトリなど、イメージリポジトリから使用可能なイメージの名前。  
`<Number>` に指定できる値は 1 から 4 までです。

## 入力アーティファクト
<a name="action-reference-ECSbluegreen-input"></a>
+ **アーティファクトの数:** `1 to 5`
+ **説明:** `CodeDeployToECS`アクションは、最初にソースファイルリポジトリ内のタスク定義ファイルと AppSpec ファイルを検索し、次にイメージリポジトリ内のイメージを検索し、タスク定義の新しいリビジョンを動的に生成し、最後に AppSpec コマンドを実行してタスクセットとコンテナをクラスターにデプロイします。

  `CodeDeployToECS` アクションは、イメージ URI をイメージにマップする `imageDetail.json` ファイルを検索します。Amazon ECR イメージリポジトリへの変更をコミットすると、ECR ソースアクションのパイプラインはそのコミット用に `imageDetail.json` ファイルを作成します。アクションが自動化されていないパイプラインの場合、手動で `imageDetail.json` ファイルを追加することもできます。`imageDetail.json` ファイルの詳細については、「[Amazon ECS Blue/Green デプロイアクション用の imageDetail.json ファイル](file-reference.md#file-reference-ecs-bluegreen)」を参照してください。

  `CodeDeployToECS` アクションは、タスク定義の新しいリビジョンを動的に生成します。このフェーズでは、このアクションがタスク定義ファイル内のプレースホルダーを、imageDetail.json ファイルから取得したイメージ URI に置き換えます。例えば、*IMAGE1\$1NAME* を Image1ContainerName パラメータとして設定する場合、タスク定義ファイルのイメージフィールドの値としてプレースホルダー *<IMAGE1\$1NAME>* を指定する必要があります。この場合、CodeDeployToECS アクションはプレースホルダー *<IMAGE1\$1NAME>* を、Image1ArtifactName として指定したアーティファクト内の imageDetail.json から取得した実際のイメージ URI に置き換えます。

  タスク定義の更新では、CodeDeploy の `AppSpec.yaml` ファイルに `TaskDefinition` プロパティを含めます。

  ```
  TaskDefinition: <TASK_DEFINITION>
  ```

  このプロパティは、新しいタスク定義が作成された後、`CodeDeployToECS` アクションによって更新されます。

  `TaskDefinition` フィールドの値として、プレースホルダーテキストは <TASK\$1DEFINITION> である必要があります。`CodeDeployToECS` アクションは、このプレースホルダーを、動的に生成されたタスク定義の実際の ARN に置き換えます。

## 出力アーティファクト
<a name="action-reference-ECSbluegreen-output"></a>
+ **アーティファクトの数:** `0` 
+ **説明:** 出力アーティファクトは、このアクションタイプには適用されません。

## サービスロールのアクセス許可: `CodeDeployToECS` アクション
<a name="edit-role-codedeploy-ecs"></a>

`CodeDeployToECS` アクション (Blue/Green デプロイ) では、CodeDeploy から Amazon ECS への Blue/Green デプロイアクションを持つパイプラインを作成するために必要な最低限のアクセス許可は以下のとおりです。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCodeDeployDeploymentActions",
            "Action": [
                "codedeploy:CreateDeployment",
                "codedeploy:GetDeployment"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:deploymentgroup:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployApplicationActions",
            "Action": [
                "codedeploy:GetApplication",
                "codedeploy:GetApplicationRevision",
                "codedeploy:RegisterApplicationRevision"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]",
                "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployDeploymentConfigAccess",
            "Action": [
                "codedeploy:GetDeploymentConfig"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:deploymentconfig:*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowECSRegisterTaskDefinition",
            "Action": [
                "ecs:RegisterTaskDefinition"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowPassRoleToECS",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::111122223333:role/[[PassRoles]]"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "ecs.amazonaws.com",
                        "ecs-tasks.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

Amazon ECS でタグ付け承認の使用をオプトインできます。オプトインする場合、`ecs:TagResource` というアクセス許可を付与する必要があります。オプトインの方法、必要になるアクセス許可、タグ付け承認の詳細については、Amazon Elastic Container Service 開発者ガイドの「[タグ付け承認のタイムライン](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#tag-resources-timeline)」を参照してください。

また、タスクに IAMロールを使用するための `iam:PassRole` アクセス許可を追加する必要があります。詳細については、「[Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)そして[タスクの IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」を参照してください。

上の例に示すように、`ecs-tasks.amazonaws.com` を `iam:PassedToService` 条件下のサービスのリストへ追加することができます。

## アクションの宣言
<a name="action-reference-ECSbluegreen-example"></a>

------
#### [ YAML ]

```
Name: Deploy
Actions:
  - Name: Deploy
    ActionTypeId:
      Category: Deploy
      Owner: AWS
      Provider: CodeDeployToECS
      Version: '1'
    RunOrder: 1
    Configuration:
      AppSpecTemplateArtifact: SourceArtifact
      ApplicationName: ecs-cd-application
      DeploymentGroupName: ecs-deployment-group
      Image1ArtifactName: MyImage
      Image1ContainerName: IMAGE1_NAME
      TaskDefinitionTemplatePath: taskdef.json
      AppSpecTemplatePath: appspec.yaml
      TaskDefinitionTemplateArtifact: SourceArtifact
    OutputArtifacts: []
    InputArtifacts:
      - Name: SourceArtifact
      - Name: MyImage
    Region: us-west-2
    Namespace: DeployVariables
```

------
#### [ JSON ]

```
{
    "Name": "Deploy",
    "Actions": [
        {
            "Name": "Deploy",
            "ActionTypeId": {
                "Category": "Deploy",
                "Owner": "AWS",
                "Provider": "CodeDeployToECS",
                "Version": "1"
            },
            "RunOrder": 1,
            "Configuration": {
                "AppSpecTemplateArtifact": "SourceArtifact",
                "ApplicationName": "ecs-cd-application",
                "DeploymentGroupName": "ecs-deployment-group",
                "Image1ArtifactName": "MyImage",
                "Image1ContainerName": "IMAGE1_NAME",
                "TaskDefinitionTemplatePath": "taskdef.json",
                "AppSpecTemplatePath": "appspec.yaml",
                "TaskDefinitionTemplateArtifact": "SourceArtifact"
            },
            "OutputArtifacts": [],
            "InputArtifacts": [
                {
                    "Name": "SourceArtifact"
                },
                {
                    "Name": "MyImage"
                }
            ],
            "Region": "us-west-2",
            "Namespace": "DeployVariables"
        }
    ]
}
```

------

## 関連情報
<a name="action-reference-ECSbluegreen-links"></a>

このアクションを利用する際に役立つ関連リソースは以下の通りです。
+ [チュートリアル: Amazon ECR ソース、ECS - CodeDeploy 間のデプロイでパイプラインを作成する](tutorials-ecs-ecr-codedeploy.md) - このチュートリアルでは、Blue/Green のデプロイに必要な CodeDeploy リソースと Amazon ECS リソースの作成を順を追って説明します。このチュートリアルでは、Docker イメージを Amazon ECR にプッシュし、Docker イメージ名、コンテナ名、Amazon ECS サービス名、およびロードバランサーの設定を一覧表示する Amazon ECS タスク定義を作成する方法について説明します。このチュートリアルでは、デプロイ用の AppSpec ファイルとパイプラインの作成について順を追って説明します。
**注記**  
このトピックとチュートリアルでは、CodePipeline の CodeDeploy および ECS Blue/Green アクションについて説明します。CodePipeline の ECS 標準アクションの詳細については、「[チュートリアル: CodePipeline を使用した継続的デプロイ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cd-pipeline.html)」を参照してください。
+ *AWS CodeDeploy ユーザーガイド* – Blue/Green デプロイでロードバランサー、本番リスナー、ターゲットグループ、Amazon ECS アプリケーションを使用する方法については、[「チュートリアル: Amazon ECS サービスをデプロイする](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment.html)」を参照してください。*AWS CodeDeploy ユーザーガイド*のこのリファレンス情報は、Amazon ECS および を使用した Blue/Green デプロイの概要を示しています AWS CodeDeploy。
+ *Amazon Elastic Container Service デベロッパーガイド* - Docker イメージとコンテナ、ECS サービスとクラスター、および ECS タスクセットの操作については、「[Amazon ECS とは](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/)」を参照してください。