適用於藍/綠部署的 Application Load Balancer 資源 - Amazon Elastic Container Service

適用於藍/綠部署的 Application Load Balancer 資源

若要搭配 Amazon ECS 藍/綠部署使用 Application Load Balancer,需要設定特定資源,以允許藍色與綠色服務修訂版之間的流量路由。

目標群組

若要搭配 Elastic Load Balancing 使用藍/綠部署,需要建立兩個目標群組:

  • 用於藍色服務修訂版的主要目標群組 (目前生產流量)

  • 用於綠色服務修訂版的替代目標群組 (新版本)

兩個目標群組都應使用下列設定進行設定:

  • 目標類型:IP (適用於 Fargate 或使用 awsvpc 網路模式的 EC2)

  • 通訊協定:HTTP (或應用程式使用的通訊協定)

  • 連接埠:應用程式監聽的連接埠 (對於 HTTP 通常為 80)

  • VPC:與 Amazon ECS 任務相同的 VPC

  • 運作狀態檢查設定:設定為正確檢查應用程式的運作狀態

在藍/綠部署期間,Amazon ECS 會根據部署階段,自動向相應的目標群組註冊任務。

範例 為 Application Load Balancer 建立目標群組

下列 CLI 命令會建立兩個目標群組,用於藍/綠部署中的 Application Load Balancer:

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

  • 子網路:至少兩個位於不同可用區域的子網路

  • 安全群組:允許接聽程式連接埠流量的安全群組

連接至 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 可以透過將流量路由回主要目標群組 (藍色服務修訂版) 實現自動復原。