

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

# 执行基础设施更新
<a name="infrastructure-updates"></a>

基础设施更新会将计算环境中的实例替换为具有更新后设置的新实例。此更新策略需要的时间比扩缩更新更长，并且需要特定的服务角色和分配策略设置。基础设施更新是一种在保持服务可用性的同时修改基本计算环境配置的方法。

**重要**  
基础架构更新需要*AWSServiceRoleForBatch*服务相关角色和`BEST_FIT_PROGRESSIVE``SPOT_CAPACITY_OPTIMIZED`、或`SPOT_PRICE_CAPACITY_OPTIMIZED`的分配策略。如果您的环境不符合这些要求，请改用 blue/green 更新。

## 触发基础设施更新的更改
<a name="infrastructure-updates-triggers"></a>

修改以下任何设置时，将 Amazon Batch 执行基础架构更新。当您同时修改这些设置以及扩缩更新设置时，也会执行基础设施更新。

以下设置会触发基础设施更新：

**计算配置**
+ `allocationStrategy`— 确定如何 Amazon Batch 选择实例类型。
+ `instanceTypes`：指定要使用的 EC2 实例类型。
+ `bidPercentage`：竞价型实例的最大按需价格百分比。
+ `type`：计算环境类型（`EC2` 或 `SPOT`）。

**AMI 和启动配置**
+ `imageId`：要用于实例的特定 AMI。
+ `ec2Configuration`：EC2 配置，包括 `imageIdOverride`。
+ `launchTemplate`：EC2 启动模板设置。
+ `ec2KeyPair`：用于实例访问的 SSH 密钥对。
+ `updateToLatestImageVersion`：AMI 自动更新设置。

**网络和安全性**
+ `subnets`：所启动的实例的 VPC 子网（适用于 EC2 计算环境）。
+ `securityGroupIds`：实例的安全组（适用于 EC2 计算环境）。
+ `placementGroup`：EC2 置放群组配置。

**其他设置**
+ `instanceRole`：用于 EC2 实例的 IAM 角色。
+ `tags`：应用到 EC2 实例的标签。

**重要**  
如果您修改了任何基础设施更新设置以及扩缩更新设置（例如 `desiredvCpus`、`maxvCpus`、或 `minvCpus`），则 Amazon Batch 会执行基础设施更新。基础设施更新需要是时间比扩缩更新更长。

## 基础设施更新期间的 AMI 选择
<a name="updating-compute-environments-ami"></a>

在基础设施更新期间，计算环境的 AMI ID 可能会发生变化，具体取决于 AMIs 是否在这三个设置中指定。 AMIs 在`imageId`（in`computeResources`）、`imageIdOverride`（in）或中`ec2Configuration`指定的启动模板中指定`launchTemplate`。假设在这些设置中 IDs 均未指定 AMI，且`updateToLatestImageVersion`设置为`true`。然后，将支持的最新 Amazon ECS 优化 Amazon Batch 的 AMI 用于任何基础设施更新。

如果至少在其中一个设置中指定了 AMI ID，则更新将取决于提供了更新前使用的 AMI ID 的设置。创建计算环境时，选择 AMI ID 的优先级首先是启动模板，然后是`imageId`设置，最后是`imageIdOverride`设置。但是，如果使用的 AMI ID 来自启动模板，则更新`imageId`或`imageIdOverride`设置都不会更新 AMI ID。更新从启动模板中选择的 AMI ID 的唯一方法是更新启动模板。如果启动模板的版本参数为`$Default`或`$Latest`，则会评估指定启动模板的默认版本或最新版本。如果默认选择了不同的 AMI ID 或选择了最新版本的启动模板，则将在更新中使用该 AMI ID。

如果未使用启动模板来选择 AMI ID，则会使用`imageId`或`imageIdOverride`参数中指定的 AMI ID。如果同时指定了这两个参数，则会使用`imageIdOverride`参数中指定的 AMI ID。

假设计算环境使用由`imageId`、`imageIdOverride`或`launchTemplate`参数指定的 AMI ID，并且要使用由 Amazon Batch支持的最新 Amazon ECS 优化 AMI。然后，更新必须删除提供 AMI 的设置 IDs。对于`imageId`，需要为该参数指定一个空字符串。对于`imageIdOverride`，需要为`ec2Configuration`参数指定一个空字符串。

如果 AMI ID 来自启动模板，则可以通过以下任一方式更改为支持的最新 Amazon ECS 优化 Amazon Batch 的 AMI：
+ 通过为`launchTemplateId`或`launchTemplateName`参数指定一个空字符串，删除启动模板。这将删除整个启动模板，而不仅仅是 AMI ID。
+ 如果启动模板的更新版本未指定 AMI ID，则必须将`updateToLatestImageVersion`参数设置为`true`。

## 更新期间的作业处理
<a name="infrastructure-updates-job-handling"></a>

使用更新策略配置在基础设施更新期间如何处理正在运行的作业。如果设置为 `terminateJobsOnUpdate=true`，则正在运行的作业将立即终止，`jobExecutionTimeoutMinutes` 设置将被忽略，并且更新将在可以替换实例时立即继续执行。如果设置为 `terminateJobsOnUpdate=false`，则正在运行的作业将在指定的超时期限内继续运行，默认超时期限为 30 分钟，超过超时期限的作业将被终止。

**注意**  
要重试在更新期间被终止的作业，请配置作业重试策略。有关更多信息，请参阅 [自动作业重试](job_retries.md)。

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

**注意**  
要在控制台中更新到最新 AMI 版本，请参阅[更新 AMI 版本](managing-ami-versions.md#updating-ami-versions)。

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

1. 在导航窗格中，选择**环境**，然后选择**计算环境**选项卡。

1. 选择要更新的计算环境。

1. 选择**操作**，然后选择**编辑**。

1. 在**更新行为**部分中，配置如何处理正在运行的作业：
   + 选择**将 AMI 更新到最新版本**，以将 AMI 更新为最新版本。
   + 选择**更新时立即终止作业**，以在更新进程运行时终止作业。
   + 对于**作业执行超时**，输入在更新进程启动之前要等待的分钟数。

1. 修改一项或多项[要求使用基础设施更新的设置](#infrastructure-updates-triggers)。例如：
   + **实例角色**
   + **使用 EC2 竞价型实例**
   + **允许的实例类型**
   + **置放群组**
   + **EC2 密钥对**
   + **EC2 配置**
   + **启动模板**
   + **子网**
   + **安全组**

1. 选择**保存更改**。

1. 监控计算环境状态。环境将在更新过程中显示 `UPDATING` 状态。

------
#### [ Performing infrastructure updates using the Amazon CLI ]

使用 **update-compute-environment** 命令并更改一项或多项[要求使用基础设施更新的设置](#infrastructure-updates-triggers)。以下三个示例是常见的基础设施操作。
+ 此示例会更新实例类型并配置更新策略：

  ```
  aws batch update-compute-environment \
      --compute-environment your-compute-environment-name \
      --compute-resources instanceTypes=default_x86_64 \
      --update-policy terminateJobsOnUpdate=false,jobExecutionTimeoutMinutes=30
  ```
+ 此示例会更新 VPC 子网和安全组：

  ```
  aws batch update-compute-environment \
      --compute-environment your-compute-environment-name \
      --compute-resources subnets=subnet-abcd1234,subnet-efgh5678 securityGroupIds=sg-abcd1234 \
      --update-policy terminateJobsOnUpdate=true
  ```
+ 此示例会自动更新到最新版本的 Amazon ECS 优化型 AMI：

  ```
  aws batch update-compute-environment \
      --compute-environment your-compute-environment-name \
      --compute-resources updateToLatestImageVersion=true \
      --update-policy terminateJobsOnUpdate=false,jobExecutionTimeoutMinutes=60
  ```

------

## 监控基础设施更新
<a name="infrastructure-updates-monitoring"></a>

使用 Amazon Batch 控制台监控您的基础设施更新，以观察计算环境状态的变化`UPDATING`，监控实例更换进度，并检查是否有任何失败的更新。一旦计算环境状态变为 `VAILD`，即表示更新成功。您还可以使用 CloudWatch 来跟踪实例终止事件和监控更新期间的任务状态。使用 Amazon CLI，使用**describe-compute-environments**命令来检查状态和监控实例生命周期事件。