为计算环境执行蓝绿更新
蓝绿更新策略通过创建与现有计算环境(蓝色)并行运行的新计算环境(绿色),来减少停机时间和风险。借助这种方法,您可以在保持现有环境正常运的行同时,逐步将工作负载转移到新环境。蓝绿更新提供了最安全的更新路径,并且适用于任何服务角色类型或分配策略。
概览
蓝绿更新具有多项优势,是生产环境更新的理想方式。在更新过程中,您的工作负载会继续运行,从而实现零停机时间。这种方法支持轻松回滚功能,让您能够在出现问题时快速恢复到原始环境。您可以实施逐步转移策略,在生产工作负载完全割接之前验证新环境的性能。使用这种方法时,原始环境将保持不变并可以正常运行,直到您选择将其移除为止,因此还具有极佳的风险缓解作用。
何时需要使用蓝绿更新
在下列情况下必须使用蓝绿更新:
何时建议使用蓝绿更新
零停机时间对工作负载至关重要的生产环境尤其建议使用蓝绿更新。这种方法在您需要在转移生产工作负载之前测试新配置,确保更改满足您的性能和可靠性要求时非常有效。当快速回滚功能对运营十分重要时,尤其是在更新具有重大更改的自定义 AMI 时,可选择蓝绿更新。当您想在完全提交更改之前验证性能特征和行为,确保更新过程顺畅无误时,也非常适合使用此方法。
先决条件
在执行蓝绿更新之前,请确保您已满足下列要求:
在创建新环境之前,您需要记录现有计算环境的配置。您可以使用 AWS 管理控制台或 AWS CLI 完成此操作。
以下过程详细说明了如何执行仅更改 AMI 的蓝绿更新。您可以更新新环境的其他设置。
当您移除旧(蓝色)计算环境时,所有当前正在这些实例上运行的作业都将失败,因为这些实例将被终止。在作业定义中配置作业重试策略以自动处理这些失败。有关更多信息,请参阅 自动作业重试。
确信新环境能够正常运行后:
-
编辑作业队列以移除旧计算环境。
-
等待旧环境中所有仍在运行的作业完成运行。
-
删除旧的计算环境。
- Performing blue/green updates using the AWS 管理控制台
-
-
克隆当前计算环境
-
打开AWS Batch控制台,地址:https://console.aws.amazon.com/batch/。
-
选择您现有的计算环境。
-
选择操作,然后选择克隆。
-
对于名称,输入新计算环境的唯一名称。
选择下一步。
-
在实例配置部分中,更新 AMI 设置:
-
展开其他配置。
-
对于 EC2 配置,请在映像类型中指定新的 AMI 类型,并在映像 ID 覆盖字段中指定 AMI ID。
选择下一步。
对于网络配置,请选择下一步。
-
检查从现有环境中自动复制的其他设置。
-
选择创建计算环境。
-
等待新计算环境的状态变为 VALID。
-
更改作业队列顺序
-
在导航窗格中,选择 作业队列。
-
选择与您的现有计算环境关联的作业队列。
-
选择编辑。
-
在已连接的计算环境下,添加新的计算环境:
-
选择更新作业队列。
-
清理
-
监控新环境中的作业执行情况,确保一切按预期运行。
-
确信新环境能够正常运行后:
-
编辑作业队列以移除旧计算环境。
-
等待旧环境中所有仍在运行的作业完成运行。
-
删除旧的计算环境。
- Performing blue/green updates using the AWS CLI
-
要使用 AWS CLI 获取配置,请使用以下命令:
aws batch describe-compute-environments \
--compute-environments your-compute-environment-name
保存输出以备在创建新环境时参考。
使用现有环境中的配置创建新计算环境,不过要使用新的 AMI。示例命令结构如下:
将示例值替换为上一步中的实际配置:
cat <<EOF > ./blue-green-compute-environment.json
{
"computeEnvironmentName": "your-new-compute-environment-name",
"type": "MANAGED",
"state": "ENABLED",
"computeResources": {
"instanceRole": "arn:aws:iam::012345678901:instance-profile/ecsInstanceRole",
"type": "EC2",
"minvCpus": 2,
"desiredvCpus": 2,
"maxvCpus": 256,
"instanceTypes": [
"optimal"
],
"allocationStrategy": "BEST_FIT_PROGRESSIVE",
"ec2Configuration": [
{
"imageType": "ECS_AL2023",
"imageIdOverride": "ami-0abcdef1234567890"
}
],
"subnets": [,
"subnet-0abcdef1234567890"
],
"securityGroupIds": [
"sg-0abcdef1234567890"
]
}
}
EOF
$ aws batch create-compute-environment --cli-input-json file://./blue-green-compute-environment.json
等待新环境的状态变为可用:
aws batch describe-compute-environments \
--compute-environments your-new-compute-environment-name \
--query 'computeEnvironments[].status'
将新计算环境添加到您的作业队列:
aws batch update-job-queue \
--job-queue your-job-queue \
--compute-environment-order order=1,computeEnvironment=your-existing-environment \
order=2,computeEnvironment=your-new-compute-environment-name
完成验证后,再次更新以使新环境成为主环境:
aws batch update-job-queue \
--job-queue your-job-queue \
--compute-environment-order order=1,computeEnvironment=your-new-compute-environment-name
旧环境中的所有作业完成后禁用旧环境,然后将其删除:
aws batch update-compute-environment \
--compute-environment your-existing-environment \
--state DISABLED
aws batch delete-compute-environment \
--compute-environment your-existing-environment