

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

# `INVALID` 计算环境
<a name="invalid_compute_environment"></a>

您可能错误地配置了托管计算环境。如果是这样，计算环境就会进入`INVALID`状态，无法接受作业放置。以下各节描述了可能的原因以及如何根据原因进行故障排除。

**重要**  
AWS Batch 代表您并在您的账户中创建和管理多个 AWS 资源，包括亚马逊 EC2 启动模板、亚马逊 EC2 Auto Scaling 群组、亚马逊 EC2 竞价队列和亚马逊 ECS 集群。这些托管式资源均经过专门配置，以确保 AWS Batch 的最优运行状态。除非 AWS Batch 文档中明确说明，否则手动修改这些由 Batch 托管的资源可能会导致 `INVALID` 计算环境中的异常行为、不理想的实例扩缩行为、工作负载处理延迟，或产生意外的成本。该服务无法确定性地支持这些手动修改。 AWS Batch 请务必使用支持的 Batch APIs 或 Batch 控制台来管理您的计算环境。

## 角色名称或 ARN 不正确
<a name="invalid_service_role_arn"></a>

计算环境进入`INVALID`状态的最常见原因是 AWS Batch 服务角色或 Amazon EC2 Spot 队列角色的名称或亚马逊资源名称 (ARN) 不正确。这在使用 AWS CLI 或创建的计算环境中更为常见 AWS SDKs。当您在中创建计算环境时 AWS 管理控制台， AWS Batch 可以帮助您选择正确的服务或 Spot 队列角色。但是，假设您手动输入了名称或 ARN，但输入不正确。然后，生成的计算环境也是`INVALID`。

但是，假设在 AWS CLI 命令或 SDK 代码中手动输入 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)`

对于无效的竞价型实例集角色：

`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 或时才指定 IAM 角色的名称 AWS SDKs，而不是完整的 Amazon 资源名称 (ARN)。根据创建角色的方式，ARN 可能包含`aws-service-role`路径前缀。例如，如果使用[将服务相关角色用于 AWS Batch](using-service-linked-roles.md)中的程序手动创建 AWS Batch 服务角色，服务角色 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 或时仅指定 IAM 角色的名称 AWS SDKs，则 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. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 在导航栏中，选择 AWS 区域 要使用的。

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

1. 在**计算环境**页面上，选择要编辑的计算环境旁边的单选按钮，然后选择**编辑**。

1. 在**更新计算环境**页面上，对于**服务角色**，请选择要用于计算环境的 IAM 角色。 AWS Batch 控制台仅显示与计算环境具有正确信任关系的角色。
**提示**  
有关如何创建服务相关角色的说明，请参阅[将角色用于 AWS Batch](using-service-linked-roles-batch-general.md)。

1. 选择**保存**以更新计算环境。