

# ブルー/グリーンデプロイについて
<a name="about-blue-green-deployments"></a>

このトピックでは、CloudFormation でブルー/グリーンデプロイを実行する方法の概要を説明します。また、ブルー/グリーンデプロイ用の CloudFormation テンプレートを準備する方法についても説明します。

**Topics**
+ [仕組み](#blue-green-how-it-works)
+ [グリーンデプロイを開始するリソースの更新](#blue-green-resources)
+ [テンプレートの準備](#blue-green-setup)
+ [ブルー/グリーンデプロイのモデリング](#blue-green-required)
+ [変更セット](#blue-green-changesets)
+ [スタックイベントのモニタリング](#blue-green-events)
+ [IAM アクセス許可](#blue-green-iam)

## 仕組み
<a name="blue-green-how-it-works"></a>

CloudFormation で CodeDeploy を通じて ECS ブルー/グリーンデプロイを実行する場合は、まず、使用するトラフィックルーティングとスタビライズ設定を指定するなど、ブルーとグリーンの両方のアプリケーション環境のリソースを定義するスタックテンプレートを作成します。次に、そのテンプレートからスタックを作成します。これにより、ブルー (現在の) アプリケーションが生成されます。CloudFormation は、スタックの作成時にのみブルーリソースを作成します。グリーンデプロイのリソースは、必要になるまで作成されません。

その後、将来のスタックの更新で、ブルーのアプリケーションでタスク定義またはタスクセットリソースを更新した場合、CloudFormation は次のことを行います。
+ 必要なグリーンアプリケーション環境リソースをすべて生成する
+ 指定されたトラフィックルーティングパラメータに基づいてトラフィックをシフトする
+ 青色のリソースを削除する

グリーンデプロイが成功してファイナライズされる前の任意の時点でエラーが発生した場合、CloudFormation は、グリーンデプロイ全体が開始される前の状態にスタックをロールバックします。

## グリーンデプロイを開始するリソースの更新
<a name="blue-green-resources"></a>

特定の ECS リソースの特定のプロパティを更新するスタック更新を実行すると、CloudFormation はグリーンデプロイプロセスを開始します。このプロセスを開始するリソースは次のとおりです。
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskset.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskset.html) 

ただし、これらのリソースの更新に置換を必要とするプロパティの変更が含まれていない場合、グリーンデプロイは開始されません。詳細については、「[スタックリソースの更新動作を理解する](using-cfn-updating-stacks-update-behaviors.md)」を参照してください。

同じスタック更新オペレーションで、上記のリソースに対する更新と他のリソースに対する更新を組み合わせることはできないことに注意することが重要です。リストされているリソースと、同じスタック内の他のリソースの両方を更新する必要がある場合は、次の 2 つのオプションがあります。
+ 2 つの別々のスタック更新オペレーションを実行します: 1 つは上記のリソースに対する更新のみを含み、もう 1 つは他のすべてのリソースに対する変更を含む別のスタック更新。
+ テンプレートから `Transform` および `Hooks` セクションを削除し、スタックの更新を実行します。この場合、CloudFormation はグリーンデプロイを実行しません。

## ECS ブルー/グリーンデプロイを実行するためのテンプレートの準備
<a name="blue-green-setup"></a>

スタックでブルー/グリーンデプロイメントを有効にするには、スタックの更新を実行する前に、以下のセクションをスタックテンプレートに含めます。
+ `AWS::CodeDeployBlueGreen` 変換への参照をテンプレートに追加します。

  ```
  "Transform": [
    "AWS::CodeDeployBlueGreen"
  ],
  ```
+ `AWS::CodeDeploy::BlueGreen` フックを呼び出し、デプロイのプロパティを指定する `Hooks` セクションを追加します。詳細については、「[`AWS::CodeDeploy::BlueGreen` フック構文](blue-green-hook-syntax.md)」を参照してください。
+ `Resources` セクションで、デプロイのブルーとグリーンのリソースを定義します。

これらのセクションは、最初にテンプレートを作成するときに (つまり、スタック自体を作成する前に) 追加することも、スタック更新を実行する前に既存のテンプレートに追加することもできます。新しいスタックにブルー/グリーンデプロイを指定した場合、CloudFormation はスタック作成時にブルーリソースのみを作成します。グリーンデプロイ用のリソースは、スタックの更新中に必要になるまで作成されません。

## CloudFormation リソースを使用したブルー/グリーンデプロイのモデリング
<a name="blue-green-required"></a>

ECS で CodeDeploy ブルー/グリーンデプロイを実行するには、CloudFormation テンプレートに、Amazon ECS サービスやロードバランサーなど、デプロイをモデル化するリソースを含める必要があります。これらのリソースが表す内容の詳細については、「AWS CodeDeploy ユーザーガイド」の「[Amazon ECS デプロイを開始する前に](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps-ecs.html#deployment-steps-prerequisites-ecs)」を参照してください。


| 要件 | リソース | 必須/オプション | 置き換えられた場合、ブルー/グリーンデプロイを開始しますか? | 
| --- | --- | --- | --- | 
| Amazon ECS クラスター | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-cluster.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-cluster.html) | オプション。デフォルトのクラスターを使用できます。 | いいえ | 
| Amazon ECS サービス | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-service.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-service.html) | 必須。 | いいえ | 
| アプリケーションまたは Network Load Balancer | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-service-loadbalancer.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-service-loadbalancer.html) | 必須。 | いいえ | 
| 本稼働リスナー | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html) | 必須。 | いいえ | 
| テストリスナー  | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html) | オプション。 | いいえ | 
| 2 つのターゲットグループ | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html) | 必須。 | いいえ | 
| Amazon ECS タスク定義  | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html) | 必須。 | はい | 
| Amazon ECS アプリケーション用のコンテナ | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name) | 必須。 | いいえ | 
| 置き換えタスクセット用のポート | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport) | 必須。 | いいえ | 

## 変更セット
<a name="blue-green-changesets"></a>

グリーンデプロイを開始するスタックの更新を実行する前に、変更セットを作成することを強くお勧めします。これにより、スタックの更新を実行する前にスタックに加えられる実際の変更を確認できます。リソースの変更は、スタックの更新中に実行される順序で表示されない場合があることに注意してください。詳細については、「[変更セットを使用して CloudFormation スタックを更新する](using-cfn-updating-stacks-changesets.md)」を参照してください。

## スタックイベントのモニタリング
<a name="blue-green-events"></a>

ECS デプロイの各ステップで生成されるスタックイベントは、**[Stack]** (スタック) ページの **[Events]** (イベント) タブで、AWS CLI を使用して確認できます。詳細については、「[スタックの進行状況を監視する](monitor-stack-progress.md)」を参照してください。

## ブルー/グリーンデプロイ用の IAM 許可
<a name="blue-green-iam"></a>

CloudFormation がブルー/グリーンデプロイを正常に実行するには、次の CodeDeploy アクセス権限が必要です。
+ `codedeploy:Get*`
+ `codedeploy:CreateCloudFormationDeployment`

詳細については、「*サービス認可リファレンス*」の「[CodeDeploy のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscodedeploy.html)」を参照してください。