ブルー/グリーンデプロイ用の Application Load Balancer リソース
Amazon ECS ブルー/グリーンデプロイに Application Load Balancer を使用するには、ブルーおよびグリーンのサービスリビジョン間のトラフィックルーティングを可能にする特定のリソースを設定する必要があります。
ターゲットグループ
Elastic Load Balancing を使用したブルー/グリーンデプロイには、2 つのターゲットグループを作成する必要があります。
-
ブルーサービスリビジョンのプライマリターゲットグループ (現在の本番トラフィック)
-
グリーンサービスリビジョンの代替ターゲットグループ (新しいバージョン)
両方のターゲットグループは、次の設定で構成する必要があります。
-
ターゲットタイプ:
IP
(awsvpc
ネットワークモードの Fargate または EC2 の場合) -
プロトコル:
HTTP
(またはアプリケーションが使用するプロトコル) -
ポート: アプリケーションがリッスンするポート (通常、HTTP は
80
) -
VPC: Amazon ECS タスクと同じ VPC
-
ヘルスチェック設定: アプリケーションの正常性を適切にチェックするように設定されています
ブルー/グリーンデプロイ中、デプロイステージに基づき、Amazon ECS によって適切なターゲットグループにタスクが自動的に登録されます。
例 Application Load Balancer 用ターゲットグループの作成
次の CLI コマンドでは、ブルー/グリーンデプロイの Application Load Balancer で使用する 2 つのターゲットグループが作成されます。
aws elbv2 create-target-group \ --name
blue-target-group
\ --protocol HTTP \ --port 80 \ --vpc-idvpc-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 \ --namegreen-target-group
\ --protocol HTTP \ --port 80 \ --vpc-idvpc-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
次の設定で Application Load Balancer を作成する必要があります。
-
スキーム: 要件に応じて、インターネット向きまたは内部仕様
-
IP アドレスタイプ: IPv4
-
VPC: Amazon ECS タスクと同じ VPC
-
サブネット: 異なるアベイラビリティーゾーンに少なくとも 2 つのサブネット
-
セキュリティグループ: リスナーポートでトラフィックを許可するセキュリティグループ
Application Load Balancer にアタッチされたセキュリティグループには、Amazon ECS タスクにアタッチされたセキュリティグループへのトラフィックを可能にするアウトバウンドルールが必要です。
例 Application Load Balancer の作成
次の CLI コマンドでは、ブルー/グリーンデプロイに使用する Application Load Balancer が作成されます。
aws elbv2 create-load-balancer \ --name
my-application-load-balancer
\ --type application \ --security-groupssg-abcd1234
\ --subnetssubnet-12345678
subnet-87654321
リスナーとルール
ブルー/グリーンデプロイの場合、Application Load Balancer にリスナーを設定する必要があります。
-
本番リスナー: 本番トラフィック (通常はポート 80 または 443) が処理されます
-
トラフィックは、最初にプライマリターゲットグループに転送されます (ブルーサービスリビジョン)
-
デプロイ後、トラフィックが代替ターゲットグループに転送されます (グリーンサービスリビジョン)
-
-
テストリスナー (オプション): 本番トラフィックを移行する前にテストトラフィックが処理され、グリーンサービスリビジョンが検証されます
-
別のポート (例えば、8080 や 8443) で設定できます。
-
テスト中にトラフィックが代替ターゲットグループ (グリーンサービスリビジョン) に転送されます
-
ブルー/グリーンデプロイ中に Amazon ECS によってリスナールールが自動的に更新され、デプロイステージに基づいてトラフィックが適切なターゲットグループにルーティングされます。
例 本番リスナーの作成
次の 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
例 テストリスナーの作成
次の 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
例 パスベースのルーティング用にリスナールールを作成する
次の 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
例 ヘッダーベースのルーティング用にリスナールールを作成する
次の 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
サービス設定
Amazon ECS がユーザーに代わってクラスター内のロードバランサーリソースを管理するには、アクセス許可が必要です。詳細については、「ロードバランサー用の Amazon ECS インフラストラクチャの IAM ロール」を参照してください。
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 } }
デプロイ中のトラフィックフロー
Elastic Load Balancing を使用したブルー/グリーンデプロイ中、トラフィックは次のようにシステムを通過します。
-
初期状態: すべての本番トラフィックはプライマリターゲットグループ (ブルーサービスリビジョン) にルーティングされます。
-
グリーンサービスリビジョンのデプロイ: Amazon ECS は新しいタスクをデプロイしたら、代替ターゲットグループに登録します。
-
テストトラフィック: テストリスナーが設定されている場合、テストトラフィックは代替ターゲットグループにルーティングされ、グリーンサービスリビジョンが検証されます。
-
本番トラフィック移行: Amazon ECS によって本番リスナールールが更新され、トラフィックが代替ターゲットグループ (グリーンサービスリビジョン) にルーティングされます。
-
ベイク時間: 本番トラフィックが移行された後、ブルーおよびグリーンのサービスリビジョンの両方が同時に実行される期間。
-
完了: デプロイが正常に処理されると、ブルーサービスリビジョンは終了します。
デプロイ中に問題が検出された場合、Amazon ECS はトラフィックをプライマリターゲットグループ (ブルーサービスリビジョン) に戻すことで、自動的にロールバックできます。