

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

# 執行運算環境的藍/綠更新
<a name="blue-green-updates"></a>

藍/綠更新是一種更新策略，可透過與現有的運算環境 （藍色） 一起建立新的運算環境 （綠色） 來減少停機時間和風險。此方法可讓您逐步將工作負載轉換至新環境，同時保持現有環境的運作。藍/綠更新提供最安全的更新路徑，並使用任何服務角色類型或配置策略。

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

藍/綠更新提供多種優勢，使其非常適合生產環境。它們透過在更新過程中持續執行工作負載，提供*零停機時間*。此方法可*讓您輕鬆復原*功能，讓您可以在發生問題時快速還原至原始環境。您可以實作*逐步轉換*策略，在完全切換生產工作負載之前驗證新環境的效能。此方法也提供絕佳的*風險緩解*，因為在您選擇移除它之前，原始環境保持不變且正常運作。

### 需要藍/綠更新時
<a name="blue-green-when-required"></a>

在下列情況下，您必須使用藍/綠更新：
+ 當您的運算環境使用`BEST_FIT`配置策略時 （不支援基礎設施更新）。
+ 當您的運算環境不使用 *AWSServiceRoleForBatch* 服務連結角色時。
+ 當您需要在不同的服務角色類型之間轉換時。

### 建議藍/綠更新時
<a name="blue-green-when-recommended"></a>

我們建議針對生產環境進行藍/綠更新，其中零停機時間對您的工作負載至關重要。當您需要在轉換生產工作負載之前測試新組態，以確保變更符合您的效能和可靠性需求時，此方法非常有效。當快速復原功能對您的操作很重要時，請選擇藍/綠更新，尤其是當您更新具有重大變更AMIs 時。當您想要在完全承諾變更之前驗證效能特性和行為，以提供更新程序的信心時，此方法也很理想。

### 先決條件
<a name="blue-green-prerequisites"></a>

執行藍/綠更新之前，請確定您已：
+ 建立和管理運算環境的適當 [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)。

建立新環境之前，您需要記錄現有運算環境的組態。您可以使用 AWS 管理主控台 或 來執行此操作 AWS CLI。

**注意**  
下列程序詳細說明如何執行只變更 AMI 的藍/綠更新。您可以更新新環境的其他設定。

**重要**  
當您移除舊 （藍色） 運算環境時，這些執行個體上目前執行的任何任務都會失敗，因為執行個體將會終止。在任務定義中設定任務重試策略，以自動處理這些失敗。如需詳細資訊，請參閱[自動化任務重試](job_retries.md)。  
對新環境有信心之後：  
編輯任務佇列以移除舊的運算環境。
等待舊環境中任何執行中的任務完成。
刪除舊的運算環境。

------
#### [ Performing blue/green updates using the AWS 管理主控台 ]

1. 複製您目前的運算環境

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

   1. 選取您現有的運算環境。

   1. 選擇**動作**，然後選擇**複製**。

   1. 在**名稱**中，輸入新運算環境的唯一名稱。

   1. 選擇**下一步**。

   1. 在**執行個體組態**區段中，更新 AMI 設定：

      1. 展開 **Additional configuration (其他組態)**。

      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 AWS CLI ]

1. 若要使用 取得組態 AWS 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}}
   ```

------