Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Comportamiento de los reintentos
importante
El comportamiento descrito en esta página requiere activarlo hasta que se convierta en el comportamiento predeterminado. AWS_NEW_RETRIES_2026=trueConfigúrelo en su entorno. Sin esta configuración, el SDK utiliza un comportamiento de reintentos anterior a 2026, que difiere en cuanto al tiempo de espera, los costes de las cuotas de reintentos y los valores predeterminados específicos del servicio. Para obtener más información, consulta la entrada del blog sobre el anuncio.
Cuando se Servicio de AWS produce un error en una solicitud debido a un error transitorio o a una limitación, el SDK puede volver a intentarlo automáticamente. En esta página, se explica cómo configurar los reintentos y cómo funcionan internamente.
-
Configuración de reintentos: Elija un modo de reintento, establezca el número máximo de intentos y comprenda la prioridad de la configuración.
-
Cómo funcionan los reintentos: Flujo de reintentos, clasificación de errores, fórmula de retroceso, mecánica de cuotas de reintentos y comportamiento específico del servicio.
Configuración de reintentos
Tú controlas qué estrategia de reintentos usa el SDK y cuántas veces lo reintenta.
Elegir un modo de reintento
El modo de reintento determina cómo se comporta el SDK cuando se produce un error en una solicitud. Hay tres modos disponibles: estándar, adaptativo y tradicional.
| Standard | Flexible | Legacy | |
|---|---|---|---|
| Vuelva a intentar la cuota | Sí | Sí | Varía según el SDK |
| Puede retrasar la solicitud inicial | No | Sí | No |
| Error-type-specific retraso | Sí | Sí | Varía según el SDK |
| Estandarizado en todos los SDK | Sí | Sí | No |
| Recomendación | Predeterminado para todas las cargas de trabajo | Single-resource, con alta regulación, tolerante a la latencia | Solo compatibilidad con versiones anteriores |
Modo estándar (predeterminado)
El modo estándar reintenta las solicitudes fallidas mediante un retraso exponencial con fluctuación de fase. Utiliza retrasos más cortos para los errores transitorios (como los tiempos de espera de la red) y más largos para los errores de limitación (por ejemplo). ThrottlingException
El modo estándar incluye una cuota de reintentos, un depósito de fichas que deduce las fichas por cada reintento y las reabastece cuando las solicitudes se aceptan. Cuando se agotan los tokens disponibles, el SDK devuelve el error sin volver a intentarlo, por lo que la aplicación falla rápidamente en lugar de esperar a que se repitan los intentos, que es poco probable que se realicen correctamente. Esto también ayuda a que las interrupciones del servicio se resuelvan más rápido al reducir el tráfico de reintentos. Durante el funcionamiento normal, la cuota permanece completa y no tiene ningún efecto. La cuota de reintentos nunca retrasa ni bloquea la solicitud inicial. Solo se ven afectados los reintentos. Para obtener más información, consulte Cuota de reintentos (grupo de fichas).
Utilice el modo estándar a menos que tenga un motivo específico para elegir otro modo.
Modo adaptativo
El modo adaptativo incluye todo lo que hay en el modo estándar, además de un limitador de velocidad en el lado del cliente. El limitador de velocidad rastrea las respuestas de limitación y ajusta la velocidad a la que el SDK envía las solicitudes. A diferencia del modo estándar, el modo adaptativo puede retrasar o bloquear la solicitud inicial, no solo los reintentos, cuando se detecta una limitación.
El limitador de velocidad funciona por instancia de cliente del SDK. Todas las solicitudes de un cliente comparten el mismo límite de velocidad, independientemente de la operación o el recurso de la API a los que se dirijan.
Cuándo usar el modo adaptativo:
-
Su cliente se dirige a un único recurso (por ejemplo, una tabla de DynamoDB) y espera recibir respuestas de limitación frecuentes. Esto es habitual en los flujos de trabajo automatizados, los procesadores por lotes o las cargas de trabajo de IA que invocan una sola operación de API con un volumen elevado.
-
Lo ideal es que el SDK se ralentice automáticamente cuando el servicio señale una limitación.
Cuándo no usar el modo adaptativo:
-
Su cliente envía solicitudes a varios recursos o atiende a varios inquilinos. Al limitar un recurso, el limitador de velocidad ralentiza todas las solicitudes de ese cliente, incluidas las solicitudes a los recursos no afectados.
-
Necesitas una latencia predecible en la solicitud inicial.
No se recomienda el modo adaptativo como predeterminado general.
Modo heredado
El modo heredado es el comportamiento de reintento que utilizaba cada SDK antes de la introducción del modo estándar. No incluye una cuota de reintentos estandarizada. Algunos SDK (como Java) tenían sus propias implementaciones de cuotas de reintentos en el modo tradicional, pero el comportamiento no es uniforme en todos los SDK. Sin una cuota estandarizada, el cliente sigue reintentándolo a toda velocidad durante las interrupciones del servicio. Esto bloquea los hilos y las conexiones de las solicitudes con pocas probabilidades de éxito y, al mismo tiempo, añade una carga que puede retrasar la recuperación del servicio.
El modo heredado varía según los SDK. El número de reintentos, el tiempo de espera, los conjuntos de errores que se pueden volver a intentar y el comportamiento de limitación varían de un idioma a otro. El código que depende del comportamiento de reintento tradicional puede comportarse de forma diferente cuando se mueve de un SDK a otro.
Disponible en: Java, Python, Ruby, PHP, C++, CLI
No disponible en: .NET, Go, Kotlin, Rust, Swift, JavaScript
El modo Legacy existe para la compatibilidad con versiones anteriores. Si actualmente usa el modo heredado, cambie al modo estándar.
Vuelva a intentar la configuración
Los siguientes ajustes controlan el comportamiento de los reintentos. Puede configurarlos mediante variables de entorno, el archivo de configuración compartido (~/.aws/config) o la configuración del cliente en código.
| Opción | Qué controla | Variable de entorno | Clave del archivo de configuración | Predeterminado |
|---|---|---|---|---|
| Modo de reintento | ¿Qué estrategia de reintento usar | AWS_RETRY_MODE |
retry_mode |
standard |
| Número máximo de intentos | Número total de intentos, incluida la solicitud inicial | AWS_MAX_ATTEMPTS |
max_attempts |
3(ver notas) |
Un valor máximo de intentos 3 significa que el SDK realiza una solicitud inicial y hasta dos reintentos. Establece el número máximo de intentos 1 para deshabilitar por completo los reintentos.
nota
Los clientes DynamoDB y DynamoDB Streams establecen de forma predeterminada el número máximo de intentos. 4 Estos servicios utilizan un retraso de retardo base más corto (25 ms en lugar de 50 ms) para adaptarse a su perfil de baja latencia. El intento adicional mantiene el retraso máximo del último reintento comparable al de otros servicios. Puede anular esto con la misma configuración que se muestra en la tabla anterior.
Prioridad de configuración
Al especificar la misma configuración en varios lugares, el SDK resuelve el valor con la siguiente prioridad, de mayor a menor:
-
Configuración de cliente explícita en el código. Un valor establecido directamente en el cliente del SDK o en su objeto de configuración.
-
Variable de entorno. Por ejemplo,
AWS_RETRY_MODEoAWS_MAX_ATTEMPTS. -
Archivo de configuración compartido. Introduzca la
max_attemptsteclaretry_modeo~/.aws/config. -
SDK predeterminado. El valor predeterminado integrado para la configuración.
Esto sigue la prioridad de configuración estándar del AWS SDK. Un valor establecido en un nivel superior siempre anula un valor establecido en un nivel inferior. Por ejemplo, si lo estableces AWS_RETRY_MODE=adaptive como variable de entorno y dentro~/.aws/config, retry_mode=standard el SDK usa el modo adaptativo.
Language-specific configuración
La configuración de varios SDK que se describe en esta página (retry_modeymax_attempts) funciona en todos los SDK. Sin embargo, la API para configurar los reintentos en el código varía según el idioma. Consulta la guía para desarrolladores del SDK para conocer las opciones de configuración específicas del idioma, como las estrategias de reducción personalizadas, los errores adicionales que se pueden volver a intentar y el ajuste de la cuota de reintentos.
Cómo funcionan los reintentos
En esta sección, se describe cómo gestionan AWS los SDK las solicitudes fallidas: qué errores provocan reintentos, cuánto tiempo espera el SDK entre intentos y cuándo deja de reintentarlo.
¿Qué ocurre cuando se produce un error en una solicitud
Cuando realizas una llamada a la API a través de un AWS SDK, el SDK sigue esta secuencia:
-
Solo en modo adaptativo: el SDK comprueba el limitador de velocidad del lado del cliente. Si se detecta una limitación, el SDK puede retrasar o bloquear la solicitud antes de enviarla.
-
El SDK envía la solicitud al punto final Servicio de AWS .
-
Si el servicio devuelve una respuesta correcta, el SDK devuelve el resultado a tu código.
-
Si se produce un error en la solicitud, el SDK clasifica el error como transitorio, limitado o no reintentable. Consulte ¿Qué errores se vuelven a intentar?.
-
Si el error no se puede volver a intentar, el SDK lo devuelve al código inmediatamente. No se intenta volver a intentarlo.
-
Si el error se puede volver a intentar, el SDK comprueba si se ha alcanzado el número máximo de intentos. Si es así, devuelve el error a tu código.
-
El SDK comprueba elCuota de reintentos (grupo de fichas). Si se agota el presupuesto del token, el SDK no lo vuelve a intentar y devuelve el error a tu código. Excepción: Long-polling operaciones el SDK sigue aplicando un retraso antes de devolver el error.
-
El SDK calcula un retraso de espera en función del tipo de error y del número de intentos de reintento. Consulte ¿Cuánto tiempo espera el SDK.
-
El SDK espera el retraso calculado y, a continuación, vuelve a enviar la solicitud desde el paso 2.
El SDK repite este ciclo hasta que la solicitud se realice correctamente, se alcance el número máximo de intentos, se agote la cuota de reintentos o se produzca un error que no se pueda volver a intentar. Todo el proceso es automático. Su solicitud ve una respuesta correcta o un error final.
¿Qué errores se vuelven a intentar?
El SDK clasifica cada solicitud fallida en una de estas tres categorías: transitoria, limitada o no reintentable. Esta clasificación determina si el SDK vuelve a intentar la solicitud y cuánto tiempo espera antes de volver a intentarlo.
La clasificación se basa en el código de error y el código de estado HTTP de la respuesta del servicio. Por ejemplo, un HTTP 400 con el código de error RequestTimeout se clasifica como transitorio y se vuelve a intentar. Un HTTP 400 con ValidationException se clasifica como no reintentable y se devuelve inmediatamente.
Clasificación de errores
Los errores transitorios se vuelven a intentar con un retraso base corto (50 ms):
| Código de error |
|---|
RequestTimeout |
RequestTimeoutException |
InternalError |
IDPCommunicationError |
| I/O Fallo (restablecimiento de la conexión, fallo en la resolución del DNS, tiempo de espera del socket) |
| (cualquier HTTP 500, 502, 503 o 504 sin un código de error reconocido) |
Los errores de limitación se vuelven a intentar con un retraso base mayor (1000 ms):
| Código de error |
|---|
Throttling |
ThrottlingException |
ThrottledException |
RequestThrottledException |
TooManyRequestsException |
ProvisionedThroughputExceededException |
TransactionInProgressException |
LimitExceededException |
PriorRequestNotComplete |
RequestThrottled |
EC2ThrottledException |
RequestLimitExceeded |
SlowDown |
BandwidthLimitExceeded |
Non-retryable los errores (comoAccessDeniedException,ValidationException,ResourceNotFoundException) se devuelven al código inmediatamente.
nota
Un código HTTP 5XX con un código de error de limitación se clasifica como error de limitación, no como error transitorio, aunque los errores 5XX suelen ser transitorios. El SDK coincide primero con el código de error y, a continuación, recurre al código de estado HTTP.
Los errores de limitación significan que el servicio ha rechazado activamente tu solicitud debido a los límites de velocidad, por lo que el SDK espera más tiempo antes de volver a intentar darle tiempo al servicio para que recupere la capacidad. Consulta los retrasos ¿Cuánto tiempo espera el SDK específicos.
¿Cuánto tiempo espera el SDK
El SDK utiliza un retroceso exponencial con una fluctuación total. De media, cada reintento espera más tiempo que el anterior, y la distribución aleatoria permite distribuir las solicitudes de varios clientes.
Retrasos básicos por tipo de error
El retraso base depende de si el error es transitorio o limitante:
| Tipo de error | Retardo base | Justificación |
|---|---|---|
| Transitorio (sin regulación) | 50 ms | Los errores transitorios suelen resolverse en milisegundos. Un retraso base corto proporciona una recuperación rápida. |
| Limitación | 1000 ms | El servicio tiene una tarifa limitada para la solicitud. Un retraso base mayor permite recuperar la capacidad. |
Fórmula de retroceso
El SDK calcula cada retraso de reintento mediante esta fórmula:
delay = random(0, 1) × min(20,000 ms, base_delay × 2^retry)
Donde:
-
random(0, 1)devuelve un valor distribuido uniformemente entre 0 y 1 -
base_delayes 50 ms para errores transitorios o 1000 ms para errores de regulación -
retrycomienza en 0 para el primer reintento (el segundo intento general de solicitud)
El límite máximo de espera es de 20 segundos. Ningún retraso individual supera los 20 segundos, independientemente del número de intentos que se hayan producido.
Ejemplos resueltos
Ejemplo 1: error transitorio, máximo 3 intentos
| Paso | ¿Qué sucede? | Delay |
|---|---|---|
| Intento 1 | Solicitud inicial. El servicio devuelve HTTP 503. | (ninguno) |
| Intento 2 | El SDK espera aleatoriamente (0, 50 ms). El reintento falla con 503. | 0—50 ms (promedio ~ 25 ms) |
| Intento 3 | El SDK espera aleatoriamente (0, 100 ms). El reintento se realiza correctamente. | 0—100 ms (media ~ 50 ms) |
La latencia total agregada tiene un promedio de 75 ms en ambos reintentos.
Ejemplo 2: error de aceleración, 3 intentos como máximo
| Paso | ¿Qué sucede? | Delay |
|---|---|---|
| Intento 1 | Solicitud inicial. El servicio devuelve 429Throttling. |
(ninguno) |
| Intento 2 | El SDK espera aleatoriamente (0, 1000 ms). Al volver a intentarlo, se devuelve 429. | 0—1000 ms (promedio ~ 500 ms) |
| Intento 3 | El SDK espera aleatoriamente (0, 2000 ms). El reintento se realiza correctamente. | 0—2000 ms (promedio ~ 1000 ms) |
La latencia total agregada tiene un promedio de unos 1500 ms en ambos reintentos.
Ejemplo 3: Error transitorio, al alcanzar el límite de espera
Con un retraso base de 50 ms, el retraso calculado antes del límite sería:
| Inténtelo de nuevo | Retraso máximo calculado | Después de un límite de 20 s |
|---|---|---|
| 1 | 50 ms | 50 ms |
| 2 | 100 ms | 100 ms |
| 5 | 800 ms | 800 ms |
| 9 | 12.800 ms | 12.800 ms |
| 10 | 25.600 ms | 20.000 ms |
El límite entra en vigor al décimo reintento (undécimo intento) en el caso de errores transitorios. En el caso de los errores de aceleración con una base de 1000 ms, el límite entra en vigor al 6º reintento.
nota
Con el valor predeterminado de 3 intentos como máximo (1 solicitud inicial más 2 reintentos), el límite de espera nunca se alcanza. En esta tabla se muestra lo que ocurre si aumentas el valor por max_attempts encima del valor predeterminado.
¿Por qué es importante la fluctuación
El multiplicador aleatorio se denomina fluctuación total. Sin él, todos los clientes que detecten un error al mismo tiempo volverían a intentarlo al mismo tiempo, lo que generaría una ráfaga de tráfico de reintentos (el problema de la «manada a rabiar»). La fluctuación total distribuye los reintentos de manera uniforme en toda la ventana de espera, de modo que el servicio recibe un flujo constante de solicitudes en lugar de picos sincronizados.
Por ejemplo, supongamos que 1000 clientes reciben un 503 al mismo tiempo. La fluctuación total distribuye sus primeros reintentos de manera uniforme en una ventana de 50 ms, en lugar de hacer que los 1000 reintentos se realicen exactamente a 50 ms.
Server-directed Tiempo de reintento
Algunas Servicios de AWS incluyen un x-amz-retry-after encabezado en las respuestas de error. El valor del encabezado es un retraso en milisegundos. Cuando este encabezado está presente, el SDK utiliza el retraso especificado por el servidor, limitado a un mínimo del retraso de retroceso calculado y a un máximo del retraso de retroceso calculado más 5000 ms. Dado que el retardo calculado tiene un límite de 20 segundos, el retardo máximo efectivo dirigido por el servidor es de 25 segundos. El SDK no aplica una fluctuación de fase a este valor, ya que se espera que el servicio la altere. Esto permite que el servicio se comunique exactamente cuando espera tener capacidad disponible.
Cuota de reintentos (grupo de fichas)
El SDK mantiene un presupuesto interno de fichas que registra la proporción de solicitudes aprobadas y rechazadas. Cuando los errores son generalizados, el presupuesto se agota y el SDK devuelve los errores directamente. La aplicación falla rápidamente en lugar de esperar a que se repitan los intentos, que es poco probable que se realicen correctamente. Esto también reduce el tráfico de reintentos, lo que ayuda a que las interrupciones del servicio se resuelvan más rápido.
Cómo funciona la cuota de reintentos
El presupuesto simbólico comienza completo. Cada reintento deduce los tokens. Cuando un reintento se realiza correctamente, el SDK restaura los tokens consumidos en ese reintento. Cuando una solicitud se realiza correctamente en el primer intento (no es necesario volver a intentarlo), el SDK restaura 1 token. Cuando el presupuesto llega a cero, el SDK deja de volver a intentarlo y devuelve los errores directamente al código.
| Parámetro | Valor |
|---|---|
| Capacidad presupuestaria | 500 fichas |
| Coste por reintento transitorio (sin limitación) | 14 fichas |
| Coste por reintento de aceleración | 5 fichas |
| Las fichas se restauran en caso de éxito tras un nuevo intento | Cantidad consumida en el último reintento (14 o 5) |
| Las fichas se restauran en caso de éxito sin volver a intentarlo | 1 ficha |
El mayor coste de los reintentos transitorios refleja su diferente patrón de fallos. Los errores transitorios, como los 500, y los fallos de conexión suelen indicar un problema en todo el servicio. En estas situaciones, es poco probable que los reintentos continuos tengan éxito. Añade latencia a las llamadas, agota los recursos de los clientes y puede retrasar la recuperación para todos. Los errores de limitación indican que el servicio necesita más tiempo antes de que la solicitud pueda aceptarse. El SDK espera más tiempo entre reintentos para aumentar las probabilidades de éxito.
¿Cuándo se vuelve a intentar el bloque de cuotas
La cuota de reintentos hace un seguimiento de los tokens en todo momento, pero solo bloquea los reintentos cuando se agota el presupuesto. Durante el funcionamiento normal, casi todas las solicitudes se aceptan correctamente y el presupuesto permanece completo. La cuota no tiene ningún efecto observable en los reintentos.
Un reintento exitoso solo restaura su propio coste simbólico (14 o 5 fichas), no el coste de los reintentos fallidos anteriores en la misma solicitud. Por ejemplo, si el primer reintento falla y el segundo tiene éxito, el presupuesto pierde 14 fichas netas. El presupuesto se agota más rápido cuando los reintentos agotan todos los intentos sin éxito, pero también se agota gradualmente cuando las solicitudes necesitan reintentos múltiples antes de tener éxito.
Con el valor predeterminado de 3 intentos como máximo, la cuota comienza a agotarse cuando más de aproximadamente el 22% de las solicitudes se traducen en errores transitorios sostenidos, o más de aproximadamente el 32% en el caso de errores de limitación. Por debajo de estas tasas, las solicitudes correctas reponen el presupuesto más rápido que los reintentos fallidos lo agotan.
El saldo inicial del presupuesto, de 500 fichas, proporciona un amortiguador que absorbe las pequeñas ráfagas de errores. Un breve aumento de errores, aunque sea grave, no bloquea los reintentos a menos que persista lo suficiente como para agotar el búfer.
Implicaciones prácticas
-
Bajas tasas de fracaso: la cuota no tiene ningún efecto. El presupuesto se mantiene al límite de su capacidad o cerca de ella.
-
Durante una interrupción del servicio: si un alto porcentaje de las solicitudes no se reciben correctamente durante un período prolongado, la cuota se agota y el cliente recibe los errores inmediatamente, en lugar de esperar a que los vuelva a intentar. Esto reduce la latencia del lado del cliente, libera hilos y conexiones y ayuda a que el servicio se recupere más rápido.
-
Recuperación: a medida que el servicio se recupera y las solicitudes vuelven a tener éxito, los reintentos correctos restablecen el coste total del token y el primer intento exitoso restaura 1 token. El presupuesto se rellena gradualmente y los reintentos se reanudan automáticamente.
-
Alcance: el presupuesto del token se suele destinar a una única instancia de cliente del SDK. El alcance exacto puede variar según el SDK. No se comparte entre procesos ni hosts.
Service-specific comportamiento
DynamoDB
Los clientes de DynamoDB utilizan valores predeterminados ajustados y optimizados para el perfil de baja latencia de DynamoDB:
| Opción | Predeterminado general | DynamoDB predeterminado |
|---|---|---|
| Retardo base transitorio (sin regulación) | 50 ms | 25 ms |
| Retraso base de regulación | 1000 ms | 1000 ms |
| Número máximo de intentos | 3 | 4 |
Estos valores predeterminados se aplican tanto a Amazon DynamoDB como a DynamoDB Streams.
Long-polling operaciones
Algunas AWS operaciones utilizan sondeos prolongados. Pueden mantener una conexión abierta esperando a que llegue el trabajo. Estas operaciones reciben un tratamiento especial para volver a intentarlo:
-
SQS.ReceiveMessage -
SFN.GetActivityTask -
SWF.PollForActivityTask -
SWF.PollForDecisionTask
Comportamiento especial: cuando se agota la cuota de reintentos y se bloquean los reintentos (paso 7¿Qué ocurre cuando se produce un error en una solicitud), el SDK sigue aplicando un retraso antes de devolver el error al código.
Esto es importante porque las operaciones de sondeos prolongados suelen tener lugar en un bucle cerrado. El código llamaReceiveMessage, procesa cualquier mensaje y ReceiveMessage vuelve a llamar inmediatamente. Sin el retraso forzoso, si se agotara el presupuesto de fichas, el SDK generaría errores sin demora. Tu ciclo de sondeo enviaría inmediatamente la siguiente solicitud, lo que aumentaría el uso de la CPU del cliente y generaría tráfico adicional. El retardo de espera forzado rompe este ciclo, lo que permite gestionar el uso de los recursos del cliente y la frecuencia de sondeo durante los fallos.
Support de AWS SDK y herramientas
En la siguiente tabla, se muestra la disponibilidad del comportamiento de reintento actualizado en cada SDK. Para SDK-specific obtener más información, como la versión mínima, los valores predeterminados del antes y el después y ejemplos de código, consulta el tema de seguimiento. GitHub
| SDK | compatible | GitHub problema de seguimiento |
|---|---|---|
| SDK para Java 2.x | Sí | Problema de seguimiento |
| SDK para Python (Boto3) |
Sí | Problema de seguimiento |
| SDK para.NET 4.x | Sí | Problema de seguimiento |
| Herramientas para PowerShell V5 | Sí | Problema de seguimiento |
| SDK para JavaScript 3.x | Sí | Problema de seguimiento |
| SDK para PHP 3.x | Sí | Problema de seguimiento |
| SDK para Kotlin | Sí | Problema de seguimiento |
| SDK para Rust | Sí | Problema de seguimiento |
| SDK para Swift | Consulte el problema de seguimiento | Problema de seguimiento |
| SDK para Ruby 3.x | Consulte el problema de seguimiento | Problema de seguimiento |
| SDK para Go V2 (1.x) | Consulte el problema de seguimiento | Problema de seguimiento |
| SDK para C++ | Consulte el problema de seguimiento | Problema de seguimiento |
| AWS CLI v2 | Consulte el problema de seguimiento | Problema de seguimiento |