

# ブルー/グリーンデプロイ、リニアデプロイおよびカナリアデプロイ用の Application Load Balancer リソース
<a name="alb-resources-for-blue-green"></a>

Amazon ECS ブルー/グリーンデプロイに Application Load Balancer を使用するには、ブルーおよびグリーンのサービスリビジョン間のトラフィックルーティングを可能にする特定のリソースを設定する必要があります。

## ターゲットグループ
<a name="alb-target-groups"></a>

Elastic Load Balancing を使用したブルー/グリーンデプロイには、2 つのターゲットグループを作成する必要があります。
+ ブルーサービスリビジョンのプライマリターゲットグループ (現在の本番トラフィック)
+ グリーンサービスリビジョンの代替ターゲットグループ (新しいバージョン)

両方のターゲットグループは、次の設定で構成する必要があります。
+ ターゲットタイプ: `IP` (`awsvpc`ネットワークモードの Fargate または EC2 の場合)
+ プロトコル: `HTTP` (またはアプリケーションが使用するプロトコル)
+ ポート: アプリケーションがリッスンするポート (通常、HTTP は `80`)
+ VPC: Amazon ECS タスクと同じ VPC
+ ヘルスチェック設定: アプリケーションの正常性を適切にチェックするように設定されています

ブルー/グリーンデプロイ中、デプロイステージに基づき、Amazon ECS によって適切なターゲットグループにタスクが自動的に登録されます。

**Example Application Load Balancer 用ターゲットグループの作成**  
次の CLI コマンドでは、ブルー/グリーンデプロイの Application Load Balancer で使用する 2 つのターゲットグループが作成されます。  

```
aws elbv2 create-target-group \
    --name blue-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2

aws elbv2 create-target-group \
    --name green-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2
```

## Application Load Balancer
<a name="alb-load-balancer"></a>

次の設定で Application Load Balancer を作成する必要があります。
+ スキーム: 要件に応じて、インターネット向きまたは内部仕様
+ IP アドレスタイプ: IPv4
+ VPC: Amazon ECS タスクと同じ VPC
+ サブネット: 異なるアベイラビリティーゾーンに少なくとも 2 つのサブネット
+ セキュリティグループ: リスナーポートでトラフィックを許可するセキュリティグループ

Application Load Balancer にアタッチされたセキュリティグループには、Amazon ECS タスクにアタッチされたセキュリティグループへのトラフィックを可能にするアウトバウンドルールが必要です。

**Example Application Load Balancer の作成**  
次の CLI コマンドでは、ブルー/グリーンデプロイに使用する Application Load Balancer が作成されます。  

```
aws elbv2 create-load-balancer \
    --name my-application-load-balancer \
    --type application \
    --security-groups sg-abcd1234 \
    --subnets subnet-12345678 subnet-87654321
```

## リスナーとルール
<a name="alb-listeners"></a>

ブルー/グリーンデプロイの場合、Application Load Balancer にリスナーを設定する必要があります。
+ 本番リスナー: 本番トラフィック (通常はポート 80 または 443) が処理されます
  + トラフィックは、最初にプライマリターゲットグループに転送されます (ブルーサービスリビジョン)
  + デプロイ後、トラフィックが代替ターゲットグループに転送されます (グリーンサービスリビジョン)
+ テストリスナー (オプション): 本番トラフィックを移行する前にテストトラフィックが処理され、グリーンサービスリビジョンが検証されます
  + 別のポート (例えば、8080 や 8443) で設定できます。
  + テスト中にトラフィックが代替ターゲットグループ (グリーンサービスリビジョン) に転送されます

ブルー/グリーンデプロイ中に Amazon ECS によってリスナールールが自動的に更新され、デプロイステージに基づいてトラフィックが適切なターゲットグループにルーティングされます。

**Example 本番リスナーの作成**  
次の CLI コマンドでは、プライマリ (ブルー) ターゲットグループにトラフィックを転送する本番リスナーをポート 80 で作成します。  

```
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 80 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/abcdef123456
```

**Example テストリスナーの作成**  
次の CLI コマンドでは、代替 (グリーン) ターゲットグループにトラフィックを転送するテストリスナーをポート 8080 で作成します。  

```
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 8080 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

**Example パスベースのルーティング用にリスナールールを作成する**  
次の CLI コマンドでは、テスト用に特定のパスのトラフィックをグリーンターゲットグループに転送するルールを作成します。  

```
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 10 \
    --conditions Field=path-pattern,Values='/test/*' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

**Example ヘッダーベースのルーティング用にリスナールールを作成する**  
次の CLI コマンドでは、テスト用に特定のヘッダーを持つトラフィックをグリーンターゲットグループに転送するルールを作成します。  

```
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 20 \
    --conditions Field=http-header,HttpHeaderConfig='{Name=X-Environment,Values=[test]}' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
```

## サービス設定
<a name="alb-service-configuration"></a>

Amazon ECS がユーザーに代わってクラスター内のロードバランサーリソースを管理するには、アクセス許可が必要です。詳細については、「[ロードバランサー用の Amazon ECS インフラストラクチャの IAM ロール](AmazonECSInfrastructureRolePolicyForLoadBalancers.md)」を参照してください。

Elastic Load Balancing を使用したブルー/グリーンデプロイ用に Amazon ECS サービスを作成または更新する際には、次の設定を指定する必要があります。

*user-input* を独自の値に置き換えます。

この設定の主なコンポーネントは次のとおりです。
+ `targetGroupArn`: プライマリターゲットグループの ARN (ブルーサービスリビジョン)。
+ `alternateTargetGroupArn`: 代替ターゲットグループの ARN (グリーンサービスリビジョン)。
+ `productionListenerRule`: 本番トラフィックのリスナールールの ARN。
+ `roleArn`: Amazon ECS が Elastic Load Balancing リソースを管理できるようにするためのロールの ARN。
+ `strategy`: `BLUE_GREEN` に設定してブルー/グリーンデプロイを有効にします。
+ `bakeTimeInMinutes`: 本番トラフィックが移行した後に、ブルーおよびグリーンのサービスリビジョンの両方が同時に実行される期間。
+ `TestListenerRule`: テストトラフィックのリスナールールの ARN。このパラメータはオプションです。

```
{
    "loadBalancers": [
        {
            "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/primary-target-group/abcdef123456",
            "containerName": "container-name",
            "containerPort": 80,
            "advancedConfiguration": {
                "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:account-id:targetgroup/alternate-target-group/ghijkl789012",
                "productionListenerRule": "arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/abcdef123456/listener/ghijkl789012/rule/mnopqr345678",
                "roleArn": "arn:aws:iam::123456789012:role/ecs-elb-role"
            }
        }
    ],
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "maximumPercent": 200,
        "minimumHealthyPercent": 100,
        "bakeTimeInMinutes": 5
    }
}
```

## デプロイ中のトラフィックフロー
<a name="alb-traffic-flow"></a>

Elastic Load Balancing を使用したブルー/グリーンデプロイ中、トラフィックは次のようにシステムを通過します。

1. *初期状態*: すべての本番トラフィックはプライマリターゲットグループ (ブルーサービスリビジョン) にルーティングされます。

1. *グリーンサービスリビジョンのデプロイ*: Amazon ECS は新しいタスクをデプロイしたら、代替ターゲットグループに登録します。

1. *テストトラフィック*: テストリスナーが設定されている場合、テストトラフィックは代替ターゲットグループにルーティングされ、グリーンサービスリビジョンが検証されます。

1. *本番トラフィック移行*: Amazon ECS によって本番リスナールールが更新され、トラフィックが代替ターゲットグループ (グリーンサービスリビジョン) にルーティングされます。

1. *ベイク時間*: 本番トラフィックが移行された後、ブルーおよびグリーンのサービスリビジョンの両方が同時に実行される期間。

1. *完了*: デプロイが正常に処理されると、ブルーサービスリビジョンは終了します。

デプロイ中に問題が検出された場合、Amazon ECS はトラフィックをプライマリターゲットグループ (ブルーサービスリビジョン) に戻すことで、自動的にロールバックできます。