Reintentos de AWS CLI - AWS Command Line Interface

Python 2.7, 3.4 y 3.5 están obsoletas para la versión 1 de AWS CLI. Para obtener más información, consulte la sección de la versión 1 de AWS CLI de Acerca de las versiones de AWS CLI.

Reintentos de AWS CLI

Este tema se describe cómo AWS CLI podría ver las llamadas a servicios de AWS que fallan debido a problemas inesperados. Estos problemas pueden ocurrir en el lado del servidor o pueden fallar debido a la limitación de velocidad del servicio de AWS al que está intentando llamar. Este tipo de errores generalmente no requieren un manejo especial y la llamada se realiza de nuevo automáticamente, a menudo después de un breve período de espera. La AWS CLI proporciona muchas características para ayudar a reintentar llamadas de cliente a AWS cuando se experimentan este tipo de errores o excepciones.

Modos de reintentos disponibles

La AWS CLI tiene varios modos para elegir según su versión:

Modo de reintentos heredados

El modo heredado es el modo predeterminado que se encuentra en la versión 1 de la AWS CLI. El modo heredado utiliza un controlador de reintentos más antiguo que tiene una funcionalidad limitada que incluye:

  • Un valor predeterminado de 4 reintentos máximo, lo que hace un total de 5 intentos de llamada. Este valor se puede sobrescribir a través del parámetro de configuración de max_attempts.

  • Reintentos para la siguiente cantidad limitada de errores/excepciones:

    • Errores generales de socket/conexión:

      • ConnectionError

      • ConnectionClosedError

      • ReadTimeoutError

      • EndpointConnectionError

    • Errores y excepciones de límites/limitación controlada del lado del servicio:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • ProvisionedThroughputExceededException

  • Reintentos de varios códigos de estado HTTP, incluidos 429, 500, 502, 503, 504 y 509.

  • Cualquier reintento incluirá un retroceso exponencial por un factor base de 2.

Modo de reintentos estándar

El modo estándar es un conjunto estándar de reglas de reintento en los SDK de AWS con más funcionalidad que heredados. Este modo es el predeterminado de la versión 2 de la AWS CLI. El modo estándar se creó para la versión 2 de la AWS CLI y se adapta para la versión 1 de la AWS CLI. La funcionalidad del modo estándar incluye:

  • Un valor predeterminado de 2 para los intentos máximos de reintento, haciendo un total de 3 intentos de llamada. Este valor se puede sobrescribir a través del parámetro de configuración de max_attempts.

  • Reintentos para la siguiente lista ampliada de errores/excepciones:

    • Errores/excepciones transitorios

      • RequestTimeout

      • RequestTimeoutException

      • PriorRequestNotComplete

      • ConnectionError

      • HTTPClientError

    • Errores y excepciones de límites/limitación controlada del lado del servicio:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • TooManyRequestsException

      • ProvisionedThroughputExceededException

      • TransactionInProgressException

      • RequestLimitExceeded

      • BandwidthLimitExceeded

      • LimitExceededException

      • RequestThrottled

      • SlowDown

      • EC2ThrottledException

  • Reintentos de códigos de error transitorios y no descriptivos. En concreto, estos códigos de estado HTTP: 500, 502, 503, 504.

  • Cualquier reintento incluirá un retroceso exponencial por un factor base de 2 para un tiempo máximo de retroceso de 20 segundos.

Modo de reintento flexible

aviso

El modo flexible es un modo experimental y está sujeto a cambios, tanto en las características como en el comportamiento.

El modo de reintento flexible es un modo de reintento experimental que incluye todas las características del modo estándar. Además de las características del modo estándar, el modo flexible también introduce la limitación de la velocidad del lado del cliente mediante el uso de un bucket de token y variables de límite de velocidad que se actualizan en forma dinámica con cada reintento. Este modo ofrece flexibilidad en los reintentos del lado del cliente que se adapta a la respuesta de estado de error/excepción desde un servicio de AWS.

Con cada nuevo reintento, el modo flexible modifica las variables de límite de velocidad en función del error, la excepción o el código de estado HTTP presentado en la respuesta del servicio de AWS. Estas variables de límite de velocidad se utilizan para calcular una nueva tasa de llamada para el cliente. Cada excepción/error o respuesta HTTP no exitosa (proporcionada en la lista anterior) de un servicio de AWS actualiza las variables de límite de velocidad a medida que se producen reintentos hasta que se alcanza el éxito, se agota el bucket de token o se alcanza el valor máximo de intentos configurado.

Configuración de un modo de reintento

La AWS CLI incluye una variedad de configuraciones de reintento, así como métodos de configuración que se deben tener en cuenta al crear el objeto cliente.

Métodos de configuración disponibles

En la AWS CLI, los usuarios pueden configurar reintentos de las siguientes maneras:

  • Variables de entorno

  • Archivo de configuración de la AWS CLI

Los usuarios pueden personalizar las siguientes opciones de reintentos:

  • Modo de reintento: especifica qué modo de reintento utiliza la AWS CLI. Como se describió anteriormente, hay tres modos de reintento disponibles: heredado, estándar y adaptativo. El valor predeterminado de la versión 1 de la AWS CLI es heredado y de la versión 2 de la AWS CLI es estándar.

  • Cantidad máxima de intentos: especifica el valor máximo de reintentos que utiliza el controlador de reintentos de AWS CLI, donde la llamada inicial cuenta para el valor que usted proporciona. El valor predeterminado es 5.

Definición de una configuración de reintento en las variables de sus entorno

Para definir la configuración de reintento para la AWS CLI, actualice las variables de entorno de su sistema operativo.

Las variables de entorno de reintento son:

  • AWS_RETRY_MODE

  • AWS_MAX_ATTEMPTS

Para obtener más información sobre las variables de entorno, consulte Variables de entorno para configurar la AWS CLI.

Definición de una configuración de reintento en su archivo de configuración de AWS

Esta característica solo está disponible con la versión 2 de la AWS CLI.

La siguiente característica está disponible solo si usa la versión 2 de la AWS CLI. No está disponible si ejecuta la versión 1 de la AWS CLI. Para obtener información sobre cómo instalar la versión 2, consulte Instalación, actualización y desinstalación de la versión 2 de la AWS CLI.

Para cambiar la configuración de reintento, actualice su archivo de configuración global de la AWS. La ubicación predeterminada de su archivo de configuración de la AWS es ~/.aws/config.

El siguiente es un ejemplo de un archivo de configuración de la AWS:

[default] retry_mode = standard max_attempts = 6

Para obtener más información sobre cómo usar archivos de configuración, consulte Opciones de los archivos de configuración y credenciales.

Visualización de registros de reintentos

La AWS CLI utiliza la metodología de reintento y el registro de Boto3. Puede utilizar la opción --debug en cualquier comando para recibir registros de depuración. Para obtener información sobre cómo utilizar la opción --debug, consulte Opciones de línea de comandos.

Si busca “reintento” en sus registros de depuración, encontrará la información de reintento que necesita. Las entradas del registro del cliente para los reintentos dependen del modo de reintento que haya habilitado.

Modo heredado:

Los mensajes de reintento se generan mediante botocore.retryhandler. Verá uno de los tres mensajes:

  • No retry needed

  • Retry needed, action of: <action_name>

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

Modo estándar o adaptativo:

Los mensajes de reintento se generan a través de botocore.retries.standard. Verá uno de los tres mensajes:

  • No retrying request

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

  • Retry needed but retry quota reached, not retrying request

Para obtener el archivo de definición completa de los reintentos de botocore, consulte _retry.json en el Repositorio GitHub de botocore.