为计算环境执行蓝绿更新 - AWS Batch

为计算环境执行蓝绿更新

蓝绿更新策略通过创建与现有计算环境(蓝色)并行运行的新计算环境(绿色),来减少停机时间和风险。借助这种方法,您可以在保持现有环境正常运的行同时,逐步将工作负载转移到新环境。蓝绿更新提供了最安全的更新路径,并且适用于任何服务角色类型或分配策略。

概览

蓝绿更新具有多项优势,是生产环境更新的理想方式。在更新过程中,您的工作负载会继续运行,从而实现零停机时间。这种方法支持轻松回滚功能,让您能够在出现问题时快速恢复到原始环境。您可以实施逐步转移策略,在生产工作负载完全割接之前验证新环境的性能。使用这种方法时,原始环境将保持不变并可以正常运行,直到您选择将其移除为止,因此还具有极佳的风险缓解作用。

何时需要使用蓝绿更新

在下列情况下必须使用蓝绿更新:

  • 当您的计算环境使用 BEST_FIT 分配策略时(不支持基础设施更新)

  • 当您的计算环境不使用 AWSServiceRoleForBatch 服务相关角色时

  • 当您需要在不同的服务角色类型之间转换时

零停机时间对工作负载至关重要的生产环境尤其建议使用蓝绿更新。这种方法在您需要在转移生产工作负载之前测试新配置,确保更改满足您的性能和可靠性要求时非常有效。当快速回滚功能对运营十分重要时,尤其是在更新具有重大更改的自定义 AMI 时,可选择蓝绿更新。当您想在完全提交更改之前验证性能特征和行为,确保更新过程顺畅无误时,也非常适合使用此方法。

先决条件

在执行蓝绿更新之前,请确保您已满足下列要求:

  • 具有创建和管理计算环境所需的适当 IAM 权限

  • 具有查看和修改作业队列设置的访问权限

  • 为您的作业定义配置了作业重试策略,用于处理转移期间可能出现的作业失败。有关更多信息,请参阅 自动作业重试

  • 拥有新计算环境的 AMI ID。您可以指定:

    • 最近批准的 Amazon ECS 优化型 AMI 版本(默认使用)

    • 符合 Amazon ECS 容器实例 AMI 规范的自定义 AMI。您可以通过以下方式之一来指定自定义 AMI:

      • 使用 EC2 配置中的映像 ID 覆盖字段

      • 在启动模板中指定

      有关创建自定义 AMI 的更多信息,请参阅教程:创建计算资源 AMI

在创建新环境之前,您需要记录现有计算环境的配置。您可以使用 AWS 管理控制台或 AWS CLI 完成此操作。

注意

以下过程详细说明了如何执行仅更改 AMI 的蓝绿更新。您可以更新新环境的其他设置。

重要

当您移除旧(蓝色)计算环境时,所有当前正在这些实例上运行的作业都将失败,因为这些实例将被终止。在作业定义中配置作业重试策略以自动处理这些失败。有关更多信息,请参阅 自动作业重试

确信新环境能够正常运行后:

  1. 编辑作业队列以移除旧计算环境。

  2. 等待旧环境中所有仍在运行的作业完成运行。

  3. 删除旧的计算环境。

Performing blue/green updates using the AWS 管理控制台
  1. 克隆当前计算环境

    1. 打开AWS Batch控制台,地址:https://console.aws.amazon.com/batch/

    2. 选择您现有的计算环境。

    3. 选择操作,然后选择克隆

    4. 对于名称,输入新计算环境的唯一名称。

    5. 选择下一步

    6. 实例配置部分中,更新 AMI 设置:

      1. 展开其他配置

      2. 对于 EC2 配置,请在映像类型中指定新的 AMI 类型,并在映像 ID 覆盖字段中指定 AMI ID。

    7. 选择下一步

    8. 对于网络配置,请选择下一步

    9. 检查从现有环境中自动复制的其他设置。

    10. 选择创建计算环境

    11. 等待新计算环境的状态变为 VALID

  2. 更改作业队列顺序

    1. 在导航窗格中,选择 作业队列

    2. 选择与您的现有计算环境关联的作业队列。

    3. 选择编辑

    4. 已连接的计算环境下,添加新的计算环境:

      • 为新计算环境添加一个比现有环境更高的顺序号以转移工作负载。

      • 验证新环境能够正常运行后,可以通过为新环境提供一个更低的顺序号,从而使其成为主环境。

    5. 选择更新作业队列

  3. 清理

    1. 监控新环境中的作业执行情况,确保一切按预期运行。

    2. 确信新环境能够正常运行后:

      1. 编辑作业队列以移除旧计算环境。

      2. 等待旧环境中所有仍在运行的作业完成运行。

      3. 删除旧的计算环境。

Performing blue/green updates using the AWS CLI
  1. 要使用 AWS CLI 获取配置,请使用以下命令:

    aws batch describe-compute-environments \ --compute-environments your-compute-environment-name

    保存输出以备在创建新环境时参考。

  2. 使用现有环境中的配置创建新计算环境,不过要使用新的 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
  3. 等待新环境的状态变为可用:

    aws batch describe-compute-environments \ --compute-environments your-new-compute-environment-name \ --query 'computeEnvironments[].status'
  4. 将新计算环境添加到您的作业队列:

    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
  5. 完成验证后,再次更新以使新环境成为主环境:

    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