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-idvpc-abcd1234
\ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --namegreen-target-group
\ --protocol TCP \ --port 80 \ --vpc-idvpc-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 \ --subnetssubnet-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-arnarn: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 を使用したブルー/グリーンデプロイ中、トラフィックは次のようにシステムを通過します。
-
初期状態: すべての本番トラフィックはプライマリターゲットグループ (ブルーサービスリビジョン) にルーティングされます。
-
グリーンサービスリビジョンのデプロイ: Amazon ECS は新しいタスクをデプロイしたら、代替ターゲットグループに登録します。
-
テストトラフィック: テストリスナーが設定されている場合、テストトラフィックは代替ターゲットグループにルーティングされ、グリーンサービスリビジョンが検証されます。
-
本番トラフィック移行: Amazon ECS によって本番リスナーが更新され、トラフィックは代替ターゲットグループ (グリーンサービスリビジョン) にルーティングされます。
-
ベイク時間: 本番トラフィックが移行された後、ブルーおよびグリーンのサービスリビジョンの両方が同時に実行される期間。
-
完了: デプロイが正常に処理されると、ブルーサービスリビジョンは終了します。
デプロイ中に問題が検出された場合、Amazon ECS はトラフィックをプライマリターゲットグループ (ブルーサービスリビジョン) に戻すことで、自動的にロールバックできます。