为计算环境执行 blue/green 更新 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为计算环境执行 blue/green 更新

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

概览

Blue/Green 更新具有多种优势,使其成为生产环境的理想之选。它们通过在更新过程中保持您的工作负载持续运行,从而实现零停机时间。该方法支持轻松的回滚功能,允许您在出现问题时快速恢复到原始环境。您可以实施渐进过渡策略,在完全切换生产工作负载之前验证新环境的性能。此方法还提供了极好的风险缓解效果,因为在您选择将其移除之前,原始环境保持不变且可以正常运行。

何时需要 blue/green 更新

在以下情况下,您必须使用 blue/green 更新:

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

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

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

Blue/green updates are particularly recommended for production environments where zero downtime is critical for your workloads. This approach works well when you need to test new configurations before transitioning production workloads, ensuring that changes meet your performance and reliability requirements. Choose blue/green在快速回滚功能对您的操作很重要时进行更新,尤其是在您要更新 AMIs 带有重大更改的自定义功能时。当您想在完全提交更改之前验证性能特征和行为时,此方法也是理想的选择,从而使您对更新过程充满信心。

先决条件

在执行 blue/green 更新之前,请确保您已具备以下条件:

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

  • 查看和修改作业队列设置的权限

  • 为您的任务定义配置的作业重试策略,用于处理过渡期间可能出现的故障。有关更多信息,请参阅 自动任务重试

  • 新计算环境的 AMI ID。这可以是:

    • 经过批准的 Amazon ECS 优化版 AMI 的最新版本(默认使用)

    • 符合亚马逊 ECS 容器实例 AMI 规范的自定义 AMI。使用自定义 AMI 时,您可以通过以下方式之一进行指定:

      • 在 EC2配置中使用镜像 ID 覆盖字段

      • 在启动模板中指定它

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

在创建新环境之前,您需要记录现有计算环境的配置。您可以使用 Amazon Web Services Management Console 或来执行此操作 Amazon CLI。

注意

以下过程详细介绍了如何执行仅更改 AMI 的 blue/green 更新。您可以更新新环境的其他设置。

重要

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

一旦你对新环境充满信心:

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

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

  3. 删除旧的计算环境。

Performing blue/green updates using the Amazon Web Services Management Console
  1. 克隆您当前的计算环境

    1. 打开 Amazon 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 Amazon CLI
  1. 要使用获取配置 Amazon 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