适用于蓝绿部署的应用程序负载均衡器资源
要将应用程序负载均衡器用于 Amazon ECS 蓝绿部署,需要配置特定的资源,以便在蓝色服务修订与绿色服务修订之间进行流量路由。
限制
当前以下限制适用于使用应用程序负载均衡器的蓝绿部署:
-
如果使用的应用程序负载均衡器侦听器配置了包含非转发操作的多种操作类型,则不支持蓝绿部署。如果应用程序负载均衡器侦听器规则包含转发操作和非转发操作的组合,部署将会失败。
目标组
对于使用 Elastic Load Balancing 的蓝绿部署,需要创建两个目标组:
-
一个用于蓝色服务修订(当前生产流量)的主目标组
-
一个用于绿色服务修订(新版本)的备用目标组
两个目标组都应配置以下设置:
-
目标类型:
IP
(适用于 Fargate 或采用awsvpc
网络模式的 EC2) -
协议:
HTTP
(或应用程序使用的协议) -
端口:应用程序侦听端口(HTTP 通常为
80
) -
VPC:与 Amazon ECS 任务相同的 VPC
-
运行状况检查设置:配置为正确检查应用程序的运行状况
在蓝绿部署期间,Amazon ECS 会根据部署阶段自动将任务注册到相应的目标组。
例 为应用程序负载均衡器创建目标组
以下 CLI 命令将创建两个目标组,用于使用应用程序负载均衡器的蓝绿部署:
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
应用程序负载均衡器
需要创建具有以下配置的应用程序负载均衡器:
-
方案:面向互联网或内部(视需求而定)
-
IP 地址类型:IPv4
-
VPC:与 Amazon ECS 任务相同的 VPC
-
子网:至少两个位于不同可用区的子网
-
安全组:允许通过侦听器端口的流量的安全组
附加到应用程序负载均衡器的安全组必须具有出站规则,允许流量传入附加到 Amazon ECS 任务的安全组。
例 创建应用程序负载均衡器
以下 CLI 命令将创建用于蓝绿部署的应用程序负载均衡器:
aws elbv2 create-load-balancer \ --name
my-application-load-balancer
\ --type application \ --security-groupssg-abcd1234
\ --subnetssubnet-12345678
subnet-87654321
侦听器和规则
对于蓝绿部署,需要在应用程序负载均衡器上配置以下侦听器:
-
生产侦听器:处理生产流量(通常在端口 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 可以通过将流量路由回主目标组(蓝色服务修订)实现自动回滚。