AWS CLI 在中重试 AWS CLI - AWS Command Line Interface

本文档 AWS CLI 仅适用于版本 1。有关版本 2 的文档 AWS CLI,请参阅版本 2 用户指南

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

AWS CLI 在中重试 AWS CLI

本主题描述了 AWS 服务调用 AWS CLI 可能由于意外问题而失败的情况。这些问题可能发生在服务器端,也可能是由于您尝试调用的 AWS 服务存在速率限制而失败。这些类型的故障通常不需要特殊处理,并且通常在短暂的等待时间段后会自动重新发出调用。 AWS CLI 提供了许多功能,可帮助在遇到此类错误或异常时重试客户端对 AWS 服务的调用。

可用重试模式

根据您的版本, AWS CLI 有多种模式可供选择:

传统重试模式

传统模式是 AWS CLI 版本 1 使用的默认模式。传统模式使用旧的重试处理程序,其功能有限,其中包括:

  • 最大重试次数的默认值为 4,总共可发出 5 次调用尝试。此值可通过 max_attempts 配置参数覆盖。

  • DynamoDB 的最大重试次数的原定设置值为 9,总共可发出 10 次调用尝试。此值可通过 max_attempts 配置参数覆盖。

  • 重试以下有限数量的错误/异常:

    • 常规套接字/连接错误:

      • ConnectionError

      • ConnectionClosedError

      • ReadTimeoutError

      • EndpointConnectionError

    • 服务端限制错误和异常:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • ProvisionedThroughputExceededException

  • 重试多个HTTP状态码,包括 429、500、502、503、504 和 509。

  • 任何重试都将包含基准因子为 2 的指数回退。

标准重试模式

标准模式是一组标准的重试规则,其 AWS SDKs功能比传统模式更多。 标准模式是为 AWS CLI 版本 2 创建的,并已向后移植到 AWS CLI 版本 1。标准模式的功能包括:

  • 最大重试次数的默认值为 2,总共可发出 3 次调用尝试。此值可通过 max_attempts 配置参数覆盖。

  • 对以下更加广泛的错误/异常列表重试操作:

    • 瞬时错误/异常

      • RequestTimeout

      • RequestTimeoutException

      • PriorRequestNotComplete

      • ConnectionError

      • HTTPClientError

    • 服务端限制错误和异常:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • TooManyRequestsException

      • ProvisionedThroughputExceededException

      • TransactionInProgressException

      • RequestLimitExceeded

      • BandwidthLimitExceeded

      • LimitExceededException

      • RequestThrottled

      • SlowDown

      • EC2ThrottledException

  • 对非描述性的瞬时错误代码进行重试。具体而言,这些HTTP状态码:500、502、503、504。

  • 任何重试都将包含基准因子为 2 的指数回退,最长回退时间为 20 秒。

自适应重试模式

警告

自适应模式是一种试验模式,在特征和行为方面可能会发生变化。

自适应重试模式是一种试验性重试模式,包括标准模式的所有功能。除了标准模式功能外,自适应模式还通过使用令牌存储桶和速率限制变量引入了客户端速率限制,这些变量会随着每次重试而动态更新。此模式为客户端重试提供了灵活性,可以适应服务的错误/异常状态响应。 AWS

每次尝试新的重试时,自适应模式都会根据服务响应中显示的错误、异常或HTTP状态代码修改速率限制变量。 AWS 然后,使用这些速率限制变量来计算客户端的新调用速率。 AWS 服务的每个异常/错误或不成功HTTP响应(如上面的列表所示)都会在重试时更新速率限制变量,直到达到成功、令牌桶用尽或达到配置的最大尝试次数值。

配置重试模式

AWS CLI 包括各种重试配置以及创建客户端对象时要考虑的配置方法。

可用配置方法

在中 AWS CLI,用户可以通过以下方式配置重试次数:

  • 环境变量

  • AWS CLI 配置文件

用户可以自定义以下重试选项:

  • 重试模式-指定使用哪种重试模式。 AWS CLI 如上所述,有三种重试模式可用:传统模式、标准模式和自适应模式。AWS CLI 版本 1 的默认值为旧AWS CLI 版。

  • 最大尝试次数-指定重试处理程序使用的最大 AWS CLI 重试次数值,其中初始调用计入您提供的值。默认值是 5。

在环境变量中定义重试配置

要为定义重试配置 AWS CLI,请更新操作系统的环境变量。

重试环境变量包括:

  • AWS_RETRY_MODE

  • AWS_MAX_ATTEMPTS

有关环境变量的更多信息,请参阅为配置环境变量 AWS CLI

查看重试日志

AWS CLI 使用 Boto3 的重试方法和日志记录。您可以对任何命令使用 --debug 选项来接收调试日志。有关如何使用 --debug 选项的更多信息,请参阅中的命令行选项 AWS CLI

如果您在调试日志中搜索“retry”,将会找到所需的重试信息。重试操作的客户端日志条目取决于您启用的重试模式。

传统模式:

重试消息是由 botocore.retryhandler 生成的。您将看到以下三个消息之一:

  • No retry needed

  • Retry needed, action of: <action_name>

  • Reached the maximum number of retry attempts: <attempt_number>

标准模式或自适应模式:

重试消息是由 botocore.retries.standard 生成的。您将看到以下三个消息之一:

  • No retrying request

  • Retry needed, retrying request after delay of: <delay_value>

  • Retry needed but retry quota reached, not retrying request

有关 botocore 重试的完整定义文件,请参阅 botocore 存储库上的 _retry.j son。 GitHub