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

ブルー/グリーンデプロイ用の 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-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

次の設定で 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-groups sg-abcd1234 \ --subnets subnet-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 を使用したブルー/グリーンデプロイ中、トラフィックは次のようにシステムを通過します。

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

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

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

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

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

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

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