

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

# 为计算环境执行 blue/green 更新
<a name="blue-green-updates"></a>

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

## 概述
<a name="blue-green-overview"></a>

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

### 何时需要 blue/green 更新
<a name="blue-green-when-required"></a>

在以下情况下，您必须使用 blue/green 更新：
+ 当您的计算环境使用`BEST_FIT`分配策略（不支持基础架构更新）时。
+ 当您的计算环境不使用*AWSServiceRoleForBatch*服务相关角色时。
+ 当您需要在不同的服务角色类型之间转换时。

### 何时建议 blue/green 更新
<a name="blue-green-when-recommended"></a>

对于零停机时间对您的工作负载至关重要的生产环境，我们建议您进行 blue/green 更新。这种方法在您需要在转移生产工作负载之前测试新配置，确保更改满足您的性能和可靠性要求时非常有效。当快速回滚功能对您的操作很重要时，尤其是在更新 AMIs 带有重大更改的自定义版本时，请选择 blue/green 更新。当您想在完全提交更改之前验证性能特征和行为，确保更新过程顺畅无误时，也非常适合使用此方法。

### 先决条件
<a name="blue-green-prerequisites"></a>

在执行 blue/green 更新之前，请确保您已具备以下条件：
+ 创建和管理计算环境的适当 [IAM 权限](IAM_policies.md)。
+ 查看和修改作业队列设置的权限。
+ 为您的作业定义配置了作业重试策略，用于处理转移期间可能出现的作业失败。有关更多信息，请参阅 [自动作业重试](job_retries.md)。
+ 拥有新计算环境的 AMI ID。您可以指定：
  + Amazon ECS 经过优化的 AMI 的最新批准版本（默认使用）。
  + 符合 Amazon ECS 容器实例 AMI 规范的自定义 AMI。您可以通过以下方式之一来指定自定义 AMI：
    + 在 EC2 配置中使用**镜像 ID 覆盖**字段。
    + 在启动模板中指定它。

    有关创建自定义的更多信息 AMIs，请参阅[教程：创建计算资源 AMI](create-batch-ami.md)。

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

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

**重要**  
当您移除旧（蓝色）计算环境时，所有当前正在这些实例上运行的作业都将失败，因为这些实例将被终止。在作业定义中配置作业重试策略以自动处理这些失败。有关更多信息，请参阅 [自动作业重试](job_retries.md)。  
确信新环境能够正常运行后：  
编辑作业队列以移除旧计算环境。
等待旧环境中所有仍在运行的作业完成运行。
删除旧的计算环境。

------
#### [ Performing blue/green updates using the Amazon Web Services 管理控制台 ]

1. 克隆当前计算环境

   1. 打开 Amazon Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.amazonaws.cn/batch/)。

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

   1. 选择**操作**，然后选择**克隆**。

   1. 对于**名称**，输入新计算环境的唯一名称。

   1. 选择**下一步**。

   1. 在**实例配置**部分中，更新 AMI 设置：

      1. 展开**其他配置**。

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

   1. 选择**下一步**。

   1. 对于**网络配置**，请选择**下一步**。

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

   1. 选择**创建计算环境**。

   1. 等待新计算环境的状态变为 `VALID`。

1. 更改作业队列顺序

   1. 在导航窗格中，选择 **作业队列**。

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

   1. 选择**编辑**。

   1. 在**已连接的计算环境**下，添加新的计算环境：
      + 为新计算环境添加一个比现有环境更高的顺序号以转移工作负载。
      + 验证新环境能够正常运行后，可以通过为新环境提供一个更低的顺序号，从而使其成为主环境。

   1. 选择**更新作业队列**。

1. 清理

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

   1. 确信新环境能够正常运行后：

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

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

      1. 删除旧的计算环境。

------
#### [ Performing blue/green updates using the Amazon CLI ]

1. 要使用获取配置 Amazon CLI，请使用以下命令：

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

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

1. 使用现有环境中的配置创建新计算环境，不过要使用新的 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
   ```

1. 等待新环境的状态变为可用：

   ```
   aws batch describe-compute-environments \
     --compute-environments your-new-compute-environment-name \
     --query 'computeEnvironments[].status'
   ```

1. 将新计算环境添加到您的作业队列：

   ```
   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
   ```

1. 完成验证后，再次更新以使新环境成为主环境：

   ```
   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
   ```

------