

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

# `INVALID` 運算環境
<a name="invalid_compute_environment"></a>

您可能未正確設定受管運算環境。如果您這麼做，運算環境會進入 `INVALID` 狀態，且無法接受要放置的任務。下列各節說明可能的原因，以及如何根據原因進行故障診斷。

**重要**  
AWS Batch 會代表您和在您的帳戶中建立和管理多個 AWS 資源，包括 Amazon EC2 啟動範本、Amazon EC2 Auto Scaling 群組、Amazon EC2 Spot 機群和 Amazon ECS 叢集。這些受管資源經過專門設定，以確保最佳 AWS Batch 操作。除非文件中明確說明 AWS Batch ，否則手動修改這些批次受管資源可能會導致意外行為，導致`INVALID`運算環境、次佳執行個體擴展行為、延遲工作負載處理或意外成本。 AWS Batch 服務無法確定是否支援這些手動修改。一律使用支援的 Batch APIs或 Batch 主控台來管理您的運算環境。

## 不正確的角色名稱或 ARN
<a name="invalid_service_role_arn"></a>

運算環境進入 `INVALID` 狀態的最常見原因是 AWS Batch 服務角色或 Amazon EC2 Spot Fleet 角色的名稱或 Amazon Resource Name (ARN) 不正確。這在使用 AWS CLI 或 AWS SDKs 建立的運算環境中更為常見。當您在 中建立運算環境時 AWS 管理主控台， AWS Batch 可協助您選擇正確的服務或 Spot 機群角色。不過，假設您手動輸入名稱或 ARN，並不正確地輸入。然後，產生的運算環境也是 `INVALID`。

不過，假設您在 命令或 SDK 程式碼中 AWS CLI 手動輸入 IAM 資源的名稱或 ARN。在此情況下， AWS Batch 無法驗證字串。反之， AWS Batch 必須接受錯誤的值，並嘗試建立環境。如果 AWS Batch 無法建立環境，環境會移至 `INVALID` 狀態，而您會看到下列錯誤。

如為無效的服務角色：

`CLIENT_ERROR - Not authorized to perform sts:AssumeRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: dc0e2d28-2e99-11e7-b372-7fcc6fb65fe7)`

如為無效的 Spot Fleet 角色：

`CLIENT_ERROR - Parameter: SpotFleetRequestConfig.IamFleetRole is invalid. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: 331205f0-5ae3-4cea-bac4-897769639f8d) Parameter: SpotFleetRequestConfig.IamFleetRole is invalid`

此問題的一個常見原因如下。您只能在使用 AWS CLI 或 AWS SDKs 時指定 IAM 角色的名稱，而不是完整的 Amazon Resource Name (ARN)。根據您建立角色的方式，ARN 可能包含`aws-service-role`路徑字首。例如，如果您使用 中的程序手動建立 AWS Batch 服務角色[使用 的服務連結角色 AWS Batch](using-service-linked-roles.md)，您的服務角色 ARN 可能如下所示。

```
arn:aws:iam::123456789012:role/AWSBatchServiceRole
```

不過，如果您今天在主控台初次執行精靈中建立了服務角色，您的服務角色 ARN 可能如下所示。

```
arn:aws:iam::123456789012:role/aws-service-role/AWSBatchServiceRole
```

如果您將 AWS Batch 服務層級政策 (`AWSBatchServiceRole`) 連接至非服務角色，也會發生此問題。例如，在此案例中，您可能會收到類似以下的錯誤訊息：

```
CLIENT_ERROR - User: arn:aws:sts::account_number:assumed-role/batch-replacement-role/aws-batch is not 
   authorized to perform: action on resource ...
```

若要解決此問題，請執行下列其中一項操作。
+ 當您建立 AWS Batch 運算環境時，請使用服務角色的空字串。
+ 以下列格式指定服務角色：`arn:aws:iam::account_number:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch`。

當您只在使用 AWS CLI 或 AWS SDKs 時指定 IAM 角色的名稱時， 會 AWS Batch 假設您的 ARN 不使用`aws-service-role`路徑字首。因此，我們建議您在建立運算環境時，為 IAM 角色指定完整的 ARN。

若要修復以此方式設定錯誤的運算環境，請參閱 [修復`INVALID`運算環境](#repairing_invalid_compute_environment)。

## 修復`INVALID`運算環境
<a name="repairing_invalid_compute_environment"></a>

當您的運算環境處於 `INVALID` 狀態時，請更新它以修復無效的 參數。對於 [不正確的角色名稱或 ARN](#invalid_service_role_arn)，請使用正確的服務角色更新運算環境。

**修復設定錯誤的運算環境**

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

1. 從導覽列中，選取要 AWS 區域 使用的 。

1. 在導覽窗格中，選擇 **Compute environments** (運算環境)。

1. 在 **Compute environments** (運算環境) 頁面，選擇要編輯的運算環境旁的選項按鈕，然後選擇 **Edit** (編輯)。

1. 在**更新運算環境**頁面上，針對**服務角色**，選擇要與運算環境搭配使用的 IAM 角色。 AWS Batch 主控台只會顯示與運算環境有正確信任關係的角色。
**提示**  
如需如何建立服務連結角色的指示，請參閱 [使用 的角色 AWS Batch](using-service-linked-roles-batch-general.md)。

1. 選擇 **Save** (儲存)，更新運算環境。