

# Amazon ECS 故障排除
<a name="troubleshooting"></a>

您可能需要解决与负载均衡器、任务、服务或容器实例相关的问题。本章将帮助您查找来自 Amazon ECS 容器代理、容器实例上的 Docker 进程守护程序和 Amazon ECS 控制台中的服务事件日志的诊断信息。

有关已停止任务的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  解决已停止任务错误。  |  [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)  | 
|  查看已停止任务错误。  |  [解决 Amazon ECS 已停止任务错误](resolve-stopped-errors.md)  | 
|  检查已停止任务错误代码。  |  [Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)  | 
|  检查 CannotPullContainer 任务错误。  |  [Amazon ECS 中的 CannotPullContainer 任务错误](task_cannot_pull_image.md)  | 
| 查看任务 IAM 角色请求。 | [查看针对 Amazon ECS 任务的 IAM 角色请求](task_iam_roles-logs.md) | 
|  使用任务事件排查问题。  |  [控制台中的 Amazon ECS 事件捕获](task-lifecycle-events.md)  | 

有关服务错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  查看服务事件消息。  |  [查看 Amazon ECS 服务事件消息](service-event-messages.md)  | 
|  检查服务事件消息。  |  [Amazon ECS 服务事件消息](service-event-messages-list.md)  | 
|  检查负载均衡器问题。  |  [对 Amazon ECS 中的服务负载均衡器进行故障排除](troubleshoot-service-load-balancers.md)  | 
|  检查服务自动扩缩问题。  |  [对 Amazon ECS 中的服务自动扩缩进行故障排除](troubleshoot-service-auto-scaling.md)  | 

有关任务定义错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  解决任务定义内存错误。  |  [排查 Amazon ECS 任务定义 CPU 或内存无效错误](task-cpu-memory-error.md)  | 

有关 Amazon ECS 代理错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  查看 Amazon ECS 容器代理日志。  |  [查看 Amazon ECS 容器代理日志](logs.md)  | 
|  了解如何收集 Amazon ECS 日志。  |  [使用 Amazon ECS 日志收集器收集容器日志](ecs-logs-collector.md)  | 
|  使用 Amazon ECS 代理检索诊断详细信息。  |  [使用代理自检来检索 Amazon ECS 诊断详细信息](introspection-diag.md)  | 

有关 Docker 错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  使用 Docker 诊断。  |  [Amazon ECS 中的 Docker 诊断](docker-diags.md)  | 
|  开启 Docker 调试模式。  |  [在 Amazon ECS 中配置 Docker 进程守护程序的详细输出](docker-debug-mode.md)  | 
|  排查 Docker API 错误 500 问题。  |  [对 Amazon ECS 中的 Docker `API error (500): devmapper` 进行故障排除](CannotCreateContainerError.md)  | 

有关 ECS Exec 和Amazon ECS Anywhere 错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  排查 ECS Exec 问题。  |  [排查 Amazon ECS Exec 问题](ecs-exec-troubleshooting.md)  | 
|  排查 Amazon ECS Anywhere 问题。  |  [排查 Amazon ECS Anywhere 问题](ecs-anywhere-troubleshooting.md)  | 

有关将 Amazon EBS 卷附加到 Amazon ECS 任务时出现的问题的信息，请参阅以下内容：


| Action | 了解详情 | 
| --- | --- | 
|  排查将 Amazon EBS 卷附加到 Amazon ECS 任务时出现的问题。  |  [排查 Amazon ECS 任务挂载 Amazon EBS 卷的问题](troubleshoot-ebs-volumes.md)  | 
|  Amazon EBS 卷附加到 Amazon ECS 任务的状态原因。  |  [Amazon EBS 卷附加到 Amazon ECS 任务的状态原因](troubleshoot-ebs-volumes-scenarios.md)  | 

有关将共享的 AWS Cloud Map 命名空间与 Amazon ECS Service Connect 结合使用时出现的问题的信息，请参阅以下内容之一：


| Action | 了解详情 | 
| --- | --- | 
|  排查将 Amazon ECS Service Connect 与共享的 AWS Cloud Map 命名空间结合使用时出现的问题。  |  [排查将 Amazon ECS Service Connect 与共享的 AWS Cloud Map 命名空间结合使用时出现的问题](service-connect-shared-namespaces-troubleshooting.md)  | 

有关节流问题的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  了解 Fargate 节流配额。  |  [AWS Fargate 节流配额](throttling.md)  | 
|  了解 Amazon ECS 节流的最佳实践。  |  [处理 Amazon ECS 节流问题](operating-at-scale-dealing-with-throttles.md)  | 

有关 API 错误的信息，请参阅以下章节之一。


| Action | 了解详情 | 
| --- | --- | 
|  解决 API 错误。  |  [Amazon ECS API 失败原因](api_failures_messages.md)  | 

有关人工智能驱动的故障排除的信息，请参阅以下内容：


| Action | 了解详情 | 
| --- | --- | 
|  使用 Amazon Q 开发者版在控制台中进行故障排除。  |  [使用 Amazon Q 开发者版进行问题排查](troubleshooting-with-Q.md)  | 
|  使用 Amazon ECS MCP 服务器借助人工智能助手进行故障排除。  |  [Amazon ECS MCP 服务器](ecs-mcp-introduction.md)  | 

# 解决 Amazon ECS 已停止任务错误
<a name="resolve-stopped-errors"></a>

当任务启动失败时，控制台和 `describe-tasks` 输出参数（`stoppedReason` 和 `stopCode`）中会显示一条错误消息。

您可以在控制台中查看一小时内已停止的任务。要查看已停止的任务，必须更改此筛选条件选项。有关更多信息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

以下页面提供了有关已停止任务的信息。
+ 了解已停止任务错误消息的更改。

  [Amazon ECS 已停止任务错误消息更新](stopped-tasks-error-messages-updates.md)
+ 查看已停止的任务，从而获取有关原因的信息。

  [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)
+ 了解已停止任务错误消息以及导致错误的可能原因。

  [Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)
+ 了解如何验证已停止任务连接并修正错误。

  [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)

# Amazon ECS 已停止任务错误消息更新
<a name="stopped-tasks-error-messages-updates"></a>

从 2024 年 6 月 14 日起，Amazon ECS 团队将更改已停止任务错误消息，如下表所述。`stopCode` 不会更改。如果您的应用程序依赖于确切的错误消息字符串，则必须使用新字符串更新应用程序。如需有关疑问或问题的帮助，请联系 AWS 支持。

**注意**  
我们建议您不要依赖错误消息进行自动化，因为错误消息可能会随时更改。

## CannotPullContainerError
<a name="cannot-pull-container-error-changes"></a>


| 旧的错误消息。 | 新的错误消息 | 
| --- | --- | 
| CannotPullContainerError：来自进程守护程序的错误响应：repository 拉取访问被拒绝，该存储库不存在或者可能需要“docker 登录”：已拒绝：用户：roleARN | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/stopped-tasks-error-messages-updates.html)  | 
|  CannotPullContainerError：来自进程守护程序的错误响应：获取 imageURI：net/http：在等待连接期间请求被取消 |  CannotPullContainerError：任务无法拉取映像。请检查网络配置。来自进程守护程序的错误响应：获取 image：net/http：在等待连接期间请求被取消（在等待标头时超出了 Client.Timeout） | 
| CannotPullContainerError: ref pull has been retried 5 time(s): failed to copy: httpReadSeeker: failed open: failed to do request: Get registry-uri: dial tcp <ip>:<port> i/o timeout | CannotPullContainerError: The task cannot pull image-uri from the registry registry-uri. 任务与注册表之间存在连接问题。Check your task network configuration. : failed to copy: httpReadSeeker: failed open: failed to do request: Get registry-uri: dial tcp <ip>:<port> i/o timeout | 

## ResourceNotFoundException
<a name="resourcenotfound-error-changes"></a>


| 旧的错误消息。 | 新的错误消息 | 
| --- | --- | 
| 正在从 region 区域中的 AWS Secrets Manager 获取密钥数据：密钥 sercretARN：ResourceNotFoundException：Secrets Manager 找不到指定的密钥。 | ResourceNotFoundException：任务未能在 AWS Secrets Manager 中检索到 ARN 为“sercretARN”的密钥。请检查指定区域中是否存在该密钥。ResourceNotFoundException：正在从 region 区域中的 AWS Secrets Manager 获取密钥数据：密钥 sercretARN：ResourceNotFoundException：Secrets Manager 找不到指定的密钥。 | 

## ResourceInitializationError
<a name="resourceinitialization-error-changes"></a>


| 旧的错误消息。 | 新的错误消息 | 
| --- | --- | 
| ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr.us-east-1.amazonaws.com/": dial tcp <ip>:<port>: i/o timeout. 请检查任务网络配置。 | ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. 请检查任务网络配置。RequestError: send request failed caused by: Post "https://api.ecr.us-east-1.amazonaws.com": dial tcp <ip>:<port>: i/o timeout | 
| ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secrets from ssm: service call has been retried 5 time(s): RequestCanceled: request context canceled caused by: context deadline exceeded | ResourceInitializationError: unable to pull secrets or registry auth: unable to retrieve secrets from ssm: The task cannot pull secrets from AWS Systems Manager. 任务与 AWS Systems Manager Parameter Store 之间存在连接问题。请检查任务网络配置。RequestCanceled: request context canceled caused by: context deadline exceeded | 
| ResourceInitializationError: failed to download env files: file download command: non empty error stream: RequestCanceled: request context canceled caused by: context deadline exceeded | ResourceInitializationError: failed to download env files: The task can't download the environment variable files from Amazon S3. 任务与 Amazon S3 之间存在连接问题。Check your task network configuration. service call has been retried 5 time(s): RequestCanceled: request context canceled caused by: context deadline exceeded | 
| ResourceInitializationError: failed to validate logger args::signal:killed | ResourceInitializationError: failed to validate logger args: The task cannot find the Amazon CloudWatch log group defined in the task definition. 任务与 Amazon CloudWatch 之间存在连接问题。Check your network configuration. : signal: killed | 
| ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed | ResourceInitializationError: unable to pull secrets or registry auth: Check your task network configuration. : signal: killed | 

# 查看 Amazon ECS 已停止任务错误
<a name="stopped-task-errors"></a>

如果您在启动任务时遇到问题，则您的任务可能会因应用程序或配置错误而停止。例如，在您运行任务时，该任务显示 `PENDING` 状态，然后消失。

 如果您的任务由 Amazon ECS 服务创建，则 Amazon ECS 为维护该服务而采取的操作将在服务事件中发布。您可以在 AWS 管理控制台、AWS CLI、AWS 软件开发工具包、Amazon ECS API 或使用软件开发工具包和 API 的工具中查看事件。这些事件包括 Amazon ECS 停止和替换任务，因为任务中的容器已停止运行，或者 Elastic Load Balancing 的运行状况检查过多失败。

如果您的任务在 Amazon EC2 或外部计算机的容器实例上运行，您还可以查看容器运行时和 Amazon ECS 代理的日志。这些日志位于主机 Amazon EC2 实例或外部计算机上。有关更多信息，请参阅 [查看 Amazon ECS 容器代理日志](logs.md)。

## 过程
<a name="view-stopped-errors-procedure"></a>

------
#### [ Console ]

**AWS 管理控制台**

使用以下步骤可以通过控制台检查已停止任务的错误。要查看已停止的任务，必须更改此筛选条件选项。

已停止任务仅在控制台中显示 1 小时。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 在 **Clusters**（集群）页面上，选择集群。

1. 在 **Cluster : *name***（集群名称：名称）页面上，选择 **Tasks**（任务）选项卡。

1. 将筛选器配置为显示已停止的任务。对于**筛选所需状态**，请选择**已停止**。

   **已停止**选项显示已停止的任务，**任意所需状态**显示您的所有任务。

1. 选择要检查的已停止任务。

1. 在已停止任务所在行的**上次状态**列中，选择**已停止**。

   弹出窗口显示停止的原因。

------
#### [ AWS CLI ]

1. 列出集群中停止的任务。输出包含您需要对任务进行描述的 Amazon 资源名称（ARN）。

   ```
   aws ecs list-tasks \
        --cluster cluster_name \
        --desired-status STOPPED \
        --region region
   ```

1. 描述已停止任务以检索相关信息。有关更多信息，请参阅《AWS Command Line Interface API 参考》中的 [describe-tasks](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-tasks.html)**。

   ```
   aws ecs describe-tasks \
        --cluster cluster_name \
        --tasks arn:aws:ecs:region:account_id:task/cluster_name/task_ID \
        --region region
   ```

使用以下输出参数。
+ `stopCode` – 停止代码指示任务停止的原因，例如 ResourceInitializationError
+ `StoppedReason` – 任务停止的原因。
+ `reason`（在 `containers` 结构中）– 原因提供了有关已停止容器的更多详细信息。

------

## 后续步骤
<a name="additional-resources"></a>

查看已停止的任务，从而获取有关原因的信息。有关更多信息，请参阅 [Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)。

# Amazon ECS 已停止任务错误消息
<a name="stopped-task-error-codes"></a>

以下是任务意外停止时，您可能会收到的可能错误消息。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

**提示**  
您可以将 [Amazon ECS MCP 服务器](ecs-mcp-introduction.md)与人工智能助手结合使用，通过自然语言分析任务失败和容器日志。

已停止的任务错误代码有一个与其关联的类别，例如“ResourceInitializationError”。有关每个类别的更多信息，请参阅以下文档：


| 类别 | 了解详情 | 
| --- | --- | 
|  TaskFailedToStart  |  [排查 Amazon ECS TaskFailedToStart 错误](failed-to-start-error.md)  | 
|  ResourceInitializationError  |  [排查 Amazon ECS ResourceInitializationError 错误](resource-initialization-error.md)  | 
| ResourceNotFoundException |  [排查 Amazon ECS ResourceNotFoundException 错误](resource-not-found-error.md) | 
|  SpotInterruptionError  |  [排查 Amazon ECS SpotInterruption 错误](spot-interruption-errors.md)  | 
|  InternalError  |  [排查 Amazon ECS InternalError 错误](internal-error.md)  | 
|  OutOfMemoryError  |  [排查 Amazon ECS OutOfMemoryError 错误](out-of-memory.md)  | 
|  ContainerRuntimeError  |  [排查 Amazon ECS ContainerRuntimeError 错误](container-runtime-error.md)  | 
|  ContainerRuntimeTimeoutError  |  [排查 Amazon ECS ContainerRuntimeTimeoutError 错误](container-runtime-timeout-error.md)  | 
|  CannotStartContainerError  |  [排查 Amazon ECS CannotStartContainerError 错误](cannot-start-container.md)  | 
|  CannotStopContainerError  |  [排查 Amazon ECS CannotStopContainerError 错误](cannot-stop-container.md)  | 
|  CannotInspectContainerError  |  [排查 Amazon ECS CannotInspectContainerError 错误](cannot-inspect-container.md)  | 
|  CannotCreateVolumeError  |  [排查 Amazon ECS CannotCreateVolumeError 错误](cannot-create-volume.md)  | 
| CannotPullContainer |  [Amazon ECS 中的 CannotPullContainer 任务错误](task_cannot_pull_image.md)  | 

# 排查 Amazon ECS TaskFailedToStart 错误
<a name="failed-to-start-error"></a>

以下是一些 `TaskFailedToStart` 错误消息和可以用来修复错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## 尝试在子网“*subnet-id*”中创建启用了公有 IP 分配的网络接口时意外出现 EC2 错误
<a name="subnet-error"></a>

当 Fargate 任务使用 `awsvpc` 网络模式并在具有公有 IP 地址的子网中运行，且该子网没有足够的 IP 地址时，就会发生这种情况。

可用 IP 地址的数量可在 Amazon EC2 控制台中的子网详细信息页面上找到，也可以使用 `[describe-subnets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-subnets.html)` 找到。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[查看您的子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#view-subnet)。

要解决此问题，您可以创建一个新的子网，在其中运行您的任务。

## InternalError：*<reason>*
<a name="internal-error-reason"></a>

当请求 ENI 连接时会出现此错误。Amazon EC2 会异步处理 ENI 的配置。配置过程需要时间。如果等待时间长或出现未报告的故障，则 Amazon ECS 会超时。存在 ENI 已配置，但故障超时后报告发送至 Amazon ECS 的情况。在这种情况下，Amazon ECS 会出现报告的任务故障，并带有使用中的 ENI。

## 选定的任务定义与选定的计算策略不兼容
<a name="compute-compatibility"></a>

当您所选任务定义的启动类型与集群容量类型不匹配时，将发生此错误。您需要选择与分配给集群的容量提供程序相匹配的任务定义。

## 无法将网络接口连接到未使用的设备索引
<a name="compute-compatibility-cpu"></a>

使用 `awsvpc` 联网类型并且没有足够的 CPU/内存来执行任务时，就会发生此错误。首先，请检查用于实例的 CPU。有关更多信息，请参阅《Amazon EC2 实例类型》中的 [Amazon EC2 instance type specifications](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html)**。获取实例的 CPU 值并将其乘以实例的 ENI 数量。在任务定义中使用该值。

## AGENT
<a name="agent-not-started"></a>

您尝试在其上启动任务的容器实例有一个目前已断开连接的代理。为防止任务放置的等待时间延长，已拒绝该请求。

有关如何排除断开连接的代理故障的信息，请参阅[如何排除断开连接的 Amazon ECS 代理的故障](https://repost.aws/knowledge-center/ecs-agent-disconnected-linux2-ami)。

# 排查 Amazon ECS ResourceInitializationError 错误
<a name="resource-initialization-error"></a>

以下是一些 `ResourceInitialization` 错误消息和可以用来修复错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

**Topics**
+ [任务无法从 Amazon ECR 提取注册表身份验证。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。](#unable-to-pull-secrets-ecr)
+ [任务无法从 Amazon S3 下载环境变量文件。任务与 Amazon S3 之间存在连接问题。请检查任务网络配置。](#failed-to-download-env-files)
+ [任务无法从 AWS Systems Manager Parameter Store 中提取密钥。检查任务与 AWS Systems Manager 之间的网络连接。](#unable-to-pull-secrets-sys-manager)
+ [任务无法从 AWS Secrets Manager 中提取密钥。任务与 Secrets Manager 之间存在连接问题。请检查任务网络配置。](#unable-to-pull-secrets-asm-no-arn)
+ [任务无法从 Secrets Manager 中提取密钥。任务无法从 Secrets Manager 中检索到 ARN 为“*secretARN*”的密钥。请检查指定区域中是否存在该密钥。](#unable-to-pull-secrets-asm)
+ [pull command failed: unable to pull secrets or registry auth Check your task network configuration.](#pull-command-failed)
+ [任务无法找到任务定义中定义的 Amazon CloudWatch 日志组。任务与 Amazon CloudWatch 之间存在连接问题。请检查网络配置。](#failed-to-initialize-logging-network)
+ [无法初始化日志记录驱动程序](#failed-to-initialize-logging)
+ [无法调用 EFS utils 命令来设置 EFS 卷](#efs-utils-failed)

## 任务无法从 Amazon ECR 提取注册表身份验证。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。
<a name="unable-to-pull-secrets-ecr"></a>

此错误表明任务无法连接到 Amazon ECR。

检查任务与 Amazon ECR 之间的连接。有关信息，请参阅[验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法从 Amazon S3 下载环境变量文件。任务与 Amazon S3 之间存在连接问题。请检查任务网络配置。
<a name="failed-to-download-env-files"></a>

当任务无法从 Amazon S3 下载环境文件时，则会出现此错误。

检查任务与 Amazon S3 VPC 端点之间的连接。有关信息，请参阅[验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法从 AWS Systems Manager Parameter Store 中提取密钥。检查任务与 AWS Systems Manager 之间的网络连接。
<a name="unable-to-pull-secrets-sys-manager"></a>

当任务无法使用 Systems Manager 中的凭证拉取任务定义中定义的映像时，将出现此错误。

检查任务与 Systems Manager VPC 端点之间的连接。有关信息，请参阅[验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法从 AWS Secrets Manager 中提取密钥。任务与 Secrets Manager 之间存在连接问题。请检查任务网络配置。
<a name="unable-to-pull-secrets-asm-no-arn"></a>

当任务无法使用 Secrets Manager 中的凭证拉取任务定义中定义的映像时，将出现此错误。

此错误表明 Systems Manager VPC 端点与任务之间的网络连接存在问题。

有关如何验证任务与端点之间的连接的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法从 Secrets Manager 中提取密钥。任务无法从 Secrets Manager 中检索到 ARN 为“*secretARN*”的密钥。请检查指定区域中是否存在该密钥。
<a name="unable-to-pull-secrets-asm"></a>

当任务无法使用 Secrets Manager 中的凭证拉取任务定义中定义的映像时，将出现此错误。

可能导致此问题的原因如下：


| 错误原因... | 请执行此操作... | 
| --- | --- | 
|   Secrets Manager VPC 端点与任务之间的网络连接问题。 在错误消息中看到以下任何字符串时，则说明问题属于网络问题： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/resource-initialization-error.html)  |  验证任务与 Secrets Manager 端点之间的连接。有关更多信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。  | 
| 任务定义中定义的任务执行角色不具有 Secrets Manager 的权限。 |  将所需 Secrets Manager 权限添加到任务执行角色。有关更多信息，请参阅 [Secrets Manager 或 Systems Manager 权限](task_execution_IAM_role.md#task-execution-secrets)。  | 
| 密钥 ARN 不存在 | 检查 Secrets Manager 中是否存在该 ARN。有关查看映像的信息，请参阅《Secrets Manager 开发人员指南》中的 [Find secrets in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_search-secret.html)。 | 

## pull command failed: unable to pull secrets or registry auth Check your task network configuration.
<a name="pull-command-failed"></a>

当任务无法连接到 Amazon ECR、Systems Manager 或 Secrets Manager 时，会出现此错误。这是由于网络配置错误造成的。

要修复此问题，请验证任务与 Amazon ECR 之间的连接。您还需要检查任务和存储密钥的服务（Systems Manager 或 Secrets Manager）之间的连接。有关更多信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法找到任务定义中定义的 Amazon CloudWatch 日志组。任务与 Amazon CloudWatch 之间存在连接问题。请检查网络配置。
<a name="failed-to-initialize-logging-network"></a>

当您的任务无法找到您在任务定义中定义的 CloudWatch 日志组时，将发生此错误。

此错误表明 CloudWatch VPC 端点与任务之间的网络连接存在问题。

有关如何验证任务与端点之间的连接的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 无法初始化日志记录驱动程序
<a name="failed-to-initialize-logging"></a>

当您的任务无法找到您在任务定义中定义的 CloudWatch 日志组时，将发生此错误。

此错误指示任务定义中的 CloudWatch 组不存在。

使用以下步骤查找缺失的 CloudWatch。

1. 运行以下命令，获取任务定义信息。

   ```
   aws ecs describe-task-definition \ 
       --task-definition task-def-name
   ```

   查看每个容器的输出并记下其 `awslogs-group` 值。

   ```
   "logConfiguration": {
                   "logDriver": "awslogs",
                   "options": {
                       "awslogs-group": "/ecs/example-group",
                       "awslogs-create-group": "true",
                       "awslogs-region": "us-east-1",
                       "awslogs-stream-prefix": "ecs"
                   },
   ```

1. 验证组在 CloudWatch 中存在。有关更多信息，请参阅《Amazon CloudWatch Logs 用户指南》**中的[使用日志组和日志流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

   问题可能是任务定义中指定的组不正确，或者日志组不存在。

1. 修复问题。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/resource-initialization-error.html)

## 无法调用 EFS utils 命令来设置 EFS 卷
<a name="efs-utils-failed"></a>

以下问题可能会阻止您在任务中挂载 Amazon EFS 卷：
+ Amazon EFS 文件系统配置不正确。
+ 该任务没有所需的权限。
+ 存在与网络和 VPC 配置有关的问题。

 有关如何调试和修复此问题的信息，请参阅 AWS re:Post 上的[为什么我无法在 AWS Fargate 任务上挂载 Amazon EFS 卷](https://repost.aws/knowledge-center/fargate-unable-to-mount-efs)。

# 排查 Amazon ECS ResourceNotFoundException 错误
<a name="resource-not-found-error"></a>

以下是一些 ` ResourceNotFoundException` 错误消息和可以用来修复错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## 任务未能在 AWS Secrets Manager 中检索到 ARN 为“*sercretARN*”的密钥。请检查指定区域中是否存在该密钥。
<a name="unable-to-pull-secrets-ecr"></a>

当任务无法从 Secrets Manager 中检索到密钥时，将出现此错误。这意味着 Secrets Manager 中不存在任务定义中指定（并包含在错误消息中）的密钥。

区域也包含在错误消息中。

正在从 *region* 区域中的 AWS Secrets Manager 获取密钥数据：密钥 *sercretARN*：ResourceNotFoundException：Secrets Manager 找不到指定的密钥。

有关查找密钥的信息，请参阅《AWS Secrets Manager 用户指南》中的 [Find secrets in AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_search-secret.html)**。

可使用下表确定和解决错误。


| 问题 | 操作 | 
| --- | --- | 
| 该密钥位于与任务定义不同的区域。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/resource-not-found-error.html) | 
| 任务定义中的密钥 ARN 不正确。正确的密钥存在于 Secrets Manager 中。 | 使用正确的密钥更新任务定义。有关更多信息，请参阅《Amazon Elastic Container Service API 参考》中的 [使用控制台更新 Amazon ECS 任务定义](update-task-definition-console-v2.md) 或 [RegisterTaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html)。 | 
| 该密钥已不再存在。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/resource-not-found-error.html)  | 

# 排查 Amazon ECS SpotInterruption 错误
<a name="spot-interruption-errors"></a>

Fargate 和 EC2 的 `SpotInterruption` 错误原因不同。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## Fargate
<a name="fargate-spot-error"></a>

当没有 Fargate 竞价型容量或 Fargate 收回竞价型容量时，将出现 `SpotInterruption` 错误。

您可以让任务在多个可用区中运行，以提供更多容量。

## EC2
<a name="ec2-spot-error"></a>

当没有可用的竞价型实例或 EC2 收回竞价型实例容量时，将出现此错误。

您可以让实例在多个可用区中运行，以提供更多容量。

# 排查 Amazon ECS InternalError 错误
<a name="internal-error"></a>

**适用于：**Fargate

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

当代理遇到意外的非运行时相关的内部错误时，将出现 `InternalError` 错误。

仅当使用平台版本 `1.4` 或更高版本时才会发生此错误。

有关如何进行调试和修复此问题的信息，请参阅[Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)。

# 排查 Amazon ECS OutOfMemoryError 错误
<a name="out-of-memory"></a>

以下是一些 OutOfMemoryError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## 容器因内存使用情况而被终止
<a name="container-memory-usage"></a>

因容器中进程使用的内存超过任务定义中分配的内存，或因主机或操作系统限制，导致容器退出时，将发生此错误。

# 排查 Amazon ECS ContainerRuntimeError 错误
<a name="container-runtime-error"></a>

以下是一些 ContainerRuntimeError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## ContainerRuntimeError
<a name="container-runtime-error-1"></a>

当代理收到来自 `containerd` 运行时特定操作的意外错误时，将发生此错误。此错误通常是由代理或 `containerd` 运行时的内部故障所导致。

仅当使用平台版本 `1.4.0` 或更高版本（Linux）或者 `1.0.0` 或更高版本（Windows）时才会发生此错误。

有关如何调试和修复此问题的信息，请参阅 AWS re:Post 上的[为什么我的 Amazon ECS 任务停止了](https://repost.aws/knowledge-center/ecs-task-stopped)。

# 排查 Amazon ECS ContainerRuntimeTimeoutError 错误
<a name="container-runtime-timeout-error"></a>

以下是一些 ContainerRuntimeTimeoutError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## 无法过渡到正在运行状态；等待 1 分钟后超时或出现 Docker 超时错误
<a name="container-runtime-timeout-error-1"></a>

当容器无法在超时时间内转换到 `RUNNING` 或 `STOPPED` 状态时，会发生此错误。错误消息中将提供原因和超时值。

# 排查 Amazon ECS CannotStartContainerError 错误
<a name="cannot-start-container"></a>

以下是一些 CannotStartContainerError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## 无法获取容器状态：*<reason>*
<a name="cannot-start-container-1"></a>

容器无法启动时，将发生此错误。

如果您的容器尝试使用超出此处指定的内存，该容器将被终止。增加提供给容器的内存。这是任务定义中的 `memory` 参数。有关更多信息，请参阅 [内存](task_definition_parameters.md#container_definition_memory)。

# 排查 Amazon ECS CannotStopContainerError 错误
<a name="cannot-stop-container"></a>

以下是一些 CannotStopContainerError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## CannotStopContainerError
<a name="cannot-stop-container-1"></a>

容器无法停止时，将发生此错误。

有关如何调试和修复此问题的信息，请参阅 AWS re:Post 上的[为什么我的 Amazon ECS 任务停止了](https://repost.aws/knowledge-center/ecs-task-stopped)。

# 排查 Amazon ECS CannotInspectContainerError 错误
<a name="cannot-inspect-container"></a>

以下是一些 CannotInspectContainerError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## CannotInspectContainerError
<a name="cannot-inspect-container-1"></a>

当容器代理无法通过容器运行时描述容器时，将发生此错误。

当使用平台版本 `1.3` 或更早版本时，Amazon ECS 代理会从 Docker 返回原因。

当使用平台版本 `1.4.0` 或更高版本（Linux）或者 `1.0.0` 或更高版本（Windows）时，Fargate 代理从 `containerd` 返回原因。

有关如何调试和修复此问题的信息，请参阅 AWS re:Post 上的[为什么我的 Amazon ECS 任务停止了](https://repost.aws/knowledge-center/ecs-task-stopped)。

# 排查 Amazon ECS CannotCreateVolumeError 错误
<a name="cannot-create-volume"></a>

以下是一些 CannotCreateVolumeError 错误消息和可以用来修正错误的操作。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

## CannotCreateVolumeError
<a name="cannot-create-volume-1"></a>

当代理无法创建任务定义中指定的卷挂载时，将发生此错误。

仅当使用平台版本 `1.4.0` 或更高版本（Linux）或者 `1.0.0` 或更高版本（Windows）时才会发生此错误。

有关如何调试和修复此问题的信息，请参阅 AWS re:Post 上的[为什么我的 Amazon ECS 任务停止了](https://repost.aws/knowledge-center/ecs-task-stopped)。

# Amazon ECS 中的 CannotPullContainer 任务错误
<a name="task_cannot_pull_image"></a>

以下错误表明任务无法启动，因为 Amazon ECS 无法检索指定的容器映像。

**注意**  
1.4 Fargate 平台版本会截断长错误消息。

要使用 AWS 管理控制台 检查已停止的任务是否有错误消息，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

**提示**  
您可以将 [Amazon ECS MCP 服务器](ecs-mcp-introduction.md)与人工智能助手结合使用，通过自然语言调查映像拉取错误。

**Topics**
+ [任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。](#pull-request-image-not-found)
+ [任务无法从 Amazon ECR 存储库“*存储库 URI*”中提取“*image-name*”。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。](#pull-image-io-timeout)
+ [任务无法拉取映像。检查网络配置](#pull-request-image-not-found-network)
+ [CannotPullContainerError：拉取映像清单已重试 5 次：无法解析 ref](#pull-request-image-tag)
+ [API 错误（500）：获取 https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/：net/http：在等待连接期间请求被取消](#request-canceled)
+ [API 错误](#pull-request-api-error)
+ [写入 /var/lib/docker/tmp/*GetImageBlob111111111*：设备上空间不足](#pull-request-write-error)
+ [ERROR：toomanyrequests：请求太多或您已达到拉取速率限制。](#container-pull-too-many-requests)
+ [来自进程守护程序的错误响应：获取 *url*：net/http：在等待连接期间请求被取消](#container-pull-request-canceled-connection)
+ [ref pull 已重试 1 次：无法复制：httpReaderSeeker：无法打开：意外状态代码](#container-pull-failed-open)
+ [拉取访问被拒绝](#container-pull-access-denied.title)
+ [pull 命令失败：panic：运行时错误：内存地址无效或指针取消引用为零](#container-pull-runtime-error.title)
+ [拉取映像配置时出错](#container-pull-pulling-image.title)
+ [上下文已取消](#container-pull-context-canceled)

## 任务无法拉取映像。请检查该角色是否具有从注册表中拉取映像的权限。
<a name="pull-request-image-not-found"></a>

此错误表明由于存在权限问题，任务无法拉取任务定义中指定的映像。

要解决此问题，请执行以下操作：

1. 检查 *repository* 中是否存在该映像。有关查看映像的信息，请参阅《Amazon Elastic Container Registry 用户指南》中的 [Viewing image details in Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-info.html)**。

1. 验证 *role-arn* 是否具有拉取映像的适当权限。

   有关如何更新角色的信息，请参阅《AWS Identity and Access Management 用户指南》**中的[更新角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

   该任务会使用以下角色之一：
   + 对于使用 Fargate 的任务，这是任务执行角色。有关其他 Amazon ECR 权限的信息，请参阅 [Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限](task_execution_IAM_role.md#task-execution-ecr-conditionkeys)。
   + 对于使用 EC2 的任务，这是容器实例角色。有关其他 Amazon ECR 权限的信息，请参阅 [Amazon ECR 权限](instance_IAM_role.md#container-instance-role-ecr)。

## 任务无法从 Amazon ECR 存储库“*存储库 URI*”中提取“*image-name*”。任务与 Amazon ECR 之间存在连接问题。请检查任务网络配置。
<a name="pull-image-io-timeout"></a>

此错误表明任务无法连接到 Amazon ECR。检查与*存储库 URI* 存储库的连接。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## 任务无法拉取映像。检查网络配置
<a name="pull-request-image-not-found-network"></a>

此错误表明任务无法连接到 Amazon ECR。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## CannotPullContainerError：拉取映像清单已重试 5 次：无法解析 ref
<a name="pull-request-image-tag"></a>

此错误表明任务无法拉取映像。

要解决此问题，您可以：
+ 验证任务定义中指定的映像是否与存储库中的映像匹配。
+ Amazon ECS 强制映像版本稳定性。如果原始映像不再可用，您将收到此错误。映像标签是强制执行此行为的一部分。将任务定义中的映像从使用 :latest 作为标签更改为特定版本。有关更多信息，请参阅 [容器映像解析](deployment-type-ecs.md#deployment-container-image-stability)。

有关如何验证和解决问题的信息，请参阅 [验证 Amazon ECS 已停止任务连接](verify-connectivity.md)。

## API 错误（500）：获取 https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/：net/http：在等待连接期间请求被取消
<a name="request-canceled"></a>

此错误表明连接超时，原因是到互联网的路由不存在。

要解决此问题，您可以：
+ 对于在公有共子网中的任务，在启动任务时为**自动分配公有 IP** 指定**启用**。有关更多信息，请参阅 [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)。
+ 对于在私有子网中的任务，在启动任务时为**自动分配公有 IP** 指定**禁用**，然后在 VPC 中配置 NAT 网关，将请求路由到互联网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

## API 错误
<a name="pull-request-api-error"></a>

此错误表明 Amazon ECR 端点存在连接问题。

有关如何解决此问题的信息，请参阅 支持 网站上的[如何解决 Amazon ECS 中的 Amazon ECR 错误“CannotPullContainerError：API 错误”](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-pull-container-api-error-ecr/)。

## 写入 /var/lib/docker/tmp/*GetImageBlob111111111*：设备上空间不足
<a name="pull-request-write-error"></a>

此错误表示磁盘空间不足。

要解决此问题，请释放磁盘空间。

如果使用的是经 Amazon ECS 优化的 AMI，则可以使用以下命令检索文件系统上 20 个最大的文件：

```
du -Sh / | sort -rh | head -20
```

输出示例：

```
5.7G    /var/lib/docker/containers/50501b5f4cbf90b406e0ca60bf4e6d4ec8f773a6c1d2b451ed8e0195418ad0d2
1.2G    /var/log/ecs
594M    /var/lib/docker/devicemapper/mnt/c8e3010e36ce4c089bf286a623699f5233097ca126ebd5a700af023a5127633d/rootfs/data/logs
...
```

在某些情况下，可以由正在运行的容器填充根卷。如果容器使用的是没有 `json-file` 限制的原定设置 `max-size` 日志驱动程序，则可能是日志文件占用了大部分已用空间。您可以使用 `docker ps` 命令通过将上面输出中的目录名称映射到容器 ID 来验证哪个容器占用了空间。例如：

```
CONTAINER ID   IMAGE                            COMMAND             CREATED             STATUS              PORTS                            NAMES
50501b5f4cbf   amazon/amazon-ecs-agent:latest   "/agent"            4 days ago          Up 4 days                                            ecs-agent
```

预设情况下，使用 `json-file` 日志驱动程序时，Docker 会捕获所有容器的标准输出（和标准错误），并使用 JSON 格式将它们写入到文件中。您可以将 `max-size` 设置为日志驱动程序选项，以防日志文件占用过多空间。有关更多信息，请参阅 Docker 文档中的 [JSON File logging driver](https://docs.docker.com/engine/logging/drivers/json-file/)。

下面的容器定义代码段说明此选项的用法：

```
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "256m"
    }
}
```

如果容器日志占用过多磁盘空间，还有一个替代解决方案是使用 `awslogs` 日志驱动程序。`awslogs` 日志驱动程序将日志发送到 CloudWatch，这将释放容器实例上原本用于容器日志的磁盘空间。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 CloudWatch](using_awslogs.md)。

您可能需要更新 Docker 可访问的磁盘大小。

有关更多信息，请参阅 [CannotPullContainerError: no space left on device](https://repost.aws/questions/QUx6Ix1R1SSNisYSs1Sw8EBA/cannotpullcontainererror-no-space-left-on-device)。

## ERROR：toomanyrequests：请求太多或您已达到拉取速率限制。
<a name="container-pull-too-many-requests"></a>

此错误表明有 Docker Hub 速率限制。

如果您收到以下错误之一，则可能达到 Docker Hub 速率限制：

有关 Docker Hub 费率限制的更多信息，请参阅 [了解 Docker Hub 速率限制](https://www.docker.com/increase-rate-limits)。

如果您提高了 Docker Hub 速率限制，且需要对容器实例的 Docker 拉取进行身份验证，请参阅[容器实例的私有注册表身份验证](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html)。

## 来自进程守护程序的错误响应：获取 *url*：net/http：在等待连接期间请求被取消
<a name="container-pull-request-canceled-connection"></a>

此错误表明连接超时，原因是到互联网的路由不存在。

要解决此问题，您可以：
+ 对于在公有共子网中的任务，在启动任务时为**自动分配公有 IP** 指定**启用**。有关更多信息，请参阅 [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)。
+ 对于在私有子网中的任务，在启动任务时为**自动分配公有 IP** 指定**禁用**，然后在 VPC 中配置 NAT 网关，将请求路由到互联网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

## ref pull 已重试 1 次：无法复制：httpReaderSeeker：无法打开：意外状态代码
<a name="container-pull-failed-open"></a>

此错误表明复制映像时发生故障。

要解决此问题，请查看以下文章之一：
+ 有关 Fargate 任务，请参阅 [如何解决 Fargate 上 Amazon ECS 任务的 "cannotpullcontainererror" 错误](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-fargate-pull-container-error/)。
+ 有关其他任务，请参阅[如何解决 Amazon ECS 任务的 "cannotpullcontainererror" 错误](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-pull-container-error/)。

## 拉取访问被拒绝
<a name="container-pull-access-denied.title"></a>

此错误表明无法访问映像。

要解决此问题，您可能需要使用 Amazon ECR 对 Docker 客户端进行身份验证。有关更多信息，请参阅《Amazon ECR 用户指南》**中的[私有注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)。

## pull 命令失败：panic：运行时错误：内存地址无效或指针取消引用为零
<a name="container-pull-runtime-error.title"></a>

此错误表明由于内存地址无效或空指针取消引用而无法访问映像。

要解决此问题，请执行以下操作：
+ 检查您是否有访问 Amazon S3 的安全组规则。
+ 使用网关端点时，必须在路由表中添加路由才能访问端点。

## 拉取映像配置时出错
<a name="container-pull-pulling-image.title"></a>

此错误表明已达到速率限制或存在网络错误：

要解决此问题，请参阅[如何解决我的 Amazon ECS EC2 启动类型任务中的“CannotPullContainerError”错误](https://repost.aws/knowledge-center/ecs-pull-container-error)。

## 上下文已取消
<a name="container-pull-context-canceled"></a>

此错误表明上下文已取消。

此错误的常见原因是，您的任务使用的 VPC 没有从 Amazon ECR 中提取容器映像的路径。

# 验证 Amazon ECS 已停止任务连接
<a name="verify-connectivity"></a>

有时，任务会因为网络连接问题而停止。这可能是间歇性问题，但很可能是因任务无法连接到端点所致。

## 测试任务连接
<a name="test-network"></a>

您可以使用 `AWSSupport-TroubleshootECSTaskFailedToStart` 运行手册来测试任务连接。使用运行手册时，您需要提供以下资源信息：
+ 任务 ID

  使用最近失败的任务的 ID。
+ 任务所在的集群

有关如何使用运行手册的信息，请参阅《AWS Systems Manager Automation 运行手册参考》**中的 [https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshootecstaskfailedtostart.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshootecstaskfailedtostart.html)。

运行手册会对任务进行分析。您可以在**输出**部分查看以下可能导致任务无法启动的问题的结果：
+ 与已配置的容器注册表的网络连接
+ VPC 端点连接
+ 安全组规则配置

## 修正 VPC 端点问题
<a name="fix-vpc-endpoints"></a>

当 `AWSSupport-TroubleshootECSTaskFailedToStart` 运行手册结果表明存在 VPC 端点问题时，请检查以下配置：
+ 创建端点的 VPC 和 VPC 端点需要使用私有 DNS。
+ 确认任务无法连接到的服务所用 AWS PrivateLink 端点与任务位于同一 VPC 中。有关更多信息，请参阅以下章节之一：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/verify-connectivity.html)
+ 为任务子网配置一条允许通过端口 443 的 HTTPS DNS（TCP）流量出站规则。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》中的[配置安全组规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules)**。
+ 如果您使用自定义域名服务器，请确认 DNS 查询的设置。查询必须具有端口 53 的出站访问权限，并且使用 UDP 和 TCP 协议。此外，查询必须具有端口 443 上的 HTTPS 访问权限。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》中的[配置安全组规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules)**。
+ 如果子网具有网络 ACL，则需要使用以下 ACL 规则：
  + 一条允许通过端口 1024-65535 的流量的出站规则。
  + 一条允许通过端口 443 的 TCP 流量的入站规则。

  有关如何配置规则的信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[使用网络 ACL 控制指向子网的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)**。

## 修正网络问题
<a name="fix-network-issues"></a>

当 `AWSSupport-TroubleshootECSTaskFailedToStart` 运行手册结果表明存在网络问题时，请检查以下配置：

### 在公有子网中使用 awsvpc 网络模式的任务
<a name="fix-network-issues-fargate-public"></a>

根据运行手册执行以下配置：
+ 对于在公有共子网中的任务，在启动任务时为**自动分配公有 IP** 指定**启用**。有关更多信息，请参阅 [将应用程序作为 Amazon ECS 任务运行](standalone-task-create.md)。
+ 您需要一个网关来处理互联网流量。任务子网的路由表需要有一个将流量指向该网关的路由。

  有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[在路由表中添加和删除路由](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/verify-connectivity.html)
+ 如果任务子网具有网络 ACL，则需要使用以下 ACL 规则：
  + 一条允许通过端口 1024-65535 的流量的出站规则。
  + 一条允许通过端口 443 的 TCP 流量的入站规则。

  有关如何配置规则的信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[使用网络 ACL 控制指向子网的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)**。

### 在私有子网中使用 awsvpc 网络模式的任务
<a name="fix-network-issues-fargate-private"></a>

根据运行手册执行以下配置：
+ 启动任务时，对于**自动分配公有 IP**，选择**已禁用**。
+  在 VPC 中配置一个 NAT 网关，以用于将请求路由到互联网。有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》** 中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。
+ 任务子网的路由表需要有一个将流量指向 NAT 网关的路由。

  有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[在路由表中添加和删除路由](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/verify-connectivity.html)
+ 如果任务子网具有网络 ACL，则需要使用以下 ACL 规则：
  + 一条允许通过端口 1024-65535 的流量的出站规则。
  + 一条允许通过端口 443 的 TCP 流量的入站规则。

  有关如何配置规则的信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[使用网络 ACL 控制指向子网的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)**。

### 不在公有子网中使用 awsvpc 网络模式的任务
<a name="fix-network-issues-ec2-public"></a>

根据运行手册执行以下配置：
+ 创建集群时，对于 **Amazon EC2 实例的联网**下的**自动分配 IP**，选择**开启**。

  此选项将为实例的主网络接口分配一个公有 IP 地址。
+ 您需要一个网关来处理互联网流量。实例子网的路由表需要有一个将流量指向该网关的路由。

  有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[在路由表中添加和删除路由](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/verify-connectivity.html)
+ 如果实例子网具有网络 ACL，则需要使用以下 ACL 规则：
  + 一条允许通过端口 1024-65535 的流量的出站规则。
  + 一条允许通过端口 443 的 TCP 流量的入站规则。

  有关如何配置规则的信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[使用网络 ACL 控制指向子网的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)**。

### 在私有子网中不使用 awsvpc 网络模式的任务
<a name="fix-network-issues-fargate-private"></a>

根据运行手册执行以下配置：
+ 创建集群时，对于 **Amazon EC2 实例的联网**下的**自动分配 IP**，选择**关闭**。
+  在 VPC 中配置一个 NAT 网关，以用于将请求路由到互联网。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。
+ 实例子网的路由表需要有一个将流量指向 NAT 网关的路由。

  有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[在路由表中添加和删除路由](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/verify-connectivity.html)
+ 如果任务子网具有网络 ACL，则需要使用以下 ACL 规则：
  + 一条允许通过端口 1024-65535 的流量的出站规则。
  + 一条允许通过端口 443 的 TCP 流量的入站规则。

  有关如何配置规则的信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[使用网络 ACL 控制指向子网的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)**。

# 查看针对 Amazon ECS 任务的 IAM 角色请求
<a name="task_iam_roles-logs"></a>

当您在 IAM 角色中使用提供程序作为任务凭证时，提供程序的请求会保存在审计日志中。审计日志继承与容器代理日志相同的日志轮换设置。可以设置 `ECS_LOG_ROLLOVER_TYPE`、`ECS_LOG_MAX_FILE_SIZE_MB` 和 `ECS_LOG_MAX_ROLL_COUNT` 容器代理配置变量来影响审计日志的行为。有关更多信息，请参阅 [Amazon ECS 容器代理日志配置参数](ecs-agent-versions.md#agent-logs)。

对于容器代理版本 1.36.0 及更高版本，审计日志位于 `/var/log/ecs/audit.log`。在轮换日志时，将在日志文件名的末尾添加 `YYYY-MM-DD-HH` 格式的时间戳。

对于容器代理版本 1.35.0 及以前的版本，审计日志位于 `/var/log/ecs/audit.log.YYYY-MM-DD-HH`。

日志条目格式如下：
+ Timestamp
+ HTTP 响应代码
+ 请求来源的 IP 地址和端口号
+ 凭证提供程序的相对 URI
+ 发出请求的用户代理
+ 请求容器所属的任务 ARN
+ `GetCredentials` API 名称和版本号
+ 容器实例注册到的 Amazon ECS 集群名称
+ 容器实例 ARN

您可以使用以下命令查看日志文件。

```
cat /var/log/ecs/audit.log.2016-07-13-16
```

输出：

```
2016-07-13T16:11:53Z 200 172.17.0.5:52444 "/v1/credentials" "python-requests/2.7.0 CPython/2.7.6 Linux/4.4.14-24.50.amzn1.x86_64" TASK_ARN GetCredentials 1 CLUSTER_NAME CONTAINER_INSTANCE_ARN
```

# 查看 Amazon ECS 服务事件消息
<a name="service-event-messages"></a>

在解决与服务相关的问题时，首先应查看服务事件日志中的诊断信息。您可以使用 `DescribeServices` API、AWS CLI 或 AWS 管理控制台 查看服务事件。

使用 Amazon ECS API 查看服务事件消息时，仅返回服务调度器中的事件。这些包括最近的任务放置和实例运行状况事件。但是，Amazon ECS 控制台显示来自以下来源的服务事件。
+ 来自 Amazon ECS 服务调度器的任务放置和实例运行状况事件。这些事件的前缀为**服务*（service-name）***。为了确保此事件视图有帮助，我们只显示最近 `100` 个事件。将忽略重复的事件消息，直至解决了问题根源或者过了六个小时。如果在六小时内未解决问题，您会收到另一条关于该原因的维修事件消息。
+ 服务自动扩缩事件。这些事件有一个前缀 **Message**，并且只有在使用 Application Auto Scaling 扩展策略配置服务时，才会发生。

**提示**  
您可以将 [Amazon ECS MCP 服务器](ecs-mcp-introduction.md)与人工智能助手结合使用，通过自然语言分析服务事件。

可以使用以下步骤查看您当前的服务事件消息。

------
#### [ Console ]

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 在 **Clusters**（集群）页面上，选择集群。

1. 选择要检查的服务。

1. 在**事件**选项卡上，查看消息。

------
#### [ AWS CLI ]

使用 [describe-services](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-services.html) 命令查看指定服务的服务事件消息。

以下 AWS CLI 示例描述了*原定设置*集群中 *service-name* 服务，它将提供最新的服务事件消息。

```
aws ecs describe-services \
    --cluster default \
    --services service-name \
    --region us-west-2
```

------

# Amazon ECS 服务事件消息
<a name="service-event-messages-list"></a>

以下是您可能会在 Amazon ECS 控制台中看到的服务事件消息的示例：

## 服务（‭*service-name‭*‬）已达到稳定状态。
<a name="service-event-messages-steady"></a>

当服务正常运行且达到所需的任务数量，从而达到稳定状态时，服务计划程序将发送 `service (service-name) has reached a steady state.` 服务事件。

服务调度器会定期报告状态，因此您可能会多次收到此消息。

## 服务（*‬service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。
<a name="service-event-messages-1"></a>

当服务计划程序找不到添加其他任务的可用资源时，其会发送此事件消息。导致出现此情况的可能原因是：

使用容量提供程序自动扩展您的 EC2 实例。有关更多信息，请参阅 [适用于 EC2 工作负载的 Amazon ECS 容量提供程序](asg-capacity-providers.md)。  
如果打算使用容量提供程序，请确保您传递一个容量提供程序策略，或者具有与集群关联的默认容量提供程序策略，并且没有将启动类型和容量提供程序策略作为输入传递

未在您的集群中找到任何容器实例  
如果未向您尝试在其中运行任务的集群注册任何容器实例，您会收到此错误。您应向集群添加容器实例。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

端口不足  
如果您的任务使用固定主机端口映射（例如，您的任务对 Web 服务器使用主机上的端口 80），则每个任务必须至少有一个容器实例，因为一次仅一个容器可以使用一个主机端口。您应向集群添加容器实例，或减少所需的任务数。

注册的端口过多  
用于任务放置的最密切匹配的容器实例不能超过允许的最大保留端口限制，即每个容器实例 100 个主机端口。使用动态主机端口映射可能会修复此问题。

端口已在使用  
此任务的任务定义在其端口映射中使用与已在所选容器实例上运行的任务相同的端口。服务事件消息将包含选定的容器实例 ID 作为下面消息的一部分。  

```
The closest matching container-instance is already using a port required by your task.
```

内存不足  
如果您的任务定义指定 1000 MiB 的内存，并且集群中的每个容器实例均具有 1024 MiB 的内存，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。  
如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源，请参阅[预留 Amazon ECS Linux 容器实例内存](memory-management.md)。

CPU 不足  
一个容器实例中，每个 CPU 核心有 1024 个 CPU 单元。如果您的任务定义指定 1,000 个 CPU 单元，并且集群中的每个容器实例均具有 1024 个 CPU 单元，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的 CPU 单元，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。

没有足够的可用 ENI 附加点  
每个使用 `awsvpc` 网络模式的任务都会收到自己的弹性网络接口（ENI），且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制，并且集群中没有带可用 ENI 容量的容器实例。  
单个容器实例的 ENI 限制取决于以下条件：  
+ 如果您**尚未**选择使用 `awsvpcTrunking` 账户设置，则每个容器实例的 ENI 限制取决于实例类型。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，但您在选择使用后**未**启动使用支持的实例类型的新容器实例，则每个容器实例的 ENI 限制仍为默认值。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，并且您在选择使用后**已**启动使用支持的实例类型的新容器实例，则其他 ENI 将可用。有关更多信息，请参阅 [增加的 Amazon ECS 容器网络接口支持的实例](eni-trunking-supported-instance-types.md)。
有关选择使用 `awsvpcTrunking` 账户设置的更多信息，请参阅 [增加 Amazon ECS Linux 容器实例网络接口](container-instance-eni.md)。  
您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性  
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义（例如，日志记录驱动程序选项）需要容器实例使用 `ECS_AVAILABLE_LOGGING_DRIVERS` 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数，并且您没有可满足此要求的任何可用容器实例，则无法放置该任务。  
造成此错误的常见原因是您的服务使用的任务使用 `awsvpc` 网络模式和 EC2。您指定的集群中没有服务创建时在 `awsvpcConfiguration` 中指定的同一子网中注册的容器实例。  
您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限，还会检查网络配置问题。有关更多信息，请参阅《AWS Systems Manager Automation 运行手册参考用户指南》**中的 [AWSSupport-TroubleshootECSContainerInstance](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshoot-ecs-container-instance.html)。  
有关特定任务定义参数和代理配置变量所需的属性的更多信息，请参阅[Fargate 的 Amazon ECS 任务定义参数](task_definition_parameters.md)和 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

## 服务（*‬service-name‭*‬）无法下达任务，因为没有满足所有条件的容器实例。最接近的匹配容器实例 *container-instance-id* 没有足够的 CPU 单位可用。
<a name="service-event-messages-2"></a>

用于放置任务的最接近的匹配容器实例不会容纳足够的 CPU 单元来满足任务定义中的要求。查看任务定义的任务大小和容器定义参数中的 CPU 要求。

## 服务（*service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。最匹配的容器实例 ‭*‬container-instance-id‭*‬ 遇到错误“AGENT”（代理）。
<a name="service-event-messages-3"></a>

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例，则可以查看代理日志；有关更多信息，请参阅 [Amazon ECS 容器代理日志配置参数](ecs-agent-versions.md#agent-logs)。您还应验证代理是否正在该实例上运行。如果您使用的是经 Amazon ECS 优化的 AMI，则可以尝试通过以下命令停止并重新启动代理。
+ 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI 和经 Amazon ECS 优化的 Amazon Linux 2023 AMI

  ```
  sudo systemctl restart ecs
  ```
+ 对于经 Amazon ECS 优化的 Amazon Linux AMI

  ```
  sudo stop ecs && sudo start ecs
  ```

## 服务（*service-name*）（任务 *task-id*）（实例 *instance-id*）在（elb *elb-name*）中运行不正常，原因是（原因：实例连续失败的次数至少为运行状况检查的 UnhealthyThreshold 次数。）
<a name="service-event-messages-4"></a>

此服务已注册到一个负载均衡器，并且未通过负载均衡器运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。有关更多信息，请参阅 [对 Amazon ECS 中的服务负载均衡器进行故障排除](troubleshoot-service-load-balancers.md)。

## 服务（‭*‬service-name‭*‬）无法成功一致地启动任务。
<a name="service-event-messages-5"></a>

此服务包含在连续多次尝试之后仍无法启动的任务。此时，服务计划程序开始逐渐增加重试间隔的时间。您应该排查任务无法启动的原因。有关更多信息，请参阅 [Amazon ECS 服务节流逻辑](service-throttle-logic.md)。

服务更新后，例如，通过更新的任务定义更新后，服务计划程序恢复正常行为。

## 服务（*service-name*）操作正在受限制。稍后将重试。
<a name="service-event-messages-6"></a>

由于 API 限制，此服务无法启动更多任务。一旦服务调度器能够启动更多任务，它将恢复。

要请求 API 速率限制配额增加，请打开 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)页面，必要时登录，然后选择**创建案例**。选择**提高服务限制**。填写并提交表格。

## 因为服务部署配置，服务（*service-name*）无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值，然后重试。
<a name="service-event-messages-7"></a>

由于部署配置，此服务无法在服务部署期间停止或启动任务。部署配置由 `minimumHealthyPercent` 和 `maximumPercent` 值组成，这些值是在创建服务时定义的。这些值也可以在现有服务上更新。

`minimumHealthyPercent` 表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限。这是服务所需任务数的百分比。此值向上取整。例如，如果最小运行状况百分比为 `50`，并且所需的任务计数为 4，则调度器可以在启动两个新任务之前停止两个现有任务。同样，如果最小运行状况百分比为 75%，所需任务计数为 2，则由于结果值也为 2，调度器无法停止任何任务。

`maximumPercent` 表示在部署期间或容器实例耗尽时应为服务运行的任务数的上限。这是服务所需任务数的百分比。此值向下取整。例如，如果最大百分比为 `200` 且所需的任务计数为 4，则调度器可以在停止 4 个现有任务之前启动 4 个新任务。同样，如果最大百分比为 `125`，且目标任务计数为三，则调度器无法启动任何任务，因为结果值也是三。

设置最小运行状况百分比或最大百分比时，应确保调度器在触发部署时可以停止或启动至少一个任务。

## 服务（*service-name*）无法放置任务。原因：您已达到可同时运行的任务数量的上限
<a name="service-event-messages-8"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：内部错误。
<a name="service-event-messages-9"></a>

出现此错误的可能原因如下：

由于子网位于不受支持的可用区中，该服务无法启动任务。

有关支持的 Fargate 区域和可用区的信息，请参阅 [Amazon ECS 在 AWS Fargate 上的支持区域](AWS_Fargate-Regions.md)。

有关如何查看子网可用区的信息，请参阅 *Amazon VPC 用户指南*中的[查看您的子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#view-subnet)。

## 服务（*service-name*）无法放置任务。原因：请求的 CPU 配置超出您的限制。
<a name="service-event-messages-10"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：请求的内存配置超出您的限制。
<a name="service-event-messages-11"></a>

您可以请求增加导致错误的资源的配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法放置任务。原因：您已达到可同时运行的 vCPU 数量的上限
<a name="service-event-messages-12"></a>

AWS Fargate 正在从基于任务计数的配额过渡到基于 vCPU 的配额。

您可以请求对 Fargate 基于 vCPU 的配额增加配额。有关更多信息，请参阅 [Amazon ECS 服务配额](service-quotas.md)。要请求提高 Fargate 配额，请参阅《服务配额用户指南》**中的[请求增加配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 服务（*service-name*）无法达到稳定状态，因为任务集（*taskSet-ID*）无法横向缩减。原因：受保护任务的数量超过了所需的任务数量
<a name="service-event-messages-13"></a>

服务的受保护任务数超过了所需的任务数。您可以执行以下操作之一：
+ 等到当前任务的保护到期，使它们能够被终止。
+ 确定哪些任务可以停止，然后使用 `UpdateTaskProtection` API 和 `protectionEnabled` 选项将 `false` 设置为取消对这些任务的保护。
+ 增加服务的所需任务计数，以大于受保护任务的数量。

## 服务（*service-name*）无法达到稳定状态。原因：在您的容量提供程序中未找到容器实例。
<a name="service-event-messages-14"></a>

当服务计划程序找不到添加其他任务的可用资源时，其会发送此事件消息。导致出现此情况的可能原因是：

没有与集群关联的容量提供程序  
使用 `describe-services` 验证您是否有与集群关联的容量提供程序。您可以更新服务的容量提供程序策略。  
验证容量提供程序中是否有可用容量。如果是 EC2，请确保容器实例满足任务定义要求。

未在您的集群中找到任何容器实例  
如果未向您尝试在其中运行任务的集群注册任何容器实例，您会收到此错误。您应向集群添加容器实例。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

端口不足  
如果您的任务使用固定主机端口映射（例如，您的任务对 Web 服务器使用主机上的端口 80），则每个任务必须至少有一个容器实例。一次只有一个容器可以使用一个主机端口。您应向集群添加容器实例，或减少所需的任务数。

注册的端口过多  
用于任务放置的最密切匹配的容器实例不能超过允许的最大保留端口限制，即每个容器实例 100 个主机端口。使用动态主机端口映射可能会修复此问题。

端口已在使用  
此任务的任务定义在其端口映射中使用与已在所选容器实例上运行的任务相同的端口。服务事件消息将包含选定的容器实例 ID 作为下面消息的一部分。  

```
The closest matching container-instance is already using a port required by your task.
```

内存不足  
如果您的任务定义指定 1000 MiB 的内存，并且集群中的每个容器实例均具有 1024 MiB 的内存，则只能为每个容器实例运行此任务的一个副本。您可以在任务定义中尝试更少的内存，以便为每个容器实例启动多个任务，或者在集群中启动更多容器实例。  
如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源，请参阅[预留 Amazon ECS Linux 容器实例内存](memory-management.md)。

没有足够的可用 ENI 附加点  
每个使用 `awsvpc` 网络模式的任务都会收到自己的弹性网络接口（ENI），且会附加到托管任务的容器实例。Amazon EC2 实例对可以附加到它们的 ENI 数量有限制，并且集群中没有带可用 ENI 容量的容器实例。  
单个容器实例的 ENI 限制取决于以下条件：  
+ 如果您**尚未**选择使用 `awsvpcTrunking` 账户设置，则每个容器实例的 ENI 限制取决于实例类型。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，但您在选择使用后**未**启动使用支持的实例类型的新容器实例，则每个容器实例的 ENI 限制仍为默认值。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[每个实例类型的每个网络接口的 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。
+ 如果您**已**选择使用 `awsvpcTrunking` 账户设置，并且您在选择使用后**已**启动使用支持的实例类型的新容器实例，则其他 ENI 将可用。有关更多信息，请参阅 [增加的 Amazon ECS 容器网络接口支持的实例](eni-trunking-supported-instance-types.md)。
有关选择使用 `awsvpcTrunking` 账户设置的更多信息，请参阅 [增加 Amazon ECS Linux 容器实例网络接口](container-instance-eni.md)。  
您可以将容器实例添加到您的集群以提供更多可用的网络适配器。

容器实例缺少必需属性  
一些任务定义参数需要在容器实例上安装特定的 Docker 远程 API 版本。其他任务定义（例如，日志记录驱动程序选项）需要容器实例使用 `ECS_AVAILABLE_LOGGING_DRIVERS` 代理配置变量注册这些日志记录驱动程序。如果您的任务定义包含一个需要特定容器实例属性的参数，并且您没有可满足此要求的任何可用容器实例，则无法放置该任务。  
此错误的一个常见原因是，如果您的服务使用的任务使用 `awsvpc` 网络模式和 EC2，并且您指定的集群在创建服务时 `awsvpcConfiguration` 中指定的同一子网中没有注册容器实例。  
您可以使用 AWSSupport-TroubleshootECSContainerInstance 运行手册进行故障排除。此运行手册会检查实例的用户数据是否包含正确的集群信息、实例配置文件是否包含所需的权限，还会检查网络配置问题。有关更多信息，请参阅《AWS Systems Manager Automation 运行手册参考用户指南》**中的 [AWSSupport-TroubleshootECSContainerInstance](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshoot-ecs-container-instance.html)。  
有关特定任务定义参数和代理配置变量所需的属性的更多信息，请参阅[Fargate 的 Amazon ECS 任务定义参数](task_definition_parameters.md)和 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

## 服务（*service-name*）无法放置任务。原因：目前容量不可用。请稍后重试或在其他可用区中重试。
<a name="service-event-messages-15"></a>

目前没有可用容量来运行您的服务。

您可以执行以下操作之一：
+ 等待 Fargate 容量或 EC2 容器实例变为可用。
+ 重新启动服务并指定其他子网。

## 服务（*service-name*）部署失败：任务无法启动。
<a name="service-event-messages-16"></a>

您的服务中的任务无法启动。

有关如何调试已停止任务的信息，请参阅[Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md)。

## 服务（*service-name*）等待 Amazon ECS 代理启动时超时。请查看 /var/log/ecs/ecs-agent.log 中的日志。
<a name="service-event-messages-17"></a>

用于任务放置的最近匹配容器实例上的 Amazon ECS 容器代理已断开连接。如果您可以通过 SSH 连接到容器实例，则可以查看代理日志。有关更多信息，请参阅 [Amazon ECS 容器代理日志配置参数](ecs-agent-versions.md#agent-logs)。您还应验证代理是否正在该实例上运行。如果您使用的是经 Amazon ECS 优化的 AMI，则可以尝试通过以下命令停止并重新启动代理。
+ 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI

  ```
  sudo systemctl restart ecs
  ```
+ 对于经 Amazon ECS 优化的 Amazon Linux AMI

  ```
  sudo stop ecs && sudo start ecs
  ```

## 服务（*service-name*）任务集（*taskSet-ID*）（任务 *task-id*）在目标组（*targetGroup-ARN*）中运行不正常，原因是 `TARGET GROUP IS NOT FOUND`。
<a name="service-event-messages-18"></a>

由于未找到目标组，该服务的任务集无法通过运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。您应删除，然后重新创建该服务。除非相应的 Amazon ECS 服务已删除，否则不要删除任何 Elastic Load Balancing 目标组。

## 服务 (*service-name*) 任务集 (*taskSet-ID*)（任务 *task-id*）在目标组 (*targetGroup-ARN)*) 中运行不正常，原因是 `TARGET IS NOT FOUND`。
<a name="service-event-messages-19"></a>

由于未找到目标，该服务的任务集无法通过运行状况检查。该消息包含任务 ID，有助于确定未通过运行状况检查的具体任务。

## IAM 权限策略配置错误或已更改，ECS 无法再维护您的服务
<a name="service-event-messages-20"></a>

由于 IAM 权限策略配置错误或进行了更改，该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色可能缺少所需的权限。

要解决此问题，请将必要的权限添加到 IAM 角色。有关管理 IAM 权限策略的更多信息，请参阅《IAM 用户指南》**中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

## IAM 信任关系配置错误或已更改，ECS 无法再维护您的服务
<a name="service-event-messages-21"></a>

由于 IAM 信任关系配置错误或更改，该服务无法维护任务。与您的 ECS 服务或任务关联的 IAM 角色具有的信任策略可能不正确。

要解决此问题，请为任务定义中使用的角色配置信任策略。有关为自定义角色创建信任策略的更多信息，请参阅《IAM 用户指南》**中的[为自定义使用案例创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

## 服务（*service-name*）无法为部署 *deployment-id* 启动 *number* 个任务。
<a name="service-event-messages-22"></a>

当部署工作流成功启动某些任务，但由于容量不足错误而无法启动所有请求的任务时，服务计划程序会发送此事件消息。这通常发生在启用断路器时，并提供有关部署可能失败或回滚的原因。

该消息包含具体的失败原因，例如 CPU、内存不足或其他资源约束。这有助于您了解需要解决哪些资源问题才能解决部署问题。

有关更多信息，请参阅 [服务（*‬service-name‭*）无法下达任务，因为没有满足所有条件的容器实例。](#service-event-messages-1)。

## 由于已超过任务预置容量限制，服务（*service-name*）无法在您的集群中放置任务。
<a name="service-event-messages-23"></a>

当您的集群中同时处于 `PROVISIONING` 状态的任务数量达到 500 个这一限制时，服务计划程序会发送此事件消息。这是集群级别的限制，而不是特定于某个服务的问题。

当您启动一个所需任务数量较高且预置容量有限的服务时，或者同时启动多个服务而导致任务流失率较高时，通常会发生这种情况。

要解决此问题，请执行以下操作：
+ 等待现有任务完成预置并进入 `RUNNING` 状态。
+ 考虑逐渐扩展服务，以避免达到预置限制。
+ 检查集群的容量提供程序配置，确保有足够的资源可用。

有关 Amazon ECS 服务配额的更多信息，请参阅《Amazon Web Services 一般参考》**中的 [Amazon Elastic Container Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html)。

# Amazon ECS 服务运行不正常事件消息
<a name="service-unhealthy-event-messages"></a>

以下是服务运行不正常事件消息的示例。

## EC2：（服务 *service-name*）（任务 *task-id*）（实例 *instance-id*）（端口 *port-number*）在（目标组 *target-group-name*）中运行不正常，原因是（原因 *failure-reason*）
<a name="service-unhealthy-ec2"></a>

此消息指示在某个 EC2 实例上运行的一个任务未通过运行状况检查。有关更多信息，请参阅下列内容：
+ [如何让使用 EC2 的 Amazon ECS 任务通过应用程序负载均衡器运行状况检查？](https://repost.aws/knowledge-center/troubleshoot-unhealthy-checks-ecs)

## 具有以下任务集的 EC2：（服务 *service-name*，任务集 *taskSet-id*）（任务 *task-id*）（实例 *instance-id*）（端口 *port-number*）在（目标组 *target-group-name*）中运行不正常，原因是（原因 *failure-reason*）
<a name="service-unhealthy-ec2-taskset"></a>

此消息指示在某个 EC2 实例上运行的一个任务集中的任务未通过运行状况检查。有关更多信息，请参阅下列内容：
+ [如何让使用 EC2 的 Amazon ECS 任务通过应用程序负载均衡器运行状况检查？](https://repost.aws/knowledge-center/troubleshoot-unhealthy-checks-ecs)

## Fargate：（服务 *service-name*）（任务 *task-id*）（端口 *port-number*）在（目标组 *target-group-name*）中运行不正常，原因是（原因 *failure-reason*）
<a name="service-unhealthy-fargate"></a>

此消息指示某个 Fargate 任务未通过运行状况检查。

有关 Fargate 任务运行状况检查失败问题排查的更多信息，请参阅[如何对 Fargate 上 Amazon ECS 任务的运行状况检查失败进行故障排除？](https://repost.aws/knowledge-center/ecs-fargate-health-check-failures)。

## 具有任务集的 Fargate：（服务 *service-name*，任务集 *taskSet-id*）（任务 *task-id*）（端口 *port-number*）在（目标组 *target-group-name*）中运行不正常，原因是（原因 *failure-reason*）
<a name="service-unhealthy-fargate-taskset"></a>

此消息指示在 Fargate 上运行的一个任务集中的任务未通过运行状况检查。

有关 Fargate 任务运行状况检查失败问题排查的更多信息，请参阅[如何对 Fargate 上 Amazon ECS 任务的运行状况检查失败进行故障排除？](https://repost.aws/knowledge-center/ecs-fargate-health-check-failures)。

# Amazon ECS 可用区服务重新平衡服务事件消息
<a name="service-rebalancing-event-messages-list"></a>

以下是您可能会看到的服务事件消息的示例。

## 服务（*service-name*）未与*可用区 1* 中的 *number-tasks* 个任务、*可用区 2* 中的 *number-tasks* 个任务和*可用区 3* 中的 *number-tasks* 个任务进行可用区平衡。正在进行可用区重新平衡。
<a name="service-rebalancing-started"></a>

当任务数在可用区之间分布不均匀时，服务调度器会发送 `service (service-name) is not AZ balanced` 服务事件。无需采取任何操作。这是信息事件。

## 服务（*service-name*）已与*可用区 1* 中的 *number-tasks* 个任务、*可用区 2* 中的 *number-tasks* 个任务和*可用区 3* 中的 *number-tasks* 个任务进行可用区平衡。
<a name="service-rebalancing-completed"></a>

当可用区服务重新平衡完成时，服务调度器会发送 `service (service-name) is AZ balanced` 服务事件。无需采取任何操作。这是信息事件。

## *service-name* 已在*可用区*启动 *number-tasks* 个任务进行可用区重新平衡：*task-ids*。
<a name="service-rebalancing-tasks-started"></a>

由于服务重新平衡，在可用区中启动任务时，服务调度器会发送 *service-name*/*task-set-name* 已在*可用区*服务事件中启动 *number* 个任务。无需采取任何操作。这是信息事件。

## 由于可用区重新平衡，*service-name* 已停止在*可用区*中运行的 *number-tasks* 个任务：*task-id*。
<a name="service-rebalancing-tasks-stopped"></a>

由于服务重新平衡，在可用区中停止任务时，服务调度器会发送 *service-name*/*task-set-name* 已在*可用区*服务事件中停止 *number* 个任务。无需采取任何操作。这是信息事件。

## 服务（*‬service-name*‭）无法在*可用区*中下达任务，因为没有满足所有条件的容器实例。
<a name="service-rebalancing-placement-failure-instance"></a>

因为没有满足所有条件的容器实例，服务调度器会发送 *service-name* 无法在*可用区*中下达任务。要解决此问题，请在可用区中启动实例。

## 服务（*service-name*）无法在*可用区*中下达任务。
<a name="service-rebalancing-placement-failure"></a>

当您使用 Fargate 且没有可用容量时，服务调度器会发送 *service-name* 无法在*可用区*服务事件中放置任务。

您可以在错误消息中的可用区中添加其他子网，也可以联系 支持 获取更多容量。

## 服务（*service-name*）无法进行可用区重新平衡，因为 *task-set-name* 由于 *reason* 无法横向缩减。
<a name="service-rebalancing-task-protection-failure"></a>

当您使用任务缩容保护时，由于服务事件的 *reason*，*task-set-name* 无法横向缩减，服务调度器会发送 *service-name* 无法进行可用区重新平衡。

 您可以执行以下操作之一：
+ 等到当前任务的保护到期，使它们能够被终止。
+ 确定哪些任务可以停止，然后使用 `UpdateTaskProtection` API 和 `protectionEnabled` 选项将 `false` 设置为取消对这些任务的保护。
+ 增加服务的所需任务计数，以大于受保护任务的数量。

## 服务（*service-name*）已停止可用区重新平衡。
<a name="service-rebalancing-operation-stopped"></a>

当可用区重新平衡操作停止时，服务调度器会发送 *service-name* 已停止可用区重新平衡服务事件。这是信息事件。Amazon ECS 会发送更多事件，当中会提供更多信息。

# 对 Amazon ECS 中的服务负载均衡器进行故障排除
<a name="troubleshoot-service-load-balancers"></a>

Amazon ECS 服务可向 Elastic Load Balancing 负载均衡器注册任务。负载均衡器配置错误是导致任务停止的常见原因。如果您的已停止任务是由使用负载均衡器的服务启动的，请考虑以下可能原因。

**Amazon ECS 服务相关角色不存在**  
Amazon ECS 服务链接角色允许 Amazon ECS 服务使用 Elastic Load Balancing 器注册容器实例。将在您的账户中创建该服务相关角色。有关更多信息，请参阅 [对 Amazon ECS 使用服务相关角色](using-service-linked-roles.md)。

**容器实例安全组**  
如果您的容器已映射到容器实例上的端口 80，则您的容器实例安全组必须允许端口 80 上的入站流量才能通过负载均衡器运行状况检查。

**未为所有可用区配置 Elastic Load Balancing 负载均衡器**  
您的负载均衡器应配置为使用一个区域中的所有可用区，或至少使用您的容器实例所在的所有可用区。如果服务使用一个负载均衡器，并在驻留在可用区（尚未为该可用区配置使用负载均衡器）中的容器实例上启动一个任务，则该任务永不会通过运行状况检查。这会导致任务被终止。

**Elastic Load Balancing 负载均衡器运行状况检查配置错误**  
负载均衡器运行状况检查参数可能过于严格或指向不存在的资源。如果确定容器实例运行状况不佳，则系统会从负载均衡器中删除该容器实例。确保验证是否已为服务负载均衡器正确配置以下参数。    
Ping 端口  
负载均衡器运行状况检查的 **Ping Port** 值是该检查要确定其运行状况是否正常的容器实例上的端口。如果此端口配置错误，负载均衡器可能会从自身注销容器实例。此端口应配置为使用服务的任务定义中用于运行状况检查的容器的 `hostPort` 值。  
Ping 路径  
这是负载均衡器运行状况检查的一部分。它是应用程序上的一个端点，可在应用程序运行正常时返回成功状态代码（例如 200）。此值通常设置为 `index.html`，但如果您的服务未响应该请求，则无法通过运行状况检查。如果您的容器没有 `index.html` 文件，您可以将此值设置为 `/`，以将容器实例的基本 URL 作为目标。  
响应超时  
这是您的容器必须响应运行状况检查 ping 的时间量。如果此值小于响应所需的时间量，则无法通过运行状况检查。  
运行状况检查间隔  
这是运行状况检查 ping 之间的时间量。您的运行状况检查间隔越短，您的容器实例就越快达到 **Unhealthy Threshold**。  
不正常阈值  
这是您的容器实例被视为不正常之前，允许未通过运行状况检查的次数。如果您的不正常阈值为 2，并且运行状况检查间隔为 30 秒，则您的任务在被视为不正常之前有 60 秒的时间响应运行状况检查 ping。您可以增大不正常阈值或运行状况检查间隔，以便为您的任务提供更多响应时间。

**无法更新服务** *servicename***：任务定义中的负载均衡器容器名称或端口已更改**  
如果您的服务使用负载均衡器，则您可以使用 AWS CLI 或开发工具包来修改负载均衡器配置。有关如何修改配置的信息，请参阅 *Amazon Elastic Container Service API 参考*中的 [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)。如果您更新服务的任务定义，则在负载均衡器中指定的容器名称和容器端口必须保留在任务定义中。

**您已达到可同时运行的任务数量的上限。**  
对于新账户，您的配额可能低于服务配额。可以在 Service Quotas 控制台中查看您的账户服务配额。要请求提高配额，请参阅《服务配额用户指南》**中的[请求提高配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

# 对 Amazon ECS 中的服务自动扩缩进行故障排除
<a name="troubleshoot-service-auto-scaling"></a>

Application Auto Scaling 在 Amazon ECS 部署过程中关闭横向缩减进程，并在部署完成后恢复。但是，在部署过程中，除非暂停，否则将继续发生扩展进程。有关更多信息，请参阅[暂停和恢复 Application Auto Scaling 的扩缩](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-suspend-resume-scaling.html)。

# 控制台中的 Amazon ECS 事件捕获
<a name="task-lifecycle-events"></a>

Amazon ECS 控制台提供事件捕获功能，可通过 EventBridge 将 Amazon ECS 生成的事件（例如服务操作和任务状态更改）存储到 Amazon CloudWatch Logs。此功能包括一个带有筛选功能的查询接口，用于监控和故障排除。

事件提供有关服务部署、服务、任务和实例如何运行的详细信息。您可以使用此信息来排查任务或服务部署失败。

开启事件捕获后，您可以访问在您选择的保留期内 Amazon ECS 生成的所有事件，其超出了最近 100 个未经筛选的事件或仅在 1 小时内可见的已停止任务的原生限制。

## 工作原理
<a name="task-lifecycle-events-overview"></a>

事件捕获使用 EventBridge 将事件存储在预定义的 Amazon CloudWatch Logs 日志组中。Amazon ECS 控制台提供预构建的查询和筛选选项，并将事件关联起来，以直观的格式提供任务生命周期。

您可以查询和检索以下类型的事件：
+ **服务操作事件** – 帮助识别预置或资源分配问题
+ **任务生命周期事件** – 帮助确定任务或容器启动失败或停止运行的原因

Amazon ECS 控制台允许您一键设置事件捕获，并提供常用查询和筛选功能，而无需您学习查询语言或在多个控制台之间导航。

## 事件类型
<a name="task-lifecycle-events-types"></a>

事件捕获会将所有 Amazon ECS 生成的事件按以下类别存储：

任务状态更改事件  
容器停止和其他终止事件，您可以利用这些事件进行故障排除或监控任务生命周期时间线。

服务操作  
诸如达到稳定状态、任务放置失败或资源限制等事件。

服务部署状态更改  
由断路器和回滚设置触发的事件（例如，正在进行中、已完成或失败的部署），用于监控服务部署的状态。

容器实例状态更改  
对于 EC2 和 Amazon ECS 托管实例上的工作负载，事件会显示已连接和已断开连接状态。

## 日志组配置
<a name="task-lifecycle-events-log-group"></a>

启用事件捕获后，Amazon ECS 会自动创建以下资源：
+ 名为 `/aws/events/ecs/containerinsights/${clusterName}/performance` 的 Amazon CloudWatch Logs 日志组
+ 一条 EventBridge 规则，用于从 `aws.ecs` 源摄取所有事件并将其转发到日志组

您可以为日志组指定保留期，1 天到 10 年不等。默认保留期为 7 天。

## 注意事项
<a name="task-lifecycle-events-limitations"></a>

使用事件捕获时，请考虑以下事项：
+ 为了简单起见，事件捕获会存储所有事件。您无法在 Amazon ECS 控制台中配置规则以仅捕获特定事件。
+ Amazon ECS 控制台提供预定义的查询条件。对于高级查询，请使用 Amazon CloudWatch Logs Logs Insights 直接查询日志组。
+ Amazon ECS 控制台不提供 Live Tail 功能。直接将 Amazon CloudWatch Logs 用于 Live Tail。
+ 禁用事件捕获时，EventBridge 规则将被删除。
+ 事件捕获会对 EventBridge 数据摄取、Amazon CloudWatch Logs 存储和查询执行产生额外费用。

  有关 EventBridge 定价的信息，请参阅 [EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。

  有关 CloudWatch 定价的信息，请参阅 [CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

## 基于事件的故障排除
<a name="task-lifecycle-events-troubleshooting"></a>

使用 Amazon ECS 生成的事件来解答常见的故障排除问题。

### 任务失败分析
<a name="task-lifecycle-events-task-failures"></a>

您可以查看 `STOPPED` 任务状态更改事件、停止代码和容器退出代码，以确定任务启动失败或运行失败的原因。

您可以查看服务操作事件中的放置失败和资源约束信息，以确定任务因资源约束而放置失败的原因

### 常见任务失败场景
<a name="task-lifecycle-events-common-issues"></a>

最常见的异常任务失败与下面的问题有关：
+ CI/CD 服务部署失败
+ 自动扩缩失败
+ 任务重新平衡失败
+ 异常容器退出，例如内存不足（OOM）错误

异常任务失败会产生带有 `EssentialContainerExited` 或 `TaskFailedToStart` 停止代码的 `STOPPED` 任务状态更改事件。您可以按这些停止代码进行筛选，以检查容器执行和停止行为。

# 为现有 Amazon ECS 集群开启事件捕获
<a name="turn-on-event-capture-existing-cluster"></a>

您可以在现有的 Amazon ECS 集群上启用事件捕获，通过 EventBridge 将 Amazon ECS 生成的事件存储到 Amazon CloudWatch Logs 中。此功能可帮助您监控和排查任务失败、服务部署和其他集群活动。

启用事件捕获后，Amazon ECS 会创建以下资源：
+ 名为 `/aws/events/ecs/containerinsights/${clusterName}/performance` 的 Amazon CloudWatch Logs 日志组
+ 一条 EventBridge 规则，用于捕获来自 `aws.ecs` 源的所有事件

集群视图中会显示**历史记录**选项卡，您可以在其中查询任务生命周期事件和服务操作。事件捕获会立即开始，并根据您指定的保留期存储所有 Amazon ECS 生成的事件。

## 先决条件
<a name="turn-on-event-capture-prerequisites"></a>
+ 现有的 Amazon ECS 集群
+ 修改集群设置和创建 Amazon CloudWatch Logs 资源所需的适当 IAM 权限

## 使用控制台开启事件捕获
<a name="turn-on-event-capture-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**。

1. 选择要启用事件捕获的集群。

   此时将显示集群详细信息页面。

1. 选择**配置**。

1. 在 **ECS 事件**部分中，选择**开启事件捕获**。

   此时将显示**开启事件捕获**对话框。

1. 对于**过期事件**，选择 Amazon CloudWatch Logs 日志组的保留期。默认值为 7 天。

1. 选择**打开**。

# 查看 Amazon ECS 服务和任务状态更改事件
<a name="viewing-state-events"></a>

Amazon ECS 控制台提供事件捕获功能，可通过 EventBridge 将 Amazon ECS 生成的事件（例如服务操作和任务状态更改）存储到 Amazon CloudWatch Logs。此功能包括一个带有筛选功能的查询接口，用于增强监控和故障排除。

事件提供有关服务部署、服务、任务和实例如何运行的详细信息。您可以使用此信息来排查任务或服务部署失败。

您可以使用以下任何条件来筛选事件：
+  部署 ID（这仅在服务详细信息页面上可用） 
+ 开始时间
+ 结束时间 
+ 服务名称（仅适用于集群详细信息页面、服务详细信息页面，这默认为当前服务） 
+ 任务 ID 
+ 任务上次状态 
+ 任务定义系列 
+ 任务定义修订 

## 在集群级别查看事件
<a name="view-cluster-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 选择**集群**。

   此时将显示集群列表页面。

1. 选择 集群。

   此时将显示集群详细信息页面。

1. 在**历史记录**下，确定要查看的事件。

   1. 要查看服务操作事件，请选择**服务操作事件**。

   1. 要查看任务状态更改事件，请选择**任务状态更改事件**。

   1. （可选）在**查询条件**中，输入要查看的事件的筛选条件。

1. 选择**运行查询**。

   事件以列表形式显示。

1. 要查看事件的完整详细信息，请选择事件。

## 在服务级别查看
<a name="tasks-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在 **Clusters**（集群）页面上，选择集群。

1. 在“集群详细信息”页面，找到**服务**部分，然后选择服务。

   此时将显示服务详细信息页面。

1. 在**历史记录**下，确定要查看的事件。

   1. 要查看服务操作事件，请选择**服务操作事件**。

   1. 要查看任务状态更改事件，请选择**任务状态更改事件**。

   1. （可选）在**查询条件**中，输入要查看的事件的筛选条件。

1. 选择**运行查询**。

   事件以列表形式显示。

1. 要查看事件的完整详细信息，请选择事件。

# 排查 Amazon ECS 任务定义 CPU 或内存无效错误
<a name="task-cpu-memory-error"></a>

使用 Amazon ECS API 或 AWS CLI 注册任务定义时，或者如果指定了无效的 `cpu` 或 `memory`，则返回以下错误。

```
An error occurred (ClientException) when calling the RegisterTaskDefinition operation: Invalid 'cpu' setting for task. 
```

**注意**  
使用 Terraform 时，可能会返回以下错误。  

```
Error: ClientException: No Fargate configuration exists for given values.
```

要解决此问题，您必须在任务定义中为任务 CPU 和内存指定受支持的值。在任务定义中，`cpu` 值可以用 CPU 单元数或 vCPU 数表示。注册任务定义时，其将转换为指示 CPU 单元的整数。在任务定义中，`memory` 值可以用 MiB 或 GB 表示。注册任务定义时，它会转换为表示 MiB 的整数。

对于为 `requiresCompatibilities` 参数指定的 `FARGATE` 任务定义（即使也指定了 `EC2`），必须使用下表中的一个值。这些值决定了 CPU 和内存参数支持的值范围。

对于 Fargate 上托管的任务，下表显示了有效的 CPU 和内存组合。JSON 文件中的内存值以 MiB 为单位指定。您可以通过将 GB 值乘以 1024 来其转换为 MiB。例如 1 GB = 1024 MiB。


|  CPU 值  |  内存值  |  AWS Fargate 支持的操作系统  | 
| --- | --- | --- | 
|  256 (.25 vCPU)  |  512MiB、1GB、2GB  |  Linux  | 
|  512 (.5 vCPU)  |  1GB、2GB、3GB、4GB  |  Linux  | 
|  1024 (1 vCPU)  |  2GB、3GB、4GB、5GB、6GB、7GB、8GB  |  Linux、Windows  | 
|  2048 (2 vCPU)  |  4 GB 到 16 GB 之间（以 1 GB 为增量）  |  Linux、Windows  | 
|  4096 (4 vCPU)  |  8 GB 到 30 GB 之间（以 1 GB 为增量）  |  Linux、Windows  | 
|  8192 (8 vCPU)  此选项需要 Linux 平台 `1.4.0` 或更高版本。   |  16 GB 到 60 GB 之间（以 4 GB 为增量）  |  Linux  | 
|  16384 (16vCPU)  此选项需要 Linux 平台 `1.4.0` 或更高版本。   |  32 GB 到 120 GB 之间（以 8 GB 为增量）  |  Linux  | 

对于 Amazon EC2 上托管的任务，受支持的任务 CPU 值介于 0.25 个 vCPU 与 192 个 vCPU 之间。

EC2 和 Fargate 使用不同的 CPU 控制机制：
+ 在 Amazon EC2 上托管的任务：Amazon ECS 使用 CPU 周期和 CPU 配额来控制任务大小 CPU 硬限制。当您在任务定义中指定 vCPU 时，Amazon ECS 会将该值转换为适用于 `cgroup` 的 CPU 周期和 CPU 配额设置。
+ 对于在 Fargate 上托管的任务：Amazon ECS 使用 CPU 份额来控制 CPU 分配。Fargate 任务不使用 CPU 配额和周期值来限制 CPU。

对于 Amazon EC2 任务，CPU 配额用于控制在给定 CPU 周期内授予 `cgroup` 的 CPU 时间。这两个设置均以微秒为单位表示。当 CPU 配额等于 CPU 周期时，意味着 `cgroup` 可以在一个 vCPU 上执行高达 100%（或在多个 vCPU 上执行任意比例，总计为 100%）。CPU 配额的最大值为 1000000us，CPU 周期最小为 1 ms。您可以使用这些值来设置 CPU 数量的限制。当您在不更改 CPU 配额的情况下更改 CPU 周期时，您的有效限制与您在任务定义中指定的限制不同。

100 ms 周期允许 vCPU 的范围为 0.125 到 10。

**注意**  
Windows 容器将忽略任务级 CPU 和内存参数。

# 查看 Amazon ECS 容器代理日志
<a name="logs"></a>

Amazon ECS 将日志存储在容器实例的 `/var/log/ecs` 文件夹中。Amazon ECS 容器代理和控制容器实例上的代理状态（启动/停止）的 `ecs-init` 服务提供了日志。您可以通过 SSH 连接到容器实例来查看这些日志文件。

**注意**  
如果您不确定如何收集容器实例上的所有日志，则可使用 Amazon ECS 日志收集器。有关更多信息，请参阅 [使用 Amazon ECS 日志收集器收集容器日志](ecs-logs-collector.md)。

## Linux 操作系统
<a name="logs-linux"></a>

`ecs-init` 过程将日志存储在 `/var/log/ecs/ecs-init.log` 中。

`ecs-init.log` 文件包含有关容器代理生命周期管理、配置和引导的信息。

您可以使用以下命令查看日志文件。

```
cat /var/log/ecs/ecs-init.log
```

输出：

```
2018-02-16T18:13:54Z [INFO] pre-start
2018-02-16T18:13:56Z [INFO] start
2018-02-16T18:13:56Z [INFO] No existing agent container to remove.
2018-02-16T18:13:56Z [INFO] Starting Amazon Elastic Container Service Agent
```

## Windows 操作系统
<a name="logs-windows"></a>

您可以使用适用于 Windows 的 Amazon ECS 日志收集器。有关更多信息，请参阅 Github 上的 [Amazon ECS Logs Collector For Windows](https://github.com/awslabs/aws-ecs-logs-collector-for-windows?tab=readme-ov-file#aws-ecs-logs-collector-for-windows)。

1. 连接到您的实例。

1. 打开 PowerShell，然后以管理员权限运行以下命令。这些命令会下载脚本并收集日志。

   ```
   Invoke-WebRequest -OutFile ecs-logs-collector.ps1 https://raw.githubusercontent.com/awslabs/aws-ecs-logs-collector-for-windows/master/ecs-logs-collector.ps1
   .\ecs-logs-collector.ps1
   ```

您可以为 Amazon ECS 代理和 Docker 进程守护程序开启调试日志记录。使用此选项，脚本将可以在开启调试模式之前收集日志。该脚本将重新启动 Docker 进程守护程序和 Amazon ECS 代理，然后终止该实例上运行的所有容器。请首先清空容器实例并将所有重要任务移至其他容器实例，然后再运行以下命令。

运行以下命令以开启日志记录。

```
.\ecs-logs-collector.ps1 -RunMode debug
```

# 使用 Amazon ECS 日志收集器收集容器日志
<a name="ecs-logs-collector"></a>

**注意**  
您无法在 Amazon ECS 托管实例上使用 Amazon ECS 日志收集器。

如果您不确定如何收集容器实例上的所有日志，您可以使用 Amazon ECS 日志收集器。在 GitHub 上提供了适用于 [Linux](https://github.com/awslabs/ecs-logs-collector) 和 [Windows](https://github.com/awslabs/aws-ecs-logs-collector-for-windows) 的日志收集器。此脚本会收集一般操作系统日志以及 Docker 和 Amazon ECS 容器代理日志，这些日志可以帮助解决 AWS 支持 支持案例。然后，它会压缩和存档收集到的信息到单个文件中，该文件可以轻松共享以用于诊断目的。它还支持在 Amazon Linux 变体（例如经 Amazon ECS 优化的 AMI）上为 Docker 进程守护程序和 Amazon ECS 容器代理启用调试模式。

**注意**  
在 Amazon Linux 经 Amazon ECS 优化的 AMI 版本 20250909 及更高版本上，Amazon ECS 日志收集器预安装在 `/opt/amazon/ecs/ecs-logs-collector.sh` 下，无需从 GitHub 下载即可使用。有关更多信息，请参阅经 ECS 优化的 AMI 文档中的 [ECS Logs Collector](https://github.com/aws/amazon-ecs-ami?tab=readme-ov-file#ecs-logs-collector)。

目前，Amazon ECS 日志收集器支持以下操作系统：
+ Amazon Linux
+ Red Hat Enterprise Linux
+ Ubuntu
+ Windows Server

**运行适用于 Linux 的 Amazon ECS 日志收集器（经 ECS 优化的 AMI）**

1. 连接到您的容器实例。

1. 运行脚本以收集日志并创建存档。
**注意**  
要为 Docker 进程守护程序和 Amazon ECS 容器代理启用调试模式，可将 `--mode=enable-debug` 选项添加到以下命令。这可能会重新启动 Docker 进程守护程序，从而终止正在该实例上运行的所有容器。启用调试模式前，应考虑耗尽容器实例并将所有重要任务迁移到其他容器实例。有关更多信息，请参阅 [耗尽 Amazon ECS 容器实例](container-instance-draining.md)。

   ```
   [ec2-user ~]$ sudo /opt/amazon/ecs/ecs-logs-collector.sh
   ```

运行脚本后，您可以在脚本创建的 `collect` 文件夹中检查收集的日志。`collect.tgz` 文件是所有日志的压缩存档，您可以与 AWS 支持 支持共享该文件以帮助诊断。

**要下载并运行适用于 Linux 的 Amazon ECS 日志收集器**

1. 连接到您的容器实例。

1. 下载 Amazon ECS 日志收集器脚本。

   ```
   curl -O https://raw.githubusercontent.com/awslabs/ecs-logs-collector/master/ecs-logs-collector.sh
   ```

1. 运行脚本以收集日志并创建存档。

   ```
   $ sudo bash ./ecs-logs-collector.sh
   ```

**下载并运行适用于 Windows 的 Amazon ECS 日志收集器**

1. 连接到您的容器实例。有关更多信息，请参阅《Amazon EC2 用户指南》中的[使用 RDP 连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html)**。

1. 使用 PowerShell 下载 Amazon ECS 日志收集器脚本。

   ```
   Invoke-WebRequest -OutFile ecs-logs-collector.ps1 https://raw.githubusercontent.com/awslabs/aws-ecs-logs-collector-for-windows/master/ecs-logs-collector.ps1
   ```

1. 运行脚本以收集日志并创建存档。
**注意**  
要为 Docker 进程守护程序和 Amazon ECS 容器代理启用调试模式，可将 `-RunMode debug` 选项添加到以下命令。这会重新启动 Docker 进程守护程序，从而终止正在该实例上运行的所有容器。启用调试模式前，应考虑耗尽容器实例并将所有重要任务迁移到其他容器实例。有关更多信息，请参阅 [耗尽 Amazon ECS 容器实例](container-instance-draining.md)。

   ```
   .\ecs-logs-collector.ps1
   ```

运行脚本后，您可以在脚本创建的 `collect` 文件夹中检查收集的日志。`collect.tgz` 文件是所有日志的压缩存档，您可以与 AWS 支持共享该文件以帮助诊断。

# 使用代理自检来检索 Amazon ECS 诊断详细信息
<a name="introspection-diag"></a>

Amazon ECS 代理自检 API 可提供有关 Amazon ECS 代理和容器实例总体状态的信息。

 您可以使用代理自检 API 来获取任务中某个容器的 Docker ID。您可以使用 SSH 连接到容器实例来使用代理自检 API。

**重要**  
您的容器实例必须具有相应的 IAM 角色，以允许访问 Amazon ECS 来到达自检 API。有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。

以下示例介绍两个任务，一个任务目前正在运行，另一个任务已停止。

**注意**  
以下命令通过 **python -mjson.tool** 传输以提高可读性。

```
curl http://localhost:51678/v1/tasks | python -mjson.tool
```

输出：

```
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1095  100  1095    0     0   117k      0 --:--:-- --:--:-- --:--:--  133k
{
    "Tasks": [
        {
            "Arn": "arn:aws:ecs:us-west-2:aws_account_id:task/090eff9b-1ce3-4db6-848a-a8d14064fd24",
            "Containers": [
                {
                    "DockerId": "189a8ff4b5f04affe40e5160a5ffadca395136eb5faf4950c57963c06f82c76d",
                    "DockerName": "ecs-console-sample-app-static-6-simple-app-86caf9bcabe3e9c61600",
                    "Name": "simple-app"
                },
                {
                    "DockerId": "f7f1f8a7a245c5da83aa92729bd28c6bcb004d1f6a35409e4207e1d34030e966",
                    "DockerName": "ecs-console-sample-app-static-6-busybox-ce83ce978a87a890ab01",
                    "Name": "busybox"
                }
            ],
            "Family": "console-sample-app-static",
            "KnownStatus": "STOPPED",
            "Version": "6"
        },
        {
            "Arn": "arn:aws:ecs:us-west-2:aws_account_id:task/1810e302-eaea-4da9-a638-097bea534740",
            "Containers": [
                {
                    "DockerId": "dc7240fe892ab233dbbcee5044d95e1456c120dba9a6b56ec513da45c38e3aeb",
                    "DockerName": "ecs-console-sample-app-static-6-simple-app-f0e5859699a7aecfb101",
                    "Name": "simple-app"
                },
                {
                    "DockerId": "096d685fb85a1ff3e021c8254672ab8497e3c13986b9cf005cbae9460b7b901e",
                    "DockerName": "ecs-console-sample-app-static-6-busybox-92e4b8d0ecd0cce69a01",
                    "Name": "busybox"
                }
            ],
            "DesiredStatus": "RUNNING",
            "Family": "console-sample-app-static",
            "KnownStatus": "RUNNING",
            "Version": "6"
        }
    ]
}
```

在上述示例中，已停止的任务（*090eff9b-1ce3-4db6-848a-a8d14064fd24*）具有两个容器。您可以使用 **docker inspect *container-ID*** 查看每个容器的详细信息。有关更多信息，请参阅 [Amazon ECS 容器自检](ecs-agent-introspection.md)。

# Amazon ECS 中的 Docker 诊断
<a name="docker-diags"></a>

Docker 提供了几种诊断工具，可帮助您解决与容器和任务相关的问题。有关所有可用的 Docker 命令行实用工具的更多信息，请参阅 Docker 文档中的 [Docker CLI reference](https://docs.docker.com/reference/cli/docker/)。您可以通过使用 SSH 连接到容器实例来访问 Docker 命令行实用工具。

Docker 容器报告的退出代码也可提供一些诊断信息（例如，退出代码 137 表示容器已收到 `SIGKILL` 信号）。有关更多信息，请参阅 Docker 文档中的[退出状态](https://docs.docker.com/reference/cli/docker/container/run/#exit-status)。

## 列出 Amazon ECS 中的 Docker 容器
<a name="docker-ps"></a>

您可以在容器实例上使用 **docker ps** 命令列出正在运行的容器。在以下示例中，仅 Amazon ECS 容器代理正在运行。有关更多信息，请参阅 Docker 文档中的 [docker ps](https://docs.docker.com/reference/cli/docker/#ps)。

```
docker ps
```

输出：

```
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                        NAMES
cee0d6986de0        amazon/amazon-ecs-agent:latest   "/agent"            22 hours ago        Up 22 hours         127.0.0.1:51678->51678/tcp   ecs-agent
```

您可以使用 **docker ps -a** 命令来查看所有容器（甚至是已停止或已终止的容器）。这对于列出意外停止的容器很有用。在以下示例中，容器 `f7f1f8a7a245` 已在 9 秒前退出，因此不会显示在未带 `-a` 标记的 **docker ps** 输出中。

```
docker ps -a
```

输出：

```
CONTAINER ID        IMAGE                                       COMMAND                CREATED             STATUS                        PORTS                        NAMES
db4d48e411b1        amazon/ecs-emptyvolume-base:autogenerated   "not-applicable"       19 seconds ago                                                                 ecs-console-sample-app-static-6-internalecs-emptyvolume-source-c09288a6b0cba8a53700
f7f1f8a7a245        busybox:buildroot-2014.02                   "\"sh -c '/bin/sh -c   22 hours ago        Exited (137) 9 seconds ago                                 ecs-console-sample-app-static-6-busybox-ce83ce978a87a890ab01
189a8ff4b5f0        httpd:2                                     "httpd-foreground"     22 hours ago        Exited (137) 40 seconds ago                                ecs-console-sample-app-static-6-simple-app-86caf9bcabe3e9c61600
0c7dca9321e3        amazon/ecs-emptyvolume-base:autogenerated   "not-applicable"       22 hours ago                                                                   ecs-console-sample-app-static-6-internalecs-emptyvolume-source-90fefaa68498a8a80700
cee0d6986de0        amazon/amazon-ecs-agent:latest              "/agent"               22 hours ago        Up 22 hours                   127.0.0.1:51678->51678/tcp   ecs-agent
```

## 查看 Amazon ECS 中的 Docker 日志
<a name="docker-logs"></a>

您可以使用 **docker logs** 命令查看容器的 `STDOUT` 和 `STDERR` 流。在此示例中，为简洁起见，将为 *dc7240fe892a* 容器显示日志，并通过 **head** 命令传输日志。有关更多信息，请转至 Docker 文档中的 [docker logs](https://docs.docker.com/reference/cli/docker/#logs)。

**注意**  
如果使用原定设置 `json` 日志驱动程序，则 Docker 日志仅在容器实例上可用。如果已配置任务使用 `awslogs` 日志驱动程序，则容器日志在 CloudWatch Logs 中可用。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 CloudWatch](using_awslogs.md)。

```
docker logs dc7240fe892a | head
```

输出：

```
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.11. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.11. Set the 'ServerName' directive globally to suppress this message
[Thu Apr 23 19:48:36.956682 2015] [mpm_event:notice] [pid 1:tid 140327115417472] AH00489: Apache/2.4.12 (Unix) configured -- resuming normal operations
[Thu Apr 23 19:48:36.956827 2015] [core:notice] [pid 1:tid 140327115417472] AH00094: Command line: 'httpd -D FOREGROUND'
10.0.1.86 - - [23/Apr/2015:19:48:59 +0000] "GET / HTTP/1.1" 200 348
10.0.0.154 - - [23/Apr/2015:19:48:59 +0000] "GET / HTTP/1.1" 200 348
10.0.1.86 - - [23/Apr/2015:19:49:28 +0000] "GET / HTTP/1.1" 200 348
10.0.0.154 - - [23/Apr/2015:19:49:29 +0000] "GET / HTTP/1.1" 200 348
10.0.1.86 - - [23/Apr/2015:19:49:50 +0000] "-" 408 -
10.0.0.154 - - [23/Apr/2015:19:49:50 +0000] "-" 408 -
10.0.1.86 - - [23/Apr/2015:19:49:58 +0000] "GET / HTTP/1.1" 200 348
10.0.0.154 - - [23/Apr/2015:19:49:59 +0000] "GET / HTTP/1.1" 200 348
10.0.1.86 - - [23/Apr/2015:19:50:28 +0000] "GET / HTTP/1.1" 200 348
10.0.0.154 - - [23/Apr/2015:19:50:29 +0000] "GET / HTTP/1.1" 200 348
time="2015-04-23T20:11:20Z" level="fatal" msg="write /dev/stdout: broken pipe"
```

## 检查 Amazon ECS 中的 Docker 容器
<a name="docker-inspect"></a>

如果拥有容器的 Docker ID，可以使用 **docker inspect** 命令检查该容器。通过检查容器，可提供在其中启动容器的环境的最详细视图。有关更多信息，请参阅 Docker 文档中的 [docker inspect](https://docs.docker.com/reference/cli/docker/#inspect)。

```
docker inspect dc7240fe892a
```

输出：

```
[{
    "AppArmorProfile": "",
    "Args": [],
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "httpd-foreground"
        ],
        "CpuShares": 10,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/apache2/bin",
            "HTTPD_PREFIX=/usr/local/apache2",
            "HTTPD_VERSION=2.4.12",
            "HTTPD_BZ2_URL=https://www.apache.org/dist/httpd/httpd-2.4.12.tar.bz2"
        ],
        "ExposedPorts": {
            "80/tcp": {}
        },
        "Hostname": "dc7240fe892a",
...
```

# 在 Amazon ECS 中配置 Docker 进程守护程序的详细输出
<a name="docker-debug-mode"></a>

如果您遇到与 Docker 容器或映像有关的问题，可以在 Docker 进程守护程序上打开调试模式。使用调试可以从进程守护程序中提供更详细的输出，您可以使用它来检索从容器注册表（例如 Amazon ECR）中发送的错误消息。

**重要**  
此过程是经 Amazon ECS 优化的 Amazon Linux AMI 编写的。对于其他操作系统，请参阅 Docker 文档中的[启用调试](https://docs.docker.com/engine/admin/#enable-debugging)和使[用 systemd 控制和配置 Docker]()。

**要在经 Amazon ECS 优化的 Amazon Linux AMI 上使用 Docker 进程守护程序调试模式**

1. 连接到您的容器实例。

1. 使用文本编辑器（例如 **vi**）打开 Docker 选项文件。对于经 Amazon ECS 优化的 Amazon Linux AMI，Docker 选项文件位于 `/etc/sysconfig/docker`。

1. 查找 Docker 选项语句并将 `-D` 选项添加到用引号引起的字符串。
**注意**  
如果 Docker 选项语句以 `#` 开头，则您需要删除该字符，以取消语句的注释并启用选项。

   对于经 Amazon ECS 优化的 AMI，Docker 选项语句称作 `OPTIONS`。例如：

   ```
   # Additional startup options for the Docker daemon, for example:
   # OPTIONS="--ip-forward=true --iptables=true"
   # By default we limit the number of open files per container
   OPTIONS="-D --default-ulimit nofile=1024:4096"
   ```

1. 保存文件并退出文本编辑器。

1. 重新启动 Docker 进程守护程序。

   ```
   sudo service docker restart
   ```

   您可以在一个 (扩展) 代码行中执行所有这些操作：

   ```
   Stopping docker:                                          [  OK  ]
   Starting docker:	.                                  [  OK  ]
   ```

1. 重新启动 Amazon ECS 代理。

   ```
   sudo service ecs restart
   ```

现在，您的 Docker 日志应显示更详细的输出。

```
time="2015-12-30T21:48:21.907640838Z" level=debug msg="Unexpected response from server: \"{\\\"errors\\\":[{\\\"code\\\":\\\"DENIED\\\",\\\"message\\\":\\\"User: arn:aws:sts::1111:assumed-role/ecrReadOnly/i-abcdefg is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:us-east-1:1111:repository/nginx_test\\\"}]}\\n\" http.Header{\"Connection\":[]string{\"keep-alive\"}, \"Content-Type\":[]string{\"application/json; charset=utf-8\"}, \"Date\":[]string{\"Wed, 30 Dec 2015 21:48:21 GMT\"}, \"Docker-Distribution-Api-Version\":[]string{\"registry/2.0\"}, \"Content-Length\":[]string{\"235\"}}"
```

# 对 Amazon ECS 中的 Docker `API error (500): devmapper` 进行故障排除
<a name="CannotCreateContainerError"></a>

下面的 Docker 错误表示容器实例上的精简池存储已满，并且 Docker 进程守护程序无法创建新容器：

```
CannotCreateContainerError: API error (500): devmapper: Thin Pool has 4350 free data blocks which is less than minimum required 4454 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior 
```

预设情况下，经 Amazon ECS 优化的 Amazon Linux AMI 从版本 `2015.09.d` 开始，然后后续版本中启动了 8-GiB 的卷，作为文件系统的根连接 `/dev/xvda` 并挂载。另外还有一个在 `/dev/xvdcz` 挂载并供 Docker 用于映像和元数据存储的 22 GiB 卷。如果该存储空间被填满，则 Docker 进程守护程序将无法创建新的容器。

向您的容器实例添加存储的最简单方式是终止现有实例，然后启动具有更大的数据存储卷的新实例。但如果您无法执行此操作，则可以向 Docker 使用的卷组添加存储，然后执行 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md) 中的下述步骤来扩展其逻辑卷。

如果您的容器实例存储是填满速度过快，则可采取以下几个措施来减小影响：
+ 要查看精简轮询信息，请在容器实例上运行以下命令：

  ```
  docker info
  ```
+ （Amazon ECS 容器代理 1.8.0 及更高版本）您可以减少已停止或已退出的容器在您的容器实例上的保留时间。`ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION` 代理配置变量可设置从任务停止到 Docker 容器被删除所需等待的时间段（预设情况下，此值为 3 小时）。这将删除 Docker 容器数据。如果此值设置得过低，您可能无法检查已停止的容器或无法在日志删除前查看它们。有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。
+ 您可以从容器实例中删除未运行的容器和未使用的映像。您可以使用以下示例命令来手动删除已停止的容器和未使用的映像。稍后将无法检查已删除的容器，而且必须先重新拉取已删除的映像，然后再从中启动新容器。

  要删除未运行的容器，请在容器实例上运行下面的命令：

  ```
  docker rm $(docker ps -aq)
  ```

  要删除未使用的映像，请在容器实例上运行下面的命令：

  ```
  docker rmi $(docker images -q)
  ```
+ 您可以删除容器内未使用的数据块。您可以在任何正在运行的容器上使用下面的命令运行 **fstrim** 来丢弃该容器文件系统未使用的任何数据块。

  ```
  sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"
  ```

# 排查 Amazon ECS Exec 问题
<a name="ecs-exec-troubleshooting"></a>

以下是故障排除说明，帮助诊断使用 ECS Exec 时出现错误的原因。

## 使用 Exec Checker 进行验证
<a name="ecs-exec-troubleshooting-checker"></a>

ECS Exec Checker 脚本提供了一种方法来确认和验证您的 Amazon ECS 集群和任务是否符合使用 ECS Exec 功能的先决条件。ECS Exec Checker 脚本通过代表您调用各种 API 来验证您的 AWS CLI 环境和集群以及任务是否为 ECS Exec 准备好。此工具需要安装最新版本的 AWS CLI，`jq` 可用。有关更多信息，请参阅 GitHub 上的 [ECS Exec Checker](https://github.com/aws-containers/amazon-ecs-exec-checker)。

## 调用 `execute-command` 时出错
<a name="ecs-exec-troubleshooting-general"></a>

如果发生 `The execute command failed` 错误，可能是下列原因。
+ 任务没有所需的权限。验证用于启动任务的任务定义是否定义了任务 IAM 角色，以及该角色是否具有所需的权限。有关更多信息，请参阅 [ECS Exec 权限](task-iam-roles.md#ecs-exec-required-iam-permissions)。
+ SSM 代理未安装或未运行。
+  有一个用于 Amazon ECS 的接口 Amazon VPC 端点，但没有用于 Systems Manager Session Manager 的端点。

# 排查 Amazon ECS Anywhere 问题
<a name="ecs-anywhere-troubleshooting"></a>

Amazon ECS Anywhere 支持向 Amazon ECS 集群注册*外部实例*，如本地部署服务器或虚拟机（VM）。以下是您可能遇到的常见问题以及一般故障排除建议。

**Topics**
+ [外部实例注册问题](#ecs-anywhere-troubleshooting-registration)
+ [外部实例网络问题](#ecs-anywhere-troubleshooting-networking)
+ [在外部实例上运行任务时出现问题](#ecs-anywhere-troubleshooting-runtask)

## 外部实例注册问题
<a name="ecs-anywhere-troubleshooting-registration"></a>

向 Amazon ECS 集群注册外部实例时，必须满足以下要求：
+ 必须检索 AWS Systems Manager 激活，其中包含*激活 ID* 和*激活码*。您可以用它将外部实例注册为 Systems Manager 托管实例。请求 Systems Manager 激活时，可指定注册限制和过期日期。注册限制指定可以使用激活注册的最大实例数。注册限制的默认值为 `1` 实例。过期日期指定激活的过期时间。原定设置值为 24 小时。如果您用于注册外部实例的 Systems Manager 激活无效，请求新实例。有关更多信息，请参阅 [将外部实例注册到 Amazon ECS 集群](ecs-anywhere-registration.md)。
+ IAM 策略用于为外部实例提供与 AWS API 操作通信所需的权限。如果未正确创建此托管策略且不包含所需的权限，则外部实例注册失败。有关更多信息，请参阅 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。
+ Amazon ECS 提供了一个安装脚本，用于在您的外部实例上安装 Docker、Amazon ECS 容器代理和 Systems Manager Agent。如果安装脚本失败，则脚本很可能无法在同一实例上再次运行，而不会发生错误。如果发生这种情况，请按照清理过程清除 AWS 资源，这样，您可以再次运行安装脚本。有关更多信息，请参阅 [注销 Amazon ECS 外部实例](ecs-anywhere-deregistration.md)。
**注意**  
请注意，如果成功请求安装脚本并使用了 Systems Manager 激活，则第二次运行安装脚本将使用 Systems Manager 激活。这反过来可能会让您达到该激活的注册限制。如果达到限制，必须创建一个新激活。
+ 在外部实例上运行 GPU 工作负载的安装脚本时，如果没有检测到或正确配置 NVIDIA 驱动程序，将发生错误。安装脚本使用 `nvidia-smi` 命令来确认 NVIDIA 驱动程序的存在。

## 外部实例网络问题
<a name="ecs-anywhere-troubleshooting-networking"></a>

要传达任何更改，您的外部实例需要与 AWS 连接的网络。如果您的外部实例失去了与 AWS 的网络连接，在手动停止之前，在您的实例上运行的任务将继续运行。和 AWS 的连接恢复时，Amazon ECS 容器代理和 Systems Manager Agent 在外部实例上使用的 AWS 凭证将自动续订。有关用来沟通外部实例和 AWS 的 AWS 域的更多信息，请参阅 [Networking](ecs-anywhere.md#ecs-anywhere-networking)。

## 在外部实例上运行任务时出现问题
<a name="ecs-anywhere-troubleshooting-runtask"></a>

如果您的任务或容器无法在外部实例上运行，最常见的原因是网络或权限相关。如果您的容器从 Amazon ECR 中提取其映像或配置为将容器日志发送到 CloudWatch Logs，则您的任务定义必须指定一个有效的任务执行 IAM 角色。如果没有有效的任务执行 IAM 角色，您的容器将无法启动。有关网络相关问题的更多信息，请参阅 [外部实例网络问题](#ecs-anywhere-troubleshooting-networking)。

**重要**  
Amazon ECS 提供 Amazon ECS 日志收集工具。您可以用它从外部实例收集日志进行故障排除。有关更多信息，请参阅 [使用 Amazon ECS 日志收集器收集容器日志](ecs-logs-collector.md)。

# 排查 Fargate 上的 Java 类加载问题
<a name="fargate-java-class-loading"></a>

平台更新后，在 Fargate 上运行的 Java 应用程序可能会遇到类加载问题，尤其是当应用程序依赖于非确定性的类加载行为时。这可能表现为依赖项注入错误、Spring Boot 失败或其他在以前的部署中不存在的运行时异常。

## 症状
<a name="java-class-loading-symptoms"></a>

您可能会遇到以下症状：
+ Spring Boot 依赖项注入错误
+ ClassNotFoundException 或 NoClassDefFoundError 异常
+ 以前在 Fargate 上运行的应用程序现在会间歇性故障
+ 同样的容器映像可以在 Amazon EC2 上运行，但在 Fargate 上出现故障
+ 使用相同容器映像的部署之间行为不一致

## 原因
<a name="java-class-loading-causes"></a>

出现这些问题的原因通常是：
+ **非确定性类加载：**当底层平台更改文件的访问或缓存方式时，依赖从 JAR 文件加载类的顺序的 Java 应用程序可能会失败。
+ **平台更新：**Fargate 平台版本更新可能会更改底层文件系统的行为，进而影响类的发现和加载顺序。
+ **JAR 文件排序依赖关系：**隐式依赖于特定 JAR 加载顺序而没有明确依赖关系管理的应用程序。

## 解决方案
<a name="java-class-loading-resolution"></a>

要解决 Fargate 上的 Java 类加载问题，请实施确定性类加载做法：

### 即时修复
<a name="java-class-loading-immediate-fix"></a>

如果您需要一个立即可行的解决办法：

1. **强制执行 JAR 加载顺序：**在应用程序的类路径配置中明确指定 JAR 文件的加载顺序。

1. **使用显式依赖关系管理：**确保在生成包配置（Maven、Gradle 等）中明确声明所有依赖关系，而不是依赖于传递依赖关系。

### 长期最佳实践
<a name="java-class-loading-best-practices"></a>

实施以下做法以防止未来出现类加载问题：

1. **使类加载具有确定性：**
   + 在生成包文件中使用显式的依赖关系声明
   + 避免依赖类路径扫描顺序
   + 使用依赖关系管理工具来解决版本冲突问题
   + 使用 `-verbose:class` 等 Java 虚拟机（JVM）选项，获取有关 JVM 加载的类的信息。

1. **Spring Boot 应用程序：**
   + 将 `@ComponentScan` 与显式基础包结合使用
   + 通过显式配置 bean 来避免自动配置冲突
   + 使用 `@DependsOn` 注释来控制 bean 的初始化顺序

1. **生成包配置：**
   + 在 Maven 或 Gradle 中使用依赖关系管理部分
   + 排除会导致冲突的传递依赖关系
   + 使用 Maven Enforcer 插件之类的工具来检测依赖问题

1. **测试：**
   + 使用不同的 JVM 实现来测试您的应用程序
   + 运行模拟不同部署环境的集成测试
   + 在开发过程中使用工具来分析类路径冲突

## 预防措施
<a name="java-class-loading-prevention"></a>

为了防止 Java 类在未来的部署中出现类加载问题，请执行以下操作：
+ **遵循确定性的类加载实践：**将应用程序设计为不依赖于从类路径中加载类的顺序。
+ **使用显式依赖关系管理：**务必在生成包配置中明确声明所有必需的依赖项及其版本。
+ **跨环境测试：**定期跨不同环境和平台版本测试您的应用程序，以尽早发现潜在问题。
+ **监控平台更新：**随时了解 Fargate 平台更新，并在应用程序影响生产工作负载之前使用新的平台版本对其进行测试。

# AWS Fargate 节流配额
<a name="throttling"></a>

AWS Fargate 在每个区域使用每个 AWS 账户的[令牌存储桶算法](https://en.wikipedia.org/wiki/Token_bucket)将 Amazon ECS 任务和 Amazon EKS 容器组（pod）启动率限制为配额（以前称为限制）。使用此算法，您的账户拥有一个持有特定数量的令牌的存储桶。存储桶中的令牌数表示您在任何给定秒钟的速率配额。每个客户账户都有一个任务和容器组（pod）令牌存储桶，该存储桶根据客户账户启动的任务和容器组（pod）数量消耗。此令牌存储桶具有存储桶最大配额，允许您定期提出更多请求数量，以及允许您在需要的时间内维持稳定的请求速率的重填速率。

例如，Fargate 客户账户的任务和容器组（pod）令牌存储桶大小为 100 个令牌，重填速率为每秒 20 个令牌。因此，您可以立即为每个客户账户最多启动 100 个 Amazon ECS 任务和 Amazon EKS 容器组（pod），持续启动率为每秒 20 个 Amazon ECS 任务和 Amazon EKS 容器组（pod）。


| 操作 | 存储桶最大容量（或突发速率） | 存储桶重填速率（或持续速率） | 
| --- | --- | --- | 
| 按需 Amazon ECS 任务和 Amazon EKS 容器组（pod）的 Fargate 资源率配额[1](#fargate-throttling-note-1) | 100 | 20 | 
| Spot Amazon ECS 任务的 Fargate 资源率配额 | 100 | 20 | 

<a name="fargate-throttling-note-1"></a>1使用在 [Amazon EKS 平台版本](https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html)中调用的平台版本时，仅启动 Amazon EKS 容器组（pod）的账户的突增速率为 20，持续的容器组（pod）启动速率为每秒 20 个容器组（pod）启动。

## 在 Fargate 中对 `RunTask` API 进行节流
<a name="fargate-throttling-runtask"></a>

此外，在使用 Amazon ECS `RunTask` API 启动任务时，Fargate 会使用单独的配额限制请求速率。Fargate 按区域为每个 AWS 账户限制 Amazon ECS `RunTask` API 请求。您发出的每个请求都会从存储桶中删除一个令牌。我们这样做是为了帮助提高服务的性能，并确保所有 Fargate 客户的公平使用。API 调用受请求配额的约束，无论是来自 Amazon Elastic Container Service 控制台、命令行工具还是第三方应用程序。调用 Amazon ECS `RunTask` API 的速率配额为每秒 20 次调用（突发和持续）。但是，每次调用此 API 最多可以启动 10 个任务。这意味着您可以在一秒钟内启动 100 个任务，方法是对此 API 进行 10 次调用，请求在每次调用中启动 10 个任务。同样，您也可以对此 API 进行 20 次调用，请求在每次调用中启动 5 个任务。有关 Amazon ECS `RunTask` API 中的 API 节流的更多信息，请参阅 Amazon ECS API 参考中的 [API 请求节流](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/request-throttling.html)。

实际上，任务和容器组（pod）启动率还取决于其他考虑因素，例如要下载和解压的容器映像、启用的运行状况检查和其他集成，例如向负载均衡器注册任务或容器组（pod）。根据客户启用的功能，客户会看到任务和容器组（pod）启动率与之前配额相比的变化。

## 在 Fargate 中调整速率配额
<a name="fargate-throttling-increase"></a>

您可以请求增加您的 AWS 账户的 Fargate 速率节流配额。有关更多信息，请参阅《服务配额 用户指南》** 中的 [Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

# 排查 Amazon ECS 托管实例问题
<a name="troubleshooting-managed-instances-complete"></a>

请使用以下过程对 Amazon ECS 托管实例进行问题排查，包括常见问题、诊断技术和解决步骤。

## 先决条件
<a name="prerequisites"></a>

在排查 Amazon ECS 托管实例的问题之前，请确保您已满足以下要求。
+ 已安装 AWS CLI 并配置适当的权限

  有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装或更新到最新版本的 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。
+ 访问具有 Amazon ECS 托管实例容量提供程序的集群。有关更多信息，请参阅 [为 Amazon ECS 托管实例创建集群](create-cluster-managed-instances.md)。

## 常见故障排除场景
<a name="common-troubleshooting-scenarios"></a>

### 查看 Amazon ECS 托管实例容器代理日志
<a name="viewing-container-agent-logs"></a>

您可以通过连接到实例中运行的特权容器，在 Amazon ECS 托管实例中查看这些 Amazon ECS 日志文件。

#### 诊断步骤
<a name="diagnostic-steps-logs"></a>

**将具有权限和 Linux 功能的调试容器部署为 Amazon ECS 任务：**

设置以下环境变量。

将 *user-input* 替换为您的值。

```
export ECS_CLUSTER_NAME="your-cluster-name"
export AWS_REGION="your-region"
export ACCOUNT_ID="your-account-id"
```

使用名为 `node-debugger.json` 的 CLI JSON 文件创建任务定义。

```
cat << EOF > node-debugger.json
{
  "family": "node-debugger",
  "taskRoleArn": "arn:aws:iam::${ACCOUNT_ID}:role/ecsTaskExecutionRole",
  "executionRoleArn": "arn:aws:iam::${ACCOUNT_ID}:role/ecsTaskExecutionRole",
  "cpu": "256",
  "memory": "1024",
  "networkMode": "host",
  "pidMode": "host",
  "requiresCompatibilities": ["MANAGED_INSTANCES", "EC2"],
  "containerDefinitions": [
    {
      "name": "node-debugger",
      "image": "public.ecr.aws/amazonlinux/amazonlinux:2023",
      "essential": true,
      "privileged": true,
      "command": ["sleep", "infinity"],
      "healthCheck": {
          "command": ["CMD-SHELL", "echo debugger || exit 1"],
          "interval": 30,
          "retries": 3,
          "timeout": 5
      },
      "linuxParameters": {
        "initProcessEnabled": true
      },
      "mountPoints": [
        {
          "sourceVolume": "host-root",
          "containerPath": "/host",
          "readOnly": false
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/aws/ecs/node-debugger",
          "awslogs-create-group": "true",
          "awslogs-region": "${AWS_REGION}",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "volumes": [
    {
      "name": "host-root",
      "host": {
        "sourcePath": "/"
      }
    }
  ]
}
EOF
```

注册，然后运行任务。运行以下命令。

```
aws ecs register-task-definition --cli-input-json file://node-debugger.json

TASK_ARN=$(aws ecs run-task \
  --cluster $ECS_CLUSTER_NAME \
  --task-definition node-debugger \
  --enable-execute-command \
  --capacity-provider-strategy capacityProvider=managed-instances-default,weight=1 \
  --query 'tasks[0].taskArn' --output text)

# Wait for task to be running
aws ecs wait tasks-running --cluster $ECS_CLUSTER_NAME --tasks $TASK_ARN
```

连接到容器。运行如下命令。

```
aws ecs execute-command \
  --cluster $ECS_CLUSTER_NAME \
  --task $TASK_ARN \
  --container node-debugger \
  --interactive \
  --command "/bin/sh"
```

**查看 Amazon ECS 代理日志：**

在容器的交互式会话中，运行以下命令：

```
# Install required tools
yum install -y util-linux-core

# View ECS agent logs
nsenter -t 1 -m -p cat /var/log/ecs/ecs-agent.log | tail -50

# Check agent registration
nsenter -t 1 -m -p grep "Registered container instance" /var/log/ecs/ecs-agent.log

Example Output:

{"level":"info","time":"2025-10-16T12:39:37.665","msg":"Registered container instance with cluster!"}

# Verify capabilities
nsenter -t 1 -m -p grep "Response contained expected value for attribute" /var/log/ecs/ecs-agent.log
```

**查看代理指标：**

运行以下命令以查看日志。

```
# View metrics logs
nsenter -t 1 -m -p cat /var/log/ecs/metrics.log | tail -20
```

### 任务放置问题
<a name="task-placement-issues"></a>

下面是任务放置问题的症状：
+ 任务停滞在 PENDING 状态
+ 在 Amazon ECS 托管实例上启动任务失败
+ 资源不足错误

#### 诊断步骤
<a name="task-placement-diagnostic"></a>

请运行以下命令来诊断任务放置问题并收集有关集群容量、容器实例和系统服务的信息：

```
# Check cluster capacity
aws ecs describe-clusters --clusters cluster-name --include STATISTICS

# Check cluster capacity providers
aws ecs describe-clusters --clusters cluster-name --include STATISTICS --query 'clusters[].capacityProviders'

# List container instances
aws ecs list-container-instances --cluster cluster-name

# Check container instance details
aws ecs describe-container-instances --cluster cluster-name --container-instances container-instance-arn

# Check container instance remaining resources CPU/Mem
aws ecs describe-container-instances --cluster $ECS_CLUSTER_NAME --container-instances container-instance-arn --query 'containerInstances[].remainingResources'

# Check container instance Security Group
aws ecs describe-container-instances --cluster $ECS_CLUSTER_NAME --container-instances container-instance-arn --query 'containerInstances[].ec2InstanceId' --output text
aws ec2 describe-instances --instance-ids instance-id --query 'Reservations[0].Instances[0].SecurityGroups'
aws ec2 describe-security-groups --group-ids security-group-id
```

**系统服务监控：**

```
# Check Containerd status
nsenter -t 1 -m -p systemctl status containerd.service

# Check Amazon ECS container agent status
nsenter -t 1 -m -p systemctl status ecs
```

#### 解决方案
<a name="task-placement-resolution"></a>

要解决任务放置问题，请按照下面的步骤确保配置和容量正确：
+ 验证任务资源要求和可用容量
+ 查看放置约束和策略
+ 确保已配置 Amazon ECS 托管实例容量提供程序
+ 确保任务和容器实例安全组具有允许 Amazon ECS 代理管理端点流量的出站规则。

### 联网问题
<a name="networking-issues"></a>

下面是网络问题的症状：
+ 任务无法访问外部服务
+ DNS 解析问题

#### 诊断步骤
<a name="networking-diagnostic"></a>

**网络连接测试：**

在调试容器中，运行以下命令：

**注意**  
确认附加到您的容量提供程序或 Amazon ECS 任务的安全组允许流量。

```
# Install DNS Utility
yum install bind-utils -y

# Test DNS resolution
nslookup amazon.com

# Test external connectivity
curl -I https://amazon.com
```

### 资源约束
<a name="resource-constraints"></a>

下面是网络问题的症状：
+ 由于内存限制，任务被终止
+ CPU 节流
+ 磁盘空间问题

#### 诊断步骤
<a name="resource-constraints-diagnostic"></a>

请运行命令来监控资源和容器限制。

**资源监控：**

```
# Check memory usage
nsenter -t 1 -m -p free -h

# Check disk usage
nsenter -t 1 -m -p lsblk

# Check disk usage
nsenter -t 1 -m -p df -h
```

**容器限制：**

```
# Check OOM kills
nsenter -t 1 -m -p dmesg | grep -i "killed process"
```

### 容器实例代理断开连接问题
<a name="container-instance-agent-disconnect"></a>

下面是容器实例代理断开连接问题的症状：
+ 容器实例在 Amazon ECS 控制台中显示为已断开连接
+ 任务未能放置到特定实例上
+ 日志中的代理注册失败

#### 诊断步骤
<a name="agent-disconnect-diagnostic"></a>

 如果主机上已有 ECS Exec 可以访问的特权任务正在运行，请运行下面的命令来诊断代理连接问题：

```
# check service status 
nsenter -t 1 -m -p systemctl restart ecs 
nsenter -t 1 -m -p systemctl restart containerd 

# restart stopped services 
nsenter -t 1 -m -p systemctl restart ecs 
nsenter -t 1 -m -p systemctl restart containerd
```

否则，请强制注销 Amazon ECS 托管实例。运行如下命令：

```
# list ECS Managed Instance container
aws ecs list-container-instances --cluster managed-instances-cluster --query 'containerInstanceArns' --output text

# deregister the specific container instance
aws ecs deregister-container-instance \
    --cluster $ECS_CLUSTER_NAME \
    --container-instance container-instance-arn \
    --force
```

#### 解决方案
<a name="agent-disconnect-resolution"></a>

要解决代理断开连接问题，请按照下面的步骤进行操作：
+ 验证容器实例的 IAM 角色权限
+ 检查安全组规则是否允许出站 HTTPS 流量流向 ECS 端点。
+ 确保可通过网络与 AWS 服务连接
+ 如有必要，请重启 ECS 代理服务：`nsenter -t 1 -m -p systemctl restart ecs`
+ 验证 /etc/ecs/ecs.config 中的 ECS\$1CLUSTER 配置是否与您的集群名称匹配。

## Amazon ECS 托管实例中的日志分析
<a name="log-analysis"></a>

### 系统日志
<a name="system-logs"></a>

请使用下面的命令来检查系统日志并识别托管实例的潜在问题：

```
# Check system messages
nsenter -t 1 -m -p journalctl --no-pager -n 50

# Check kernel logs
nsenter -t 1 -m -p dmesg | tail -20

# Check for disk space errors
nsenter -t 1 -m -p journalctl --no-pager | grep -i "no space\|disk full\|enospc"
```

## 使用 EC2 AWS CLI 从 Amazon ECS 托管实例获取控制台输出
<a name="console-output"></a>

使用 Amazon EC2 实例 ID 来检索控制台输出。

将 *user-input* 替换为您的值。

```
aws ec2 get-console-output --instance-id instance-id --latest --output text
```

## 清理
<a name="cleanup"></a>

请运行下面的命令来停止调试任务并注销任务定义。

```
# Stop debug task
aws ecs stop-task --cluster $ECS_CLUSTER_NAME --task $TASK_ARN

# Deregister task definition (optional)
aws ecs deregister-task-definition --task-definition node-debugger
```

## 其他资源
<a name="additional-resources"></a>

有关 Amazon ECS 托管实例故障排除的更多信息，请参阅以下资源：
+ [排查 Amazon ECS Amazon ECS 托管实例错误](managed-instances-errors.md)
+ [Amazon ECS 故障排除](troubleshooting.md)
+ [Amazon ECS 容器代理配置](ecs-agent-config.md)
+ [使用 ECS Exec 监控 Amazon ECS 容器](ecs-exec.md)

# 排查 Amazon ECS 托管实例问题
<a name="troubleshooting-managed-instances"></a>

使用 Amazon ECS 托管实例启动任务时，Amazon ECS 会首先尝试将任务放置在现有容量上，并为无法放置的任务请求额外容量。如果实例预置失败，则 Amazon EC2 请求 ID 将包含在任务失败消息中。您可以使用此请求 ID 在 CloudTrail 中查找失败请求的详细信息，以便进一步排查问题。

**注意**  
如果您选择应用最低权限，并为实例配置文件指定您自己的权限，而不是使用 `AmazonECSInstanceRolePolicyForManagedInstances` 托管策略，则可以添加以下权限，以帮助排查 Amazon ECS 托管实例与任务相关的问题：  
`ecs:StartTelemetrySession`
`ecs:PutSystemLogEvents`

## 任务定义与 Amazon ECS 托管实例不兼容
<a name="task-definition-incompatible"></a>

### 常见原因
<a name="task-definition-incompatible-cause"></a>

当您的任务定义包含 Amazon ECS 托管实例不支持的参数或配置时，会发生此错误。常见的不兼容包括不支持的网络模式、任务角色或资源要求。

### 解决方案
<a name="task-definition-incompatible-resolution"></a>

1. 验证您的任务定义是否使用了设置为 `MANAGED_INSTANCES` 的 `requiresCompatibilities`。

1. 确保您的任务定义使用 `awsvpc` 网络模式。

1. 检查 CPU 和内存值是否在 Amazon ECS 托管实例支持的范围内。

1. 查看详细的错误消息以了解特定的不兼容详细信息。

## 容量提供程序未与集群关联
<a name="capacity-provider-missing"></a>

### 常见原因
<a name="capacity-provider-missing-cause"></a>

当容量提供程序策略中指定的容量提供程序未与集群关联或不存在时，会发生此错误。

### 解决方案
<a name="capacity-provider-missing-resolution"></a>

1. 验证容量提供程序是否存在于您的账户和区域中。

1. 使用 Amazon ECS 控制台或 CLI 将容量提供程序与您的集群关联。

1. 在使用容量提供程序之前，请确保其处于 `ACTIVE` 状态。

## 基础设施角色权限错误
<a name="infrastructure-role-errors"></a>

### 常见原因
<a name="infrastructure-role-errors-cause"></a>

当 Amazon ECS 基础设施角色缺少代表您执行 Amazon EC2 操作的必要权限，或者由于信任关系问题而无法代入该角色时，会发生此错误。

### 解决方案
<a name="infrastructure-role-errors-resolution"></a>

1. 验证您的基础设施角色是否与 Amazon ECS 存在适当的信任关系。

1. 确保该角色具有所需的 Amazon EC2 权限，包括 `ec2:RunInstances`、`ec2:DescribeInstances` 和 `iam:PassRole`。

1. 查看 CloudTrail 中编码的授权失败消息，了解具体的权限详细信息。

1. 更新角色策略，使其包含错误消息中指出的缺失权限。

## VcpuLimitExceeded 错误
<a name="vcpu-limit-exceeded"></a>

### 常见原因
<a name="vcpu-limit-exceeded-cause"></a>

当您已达到当前区域中实例类型系列的 vCPU 服务配额时，会发生此错误。只有在有可用容量时，Amazon ECS 托管实例才能启动其他实例。

### 解决方案
<a name="vcpu-limit-exceeded-resolution"></a>

1. 通过 AWS 支持中心申请增加受影响实例类型系列的服务配额。

1. 考虑使用属于不同 vCPU 配额类别的不同实例类型。

1. 终止未使用的 Amazon EC2 实例，以释放 vCPU 容量。

1. 检查您的容量提供程序配置，以使用 vCPU 要求较低的实例类型。

## InsufficientCapacity 和相关的容量错误
<a name="insufficient-capacity"></a>

### 常见原因
<a name="insufficient-capacity-cause"></a>

当 AWS 没有足够的容量来满足您的实例请求时，就会出现这些错误。这可能包括所请求的可用区中的实例容量、地址容量或卷容量不足。

### 解决方案
<a name="insufficient-capacity-resolution"></a>

1. 通过在容量提供程序中配置多个子网，尝试在不同的可用区中启动实例。

1. 考虑使用可能具有更多可用容量的不同实例类型。

1. 由于容量可用性频繁变化，请等待并重试操作。

1. 对于持续的容量需求，请考虑使用预留实例或节省计划。

## UnauthorizedOperation 错误
<a name="unauthorized-operation"></a>

### 常见原因
<a name="unauthorized-operation-cause"></a>

当 Amazon ECS 服务没有执行 Amazon EC2 操作或传递 IAM 角色所需的必要权限时，会发生此错误。常见情况包括实例配置文件缺少 `ec2:RunInstances` 权限或 `iam:PassRole` 权限。

### 解决方案
<a name="unauthorized-operation-resolution"></a>

1. 验证 Amazon ECS 基础设施角色是否具有启动 Amazon EC2 实例所需的权限。

1. 确保基础设施角色拥有 Amazon ECS 托管实例使用的实例配置文件的 `iam:PassRole` 权限。

1. 查看 CloudTrail 中编码的授权失败消息，了解具体的权限详细信息。

1. 更新角色策略，使其包含错误消息中指出的缺失权限。

## 等待容量时任务超时
<a name="task-timeout-capacity"></a>

### 常见原因
<a name="task-timeout-capacity-cause"></a>

当实例启动并注册到集群所需的时间超出预期时，会出现此错误。这可能是由于 Amazon EC2 容量约束、实例启动失败或网络连接问题造成的。

### 解决方案
<a name="task-timeout-capacity-resolution"></a>

1. 检查您所在区域的 Amazon EC2 服务运行状况，查看是否存在任何持续问题。

1. 验证您的子网是否有足够的可用 IP 地址。

1. 确保您的安全组允许 Amazon ECS 代理通信所需的流量。

1. 考虑使用多个可用区来提高容量可用性。

1. 由于容量约束通常是暂时的，请重试任务启动操作。

## 网络配置错误
<a name="network-configuration-errors"></a>

### 常见原因
<a name="network-configuration-errors-cause"></a>

当您的任务的网络要求与容量提供程序的网络配置不匹配时（例如，VPC 不匹配或缺少网络配置），会发生这些错误。

### 解决方案
<a name="network-configuration-errors-resolution"></a>

1. 验证您的容量提供程序是否配置了正确的 VPC 和子网。

1. 确保安全组和子网属于同一个 VPC。

1. 检查任务定义的网络配置是否与容量提供程序兼容。

1. 使用正确的网络设置更新容量提供程序配置。

## 由于实例卡住，无法删除容量提供程序
<a name="capacity-provider-deletion-errors"></a>

### 常见原因
<a name="capacity-provider-deletion-errors-cause"></a>

当 Amazon ECS 托管实例停滞在 `ACTIVE` 或 `DRAINING` 状态，但实例上没有正在运行的任务时，就会出现这些错误。

### 解决方案
<a name="capacity-provider-deletion-errors-resolution"></a>

要允许继续删除容量提供程序，您可以使用下面的命令强制注销卡住的实例。

```
aws ecs deregister-container-instance \
    --cluster arn:aws:ecs:us-east-1:111122223333:cluster/MyCluster \
    --container-instance arn:aws:ecs:us-east-1:111122223333:container-instance/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE \
    --force
```

# 排查 Amazon ECS Amazon ECS 托管实例错误
<a name="managed-instances-errors"></a>

以下是一些 Amazon ECS 托管实例错误消息和可以用来修正错误的操作。

## 如果没有集群名称，则不支持 Amazon ECS 托管实例提供程序
<a name="managed-instances-provider-cluster-required"></a>

当您尝试创建具有 Amazon ECS 托管实例提供程序参数但没有集群字段的容量提供程序时，会发生此错误。

要解决此问题，请在创建容量提供程序时指定有效的集群名称。

## 创建 Amazon ECS 托管实例容量提供程序时，需要 Amazon ECS 托管实例提供程序详细信息
<a name="managed-instances-provider-details-required"></a>

当您尝试使用 Amazon ECS 托管实例提供程序创建容量提供程序，但未提供实际对象时，会出现此错误。

要更正此问题，请指定有效的 Amazon ECS 托管实例提供程序详细信息，然后重试。

## Amazon ECS 托管实例容量提供程序必须指定实例配置文件
<a name="managed-instances-ec2-instance-profile-required"></a>

当您尝试使用 Amazon ECS 托管实例提供程序创建容量提供程序，但未提供 Ec2InstanceProfile 时，将会看到此错误。

要解决此问题，请为您的 Amazon ECS 托管实例容量提供程序指定有效的 EC2 实例配置文件。有关更多信息，请参阅 [Amazon ECS 托管实例实例配置文件](managed-instances-instance-profile.md)。

## Amazon ECS 托管实例容量提供程序必须指定基础设施角色
<a name="managed-instances-infrastructure-role-required"></a>

当您尝试使用 Amazon ECS 托管实例提供程序创建容量提供程序，但未提供基础设施角色时，将显示此消息。

要更正此问题，请为您的 Amazon ECS 托管实例容量提供程序指定有效的基础设施角色。有关更多信息，请参阅 [Amazon ECS 基础设施 IAM 角色](infrastructure_IAM_role.md)。

## Amazon ECS 托管实例容量提供程序必须指定网络配置
<a name="managed-instances-network-configuration-required"></a>

当您尝试使用 Amazon ECS 托管实例提供程序创建容量提供程序，但未提供网络配置时，将遇到此错误。

要解决此问题，请为您的 Amazon ECS 托管实例容量提供程序指定具有非空子网的有效网络配置。有关更多信息，请参阅 [Amazon ECS 托管实例的 Amazon ECS 任务联网](managed-instance-networking.md)。

## 没有实例类型满足 Amazon ECS 托管实例容量提供程序中指定的实例要求
<a name="managed-instances-no-instance-types"></a>

当您尝试使用 Amazon ECS 托管实例提供程序创建容量提供程序，但没有 EC2 实例类型满足实例要求时，就会发生这种情况。

要解决此问题，请查看并调整您的实例要求以匹配可用的 EC2 实例类型。

## 指定的基础设施角色 ARN 无效
<a name="managed-instances-invalid-infrastructure-role-arn"></a>

当基础设施角色不遵循特定的 ARN 格式时，会发生此错误。

预期格式：`arn:partition:iam::account-id:role/role-name`。请指定有效的角色 ARN，然后重试。有关更多信息，请参阅 [Amazon ECS 基础设施 IAM 角色](infrastructure_IAM_role.md)。

## 指定的实例配置文件角色 ARN 无效
<a name="managed-instances-invalid-instance-profile-arn"></a>

当实例配置文件不遵循特定的 ARN 格式时，会发生此错误。

预期格式：`arn:partition:iam::account-id:instance-profile/profile-name`。请指定有效的角色 ARN，然后重试。有关更多信息，请参阅 [Amazon ECS 托管实例实例配置文件](managed-instances-instance-profile.md)。

## 指定的安全组 ID 无效
<a name="managed-instances-invalid-security-group-id"></a>

当安全组 ID 不遵循特定格式时，会发生此错误。

预期格式：`sg-xxxxxxxx` 或 `sg-xxxxxxxxxxxxxxxxxx`（8 或 17 个字符，包括字母（小写）和“sg-”之后的数字）。请指定安全组 ID，然后重试。

## 指定的子网 ID 无效
<a name="managed-instances-invalid-subnet-id"></a>

当子网 ID 不遵循特定格式时，会发生此错误。

预期格式：`subnet-xxxxxxxx` 或 `subnet-xxxxxxxxxxxxxxxxxx`（8 或 17 个字符，包括字母（小写）和“subnet-”之后的数字）。请指定子网 ID，然后重试。

## Amazon ECS 托管实例容量提供程序必须指定具有非空子网的网络配置
<a name="managed-instances-network-configuration-empty-subnets"></a>

当您尝试使用 Amazon ECS 托管实例提供程序和具有空子网的网络配置创建容量提供程序时，会发生此错误。

要解决此问题，请为您的 Amazon ECS 托管实例容量提供程序指定具有非空子网的有效网络配置。

## Amazon ECS 托管实例容量提供程序的标签数量不能超过允许的最大值
<a name="managed-instances-max-tags-exceeded"></a>

当您尝试创建容量提供程序时，如果其标签数量超过允许的最大数量（45），则会发生此错误。

要解决此问题，请将标签数量减少到 45 个或更少，然后重试。

## propagateTags 的值无效
<a name="managed-instances-invalid-propagate-tags"></a>

当您尝试创建具有无效 propagateTags 值的容量提供程序时，会发生此错误。

此值必须是有效的 propagateTags 值之一。请指定有效值，然后重试。

## 集群范围内已存在指定的容量提供程序
<a name="managed-instances-capacity-provider-exists-cluster-scope"></a>

当您尝试创建、更新或删除没有集群名称的 Amazon ECS 托管实例容量提供程序，但现已存在集群范围的容量提供程序时，会发生此错误。

要更改容量提供程序的配置或删除容量提供程序，请使用集群参数更新或删除容量提供程序。

## 指定的容量提供程序已存在于账户或其他集群中
<a name="managed-instances-capacity-provider-exists-different-cluster"></a>

当您尝试创建、更新或删除具有集群字段的 Amazon ECS 托管实例容量提供程序时，如果存在针对不同集群的现有账户范围容量提供程序或现有集群范围容量提供程序，则会发生此错误。

要解决此问题，请使用其他容量提供程序名称或使用现有容量提供程序。

## 容量提供程序活动集群名称与请求中的集群名称不匹配
<a name="managed-instances-cluster-name-mismatch"></a>

当容量提供程序的活动集群名称与请求中指定的集群名称不匹配时，会发生此错误。

确保请求中的集群名称与容量提供程序的关联集群匹配。

## 容量提供程序不是 Amazon ECS 托管实例容量提供程序
<a name="managed-instances-not-managed-instances-provider"></a>

当您尝试在需要 Amazon ECS 托管实例容量提供程序的上下文中使用非 Amazon ECS 托管实例容量提供程序时，会发生此错误。

确保您的请求使用了有效的 Amazon ECS 托管实例容量提供程序。

## 容量提供程序名称不能为空
<a name="managed-instances-capacity-provider-name-required"></a>

当您尝试创建容量提供程序但未指定容量提供程序名称时，会发生此错误。

请指定有效的容量提供程序名称，然后重试。

## 更新容量提供程序时需要名称
<a name="managed-instances-update-name-required"></a>

当您尝试更新容量提供程序但未指定容量提供程序名称时，会发生此错误。

请指定有效的名称，然后重试。

## 标签不能为 null 或包含 null 元素
<a name="managed-instances-tags-null-elements"></a>

当您尝试使用 null 值标记容量提供程序时，会发生此错误。

确保所有标签值均已正确指定且不为 null。

# Amazon ECS API 失败原因
<a name="api_failures_messages"></a>

如果您通过 Amazon ECS API、控制台或 AWS CLI 退出时出现 `failures` 错误消息，以下内容可能有助于解决原因。失败会返回原因和与故障关联资源的 Amazon 资源名称（ARN）。

许多资源都特定于区域，因此，在设置控制台时，确保区域和资源对应。使用 AWS CLI 时，确保您的 AWS CLI 命令发送到带 `--region region`参数 的正确区域

有关 `Failure` 数据类型结构的更多信息，请参阅 *Amazon Elastic Container Service API 参考*中的[失败](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_Failure.html)。

以下是运行 API 命令时可能会收到的失败消息的示例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/api_failures_messages.html)

**注意**  
除了此处描述的故障场景外，API 操作也可能由于异常而失败，从而导致错误响应。有关此类异常的列表，请参阅 [Common Errors](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/CommonErrors.html)（常见错误）。

# 使用 Amazon Q 开发者版进行问题排查
<a name="troubleshooting-with-Q"></a>

您可以使用 Amazon ECS 控制台中的 [Amazon Q 开发者版](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)来帮助诊断和解决 Amazon ECS 资源的问题。对于有关容器、任务、服务、部署和任务定义的某些错误和状态消息，控制台会显示**使用 Amazon Q 开发者版进行检查**选项。选择此选项后，Amazon Q 开发者版会根据上下文分析问题，并提出可能的原因和补救措施。

## 所需的权限
<a name="troubleshooting-with-Q-permissions"></a>
+ 查看要排查的 Amazon ECS 资源（例如，集群、服务、任务和任务定义）所需的权限。
+ 在控制台中[使用 Amazon Q 开发者版所需的权限](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/security_iam_permissions.html)。
+ （推荐）查看相关日志和指标所需的权限，例如：
  + CloudWatch Logs
  + CloudWatch

## 过程
<a name="troubleshooting-with-Q-procedure"></a>

1. 打开控制台，网址为 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 确定要排查问题的资源。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/troubleshooting-with-Q.html)

1. 在资源详细信息页面上，找到描述问题的状态或运行状况原因。

1. 单击状态原因将打开弹出框。

1. 如果可用，请选择**使用 Amazon Q 开发者版进行检查**。

1. 查看 Amazon Q 开发者版提供的说明和建议的补救措施。根据您环境的实际情况应用配置或操作更改。

## 注意事项
<a name="troubleshooting-with-Q-considerations"></a>

将 Amazon Q 开发者版与 Amazon ECS 结合使用时，请考虑以下事项。
+ **按钮可用性** -“使用 Amazon Q 开发者版进行检查”按钮仅对可能存在问题的资源显示。此选项不适用于运行状况良好的资源。
+ **只读操作**：Amazon Q 开发者版集成仅执行读取操作。它不会执行任何变异或写入操作。
+ **跨区域处理**：Amazon Q 开发者版可以跨 AWS 区域处理数据，以提供人工智能驱动的分析。有关跨区域处理的更多信息，请参阅 [Amazon Q 开发者版中的跨区域处理](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-processing.html)。
+ **仅限控制台**：此集成仅可通过控制台获得。它不能通过 AWS CLI、AWS API 或基础设施即代码工具使用。

## 了解详情
<a name="troubleshooting-with-Q-learn-more"></a>

有关使用 Amazon Q Developer 的更多信息，请参阅[与 Amazon Q 开发者版就 AWS 问题进行交互](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html)。