本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
藍/綠部署的 Application Load Balancer 資源
若要搭配 Amazon ECS 藍/綠部署使用 Application Load Balancer,您需要設定特定資源,以允許藍/綠服務修訂之間的流量路由。
限制
下列限制目前適用於使用 Application Load Balancer 的藍/綠部署:
-
使用 Application Load Balancer 接聽程式時,不支援藍/綠部署,這些接聽程式具有使用非轉送動作設定的多個動作類型。如果您的 Application Load Balancer 接聽程式規則包含轉送和非轉送動作 (例如重新導向、固定回應或驗證動作) 的組合,則部署將會失敗。
目標群組
對於使用 Elastic Load Balancing 的藍/綠部署,您需要建立兩個目標群組:
-
藍色服務修訂的主要目標群組 (目前的生產流量)
-
綠色服務修訂版的替代目標群組 (新版本)
兩個目標群組都應該使用下列設定進行設定:
-
目標類型:
IP
(適用於具有awsvpc
網路模式的 Fargate 或 EC2) -
通訊協定:
HTTP
(或您的應用程式使用的通訊協定) -
連接埠:您的應用程式接聽的連接埠 (通常
80
用於 HTTP) -
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-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
-
子網路:不同可用區域中至少有兩個子網路
-
安全群組:允許接聽程式連接埠流量的安全群組
連接至 Application Load Balancer 的安全群組必須具有傳出規則,允許流量傳送至連接至 Amazon ECS 任務的安全群組。
範例 建立 Application Load Balancer
下列 CLI 命令會建立 anApplication 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 可以透過將流量路由回主要目標群組 (藍色服務修訂) 來自動轉返。