

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 執行基礎設施更新
<a name="infrastructure-updates"></a>

基礎設施更新會將運算環境中的執行個體取代為具有更新設定的新執行個體。此更新策略需要比擴展更新更長的時間，並且需要特定的服務角色和配置策略設定。基礎設施更新提供一種方法來修改基本運算環境組態，同時保持服務可用性。

**重要**  
基礎設施更新需要 *AWSServiceRoleForBatch* 服務連結角色，以及 `BEST_FIT_PROGRESSIVE`、 `SPOT_CAPACITY_OPTIMIZED`或 的配置策略`SPOT_PRICE_CAPACITY_OPTIMIZED`。如果您的環境不符合這些要求，請改用藍/綠更新。

## 觸發基礎設施更新的變更
<a name="infrastructure-updates-triggers"></a>

當您修改以下任何設定時， 會 AWS Batch 執行基礎設施更新。當您搭配擴展更新設定修改這些設定時，也會發生基礎設施更新。

下列設定會觸發基礎設施更新：

**運算組態**
+ `allocationStrategy` – 決定 如何 AWS Batch 選取執行個體類型。
+ `instanceTypes` – 指定要使用的 EC2 執行個體類型。
+ `bidPercentage` – Spot 執行個體的隨需價格百分比上限。
+ `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`、 或 `minvCpus`)`maxvCpus`， 會 AWS Batch 執行基礎設施更新。基礎設施更新需要比擴展更新更長的時間。

## 基礎設施更新期間的 AMI 選擇
<a name="updating-compute-environments-ami"></a>

在基礎設施更新期間，運算環境的 AMI ID 可能會變更，取決於是否在這三個設定中的任何一個中指定 AMIs。AMIs是在 `imageId`（在 中`computeResources`)、 `imageIdOverride`（在 中`ec2Configuration`) 或 中指定的啟動範本中指定`launchTemplate`。假設這些設定皆未指定 AMI IDs，且`updateToLatestImageVersion`設定為 `true`。然後， 支援的最新 Amazon ECS 最佳化 AMI AWS Batch 會用於任何基礎設施更新。

如果在其中至少一個設定中指定 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 ECS 最佳化 AMI AWS Batch。然後，更新必須移除提供 AMI IDs的設定。對於 `imageId`，這需要為該參數指定空字串。對於 `imageIdOverride`，這需要為 `ec2Configuration` 參數指定空字串。

如果 AMI ID 來自啟動範本，您可以變更為下列 AWS Batch 其中一種方式支援的最新 Amazon ECS 最佳化 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 AWS 管理主控台 ]

**注意**  
若要在主控台中僅更新至最新的 AMI 版本，請參閱 [更新 AMI 版本](managing-ami-versions.md#updating-ami-versions)。

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 在導覽窗格中，選擇**環境**，然後選擇**運算環境**索引標籤。

1. 選取要更新的運算環境。

1. 選擇**動作**，然後選擇**編輯**。

1. 在**更新行為**區段中，設定如何處理執行中的任務：
   + 選擇將 **AMI 更新至最新版本**，將 AMI 更新至最新版本。
   + 選擇**更新時立即終止任務**，以在執行更新程序時終止任務。
   + 針對**任務執行逾時**，輸入開始更新程序之前要等待的分鐘數。

1. 修改需要[基礎設施更新的一或多個設定](#infrastructure-updates-triggers)。例如：
   + **執行個體角色**
   + **使用 EC2 Spot 執行個體**
   + **允許的執行個體類型**
   + **置放群組**
   + **EC2 金鑰對**
   + **EC2 組態**
   + **啟動範本**
   + **子網路**
   + **安全群組**

1. 選擇**儲存變更**。

1. 監控運算環境狀態。環境會在更新程序`UPDATING`期間顯示。

------
#### [ Performing infrastructure updates using the AWS 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>

使用 AWS Batch 主控台監控您的基礎設施更新，以監看運算環境狀態變更為 `UPDATING`、監控執行個體替換進度，以及檢查是否有任何失敗的更新。一旦運算環境狀態為 ，更新就會成功`VAILD`。您也可以使用 CloudWatch 追蹤執行個體終止事件，並在更新期間監控任務狀態。使用 AWS CLI，使用 **describe-compute-environments**命令來檢查狀態並監控執行個體生命週期事件。