Amazon ECS ブルー/グリーンデプロイの Network Load Balancer リソース - Amazon Elastic Container Service

Amazon ECS ブルー/グリーンデプロイの Network Load Balancer リソース

Amazon ECS ブルー/グリーンデプロイに Network Load Balancer を使用するには、ブルーおよびグリーンのサービスリビジョン間のトラフィックルーティングを有効にする特定のリソースを設定する必要があります。このセクションでは、必要なコンポーネントとその設定について説明します。

設定に Network Load Balancer が含まれている場合、Amazon ECS によって次のライフサイクルステージに 10 分の遅延が追加されます。

  • PRE_SCALE_UP

  • TEST_TRAFFIC_SHIFT

  • PRODUCTION_TRAFFIC_SHIFT

この遅延は、設定されたトラフィックの重みおよびデータプレーンにある実際のトラフィックルーティングの間に不一致を引き起こす可能性がある Network Load Balancer のタイミング問題を考慮しています。

ターゲットグループ

Network Load Balancer を使用したブルー/グリーンデプロイの場合、2 つのターゲットグループを作成する必要があります。

  • ブルーサービスリビジョンのプライマリターゲットグループ (現在の本番トラフィック)

  • グリーンサービスリビジョン (新しいサービスリビジョン) の代替ターゲットグループ

両方のターゲットグループは、次の設定で構成する必要があります。

  • ターゲットタイプ: ip (awsvpcネットワークモードの Fargate または EC2 の場合)

  • プロトコル: TCP (またはアプリケーションが使用するプロトコル)

  • ポート: アプリケーションがリッスンするポート (通常、HTTP は 80)

  • VPC: Amazon ECS タスクと同じ VPC

  • ヘルスチェック設定: アプリケーションの正常性を適切にチェックするように設定されています

    TCP ヘルスチェックの場合、Network Load Balancer はターゲットと TCP 接続を確立します。接続が正常に処理された場合、ターゲットは正常と見なされます。

    HTTP/HTTPS ヘルスチェックの場合、Network Load Balancer によって HTTP/HTTPS リクエストがターゲットに送信され、レスポンスが検証されます。

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

例 Network Load Balancer 用にターゲットグループの作成

次の AWS CLI コマンドでは、ブルー/グリーンデプロイで Network Load Balancer に使用する 2 つのターゲットグループを作成します。

aws elbv2 create-target-group \ --name blue-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --name green-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP

Network Load Balancer

次の設定で Network Load Balancer を作成する必要があります。

  • スキーム: 要件に応じて、インターネット向きまたは内部仕様

  • IP アドレスタイプ: IPv4

  • VPC: Amazon ECS タスクと同じ VPC

  • サブネット: 異なるアベイラビリティーゾーンに少なくとも 2 つのサブネット

Application Load Balancer とは違って、Network Load Balancer はトランスポートレイヤー (レイヤー 4) で動作し、セキュリティグループは使用しません。代わりに、Amazon ECS タスクに関連付けられたセキュリティグループが、リスナーポートの Network Load Balancer からのトラフィックを許可することを確認する必要があります。

例 Network Load Balancer を作成する

次の AWS CLI コマンドでは、ブルー/グリーンデプロイで使用する Network Load Balancer を作成します。

aws elbv2 create-load-balancer \ --name my-network-load-balancer \ --type network \ --subnets subnet-12345678 subnet-87654321

ブルー/グリーンデプロイで NLB を使用する際の考慮事項

ブルー/グリーンデプロイに Network Load Balancer を使用する場合、次の内容を考慮してください。

  • レイヤー 4 オペレーション: Network Load Balancer はトランスポートレイヤー (レイヤー 4) で動作し、アプリケーションレイヤー (レイヤー 7) のコンテンツは検査しません。つまり、ルーティングの決定に HTTP ヘッダーまたはパスを使用することはできません。

  • ヘルスチェック: Network Load Balancer のヘルスチェックは、TCP、HTTP、HTTPS プロトコルに制限されています。TCP ヘルスチェックの場合、Network Load Balancer は接続を確立できるかどうかのみが検証されます。

  • 接続の保存: Network Load Balancer はクライアントのソース IP アドレスを保存します。これはセキュリティおよびログ記録目的で役立ちます。

  • 静的 IP アドレス: Network Load Balancer は、各サブネットに静的 IP アドレスを提供します。ホワイトリストの登録や、クライアントが固定 IP アドレスに接続する必要がある場合に役立ちます。

  • テストトラフィック: Network Load Balancer はコンテンツベースのルーティングをサポートしていないため、テストトラフィックは本番トラフィックとは異なるポートに送信する必要があります。

リスナーとルール

Network Load Balancer を使用したブルー/グリーンデプロイの場合、リスナーを設定する必要があります。

  • 本番リスナー: 本番トラフィック (通常はポート 80 または 443) が処理されます

    • トラフィックは、最初にプライマリターゲットグループに転送されます (ブルーサービスリビジョン)

    • デプロイ後、トラフィックが代替ターゲットグループに転送されます (グリーンサービスリビジョン)

  • テストリスナー (オプション): 本番トラフィックを移行する前にテストトラフィックが処理され、グリーンサービスリビジョンが検証されます

    • 別のポート (8080 や 8443 など) で設定できます

    • テスト中にトラフィックが代替ターゲットグループ (グリーンサービスリビジョン) に転送されます

Application Load Balancer とは違って、Network Load Balancer はコンテンツベースのルーティングルールをサポートしていません。代わりに、トラフィックはリスナーポートおよびプロトコルに基づいてルーティングされます。

次の AWS CLI コマンドでは、Network Load Balancer の本番リスナーおよびテストリスナーを作成します。

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

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 80 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456 aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 8080 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456

サービス設定

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

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

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

この設定の主なコンポーネントは次のとおりです。

  • targetGroupArn: プライマリターゲットグループの ARN (ブルーサービスリビジョン)

  • alternateTargetGroupArn: 代替ターゲットグループの ARN (グリーンサービスリビジョン)

  • productionListenerArn: 本番トラフィック用リスナーの ARN

  • testListenerArn: (オプション) テストトラフィック用リスナーの ARN

  • roleArn: Amazon ECS に Network Load Balancer リソースの管理を可能にするロールの ARN

  • strategy: BLUE_GREEN に設定してブルー/グリーンデプロイを有効にします

  • bakeTimeInMinutes: 本番トラフィックを移行する前に、グリーンサービスリビジョンがデプロイされてから待機する時間

{ "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456", "containerName": "container-name", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456", "productionListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/1234567890123456", "testListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/2345678901234567", "roleArn": "arn:aws:iam::123456789012:role/ecs-nlb-role" } } ], "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 5 } }

デプロイ中のトラフィックフロー

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

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

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

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

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

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

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

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