

# 处理 Amazon ECS 节流问题
<a name="operating-at-scale-dealing-with-throttles"></a>

节流错误分为两大类：同步节流和异步节流。

## 同步节流
<a name="synchronous-throttling"></a>

发生同步节流时，您会立即收到来自 Amazon ECS 的错误响应。如果在运行任务或创建服务时调用 Amazon ECS API，则通常会出现此类节流。有关所涉及的节流和相关节流限制的更多信息，请参阅[请求对 Amazon ECS API 进行节流](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/request-throttling.html)。

例如，当您的应用程序通过使用 Amazon CLI 或 Amazon SDK 发起 API 请求时，您可以修复 API 节流。为此，您可以设计应用程序以处理错误，也可以通过对 API 调用实现带有重试逻辑的指数回退和抖动策略。有关更多信息，请参阅[超时、重试和回退并抖动](https://www.amazonaws.cn/builders-library/timeouts-retries-and-backoff-with-jitter/)。

如果您使用 Amazon SDK，则自动重试逻辑已内置且可配置。

## 异步节流
<a name="asynchronous-throttling"></a>

发生异步节流是因为异步工作流程中 Amazon ECS 或 Amazon CloudFormation 可能代表您调用 API 来预置资源。重要的是了解 Amazon ECS 代表您调用了哪些 Amazon API。例如，对使用 `awsvpc` 网络模式的任务调用 `CreateNetworkInterface` API，对注册到负载均衡器的任务执行运行状况检查时调用 `DescribeTargetHealth` API。

当您的工作负载达到相当大的规模时，这些 API 操作可能会受到限制。也就是说，其可能会受到足够的限制，以违反所调用的 Amazon ECS 或 Amazon Web Services 服务 强制执行的限制。例如，如果您部署了数百项服务，每项服务同时有数百个使用 `awsvpc` 网络模式的任务，则 Amazon ECS 会调用 Amazon EC2 API 操作（例如 `CreateNetworkInterface`）和 Elastic Load Balancing API 操作（例如 `RegisterTarget` 或 `DescribeTargetHealth`）分别注册弹性网络接口和负载均衡器。这些 API 调用可能会超出 API 限制，从而导致节流错误。以下是服务事件消息中包含的 Elastic Load Balancing 节流错误的示例。

```
{
   "userIdentity":{
      "arn":"arn:aws:sts::111122223333:assumed-role/AWSServiceRoleForECS/ecs-service-scheduler",
      "eventTime":"2022-03-21T08:11:24Z",
      "eventSource":"elasticloadbalancing.amazonaws.com",
      "eventName":" DescribeTargetHealth ",
      "awsRegion":"us-east-1",
      "sourceIPAddress":"ecs.amazonaws.com",
      "userAgent":"ecs.amazonaws.com",
      "errorCode":"ThrottlingException",
      "errorMessage":"Rate exceeded",
      "eventID":"0aeb38fc-229b-4912-8b0d-2e8315193e9c"
   }
}
```

当这些 API 调用与您账户中的其他 API 流量共享限制时，即使其作为服务事件发出，也可能难以监控。

## 监控节流
<a name="monitoring-throttling"></a>

确定哪些 API 请求受到限制，以及发出这些请求的人员非常重要。您可以使用 Amazon CloudTrail 监控节流，并与 CloudWatch、Amazon Athena 和 Amazon EventBridge 集成。您可以将 CloudTrail 配置为将特定事件发送到 CloudWatch Logs。CloudWatch Logs 日志见解可解析和分析事件。这可识别节流事件中的详细信息，例如发出调用的用户或 IAM 角色以及发出的 API 调用数。有关更多信息，请参阅[使用 CloudWatch Logs 监控 CloudTrail 日志文件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)。

有关 CloudWatch Logs Insights 的更多信息以及如何查询日志文件的说明，请参阅[使用 CloudWatch Logs Insights 分析日志数据](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

借助 Amazon Athena，您可以使用标准 SQL 创建查询和分析数据。例如，您可以创建一个 Athena 表来解析 CloudTrail 事件。有关更多信息，请参阅[使用 CloudTrail 控制台为 CloudTrail 日志创建 Athena 表](https://docs.amazonaws.cn/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-ct)。

创建 Athena 表后，您可以使用 SQL 查询（例如以下查询）来调查 `ThrottlingException` 错误。

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

```
select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count
FROM cloudtrail_table-name
where errorcode = 'ThrottlingException'
AND eventtime between '2024-09-24T00:00:08Z' and '2024-09-23T23:15:08Z'
group by errorcode, awsregion, eventsource, useragent, eventname
order by count desc;
```

Amazon ECS 还会向 Amazon EventBridge 发送事件通知。有资源状态变更事件和服务操作事件。它们包括 API 节流事件，例如 `ECS_OPERATION_THROTTLED` 和 `SERVICE_DISCOVERY_OPERATION_THROTTLED`。有关更多信息，请参阅 [Amazon ECS 服务操作事件](ecs_service_events.md)。

Amazon Lambda 等服务可以使用这些事件来执行响应操作。有关更多信息，请参阅 [处理 Amazon ECS 事件](ecs_cwet_handling.md)。

如果您运行独立任务，则某些 API 操作（例如 `RunTask`）是异步的，并且不会自动执行重试操作。在这种情况下，您可以使用 Amazon Step Functions 等服务与 EventBridge 集成来重试受限制或失败的操作。有关更多信息，请参阅[管理容器任务（Amazon ECS、Amazon SNS）](https://docs.amazonaws.cn/step-functions/latest/dg/sample-project-container-task-notification.html)。

## 使用 CloudWatch 监控节流
<a name="monitoring-throttling-cw"></a>

CloudWatch 为**按 Amazon 资源**下的 `Usage` 命名空间提供 API 使用情况监控。这些指标记录为 **API** 类型和指标名称 **CallCount**。您可以创建警报，以在这些指标达到特定阈值时启动。有关更多信息，请参阅[可视化服务配额并设置警报](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch-Quotas-Visualize-Alarms.html)。

CloudWatch 还提供异常检测功能。此功能使用机器学习，根据您启用该功能的指标的特定行为来分析和建立基准。如果出现异常的 API 活动，则您可以将此功能与 CloudWatch 警报一起使用。有关更多信息，请参阅[使用 CloudWatch 异常检测](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html)。

通过主动监控节流错误，您可以联系 Amazon Web Services 支持 提高相关的节流限制，还可以获得针对您独特应用需求的指导。