Le kit SDK AWS implémente une logique de relance automatique avec Exponential Backoff, Boto3 propose trois modes de traitement des tentatives.
La vérification du référentiel GitHub de botocore révèle une version standard et adaptative vers février 2020. Les implémentations ajoutées et antérieures sont nommées legacy.
Add support for new retry modes #1972
Pour des raisons de compatibilité, la valeur par défaut est héritée et les fonctionnalités ajoutées en standard / adaptatif Pour l'utiliser, vous devez modifier explicitement le mode de traitement des nouvelles tentatives.
Instanciez l'objet de configuration botocore et envoyez les informations de configuration au client
Vous pouvez le faire passer. Les options disponibles sont max_attempts
et mode
.
Le nombre maximum de tentatives par défaut varie en fonction du mode de traitement des tentatives,
Peut être personnalisé par max_attempts.
import boto3
from botocore.config import Config
config = Config(
retries = {
'max_attempts': 10,
'mode': 'standard'
}
)
ec2 = boto3.client('ec2', config=config)
Legacy retry mode C'est le mode par défaut utilisé par les clients Boto3. Le facteur utilisé pour calculer le temps d'attente est 2. Le gestionnaire de nouvelle tentative v1 (https://github.com/boto/botocore/blob/master/botocore/retryhandler.py) est utilisé. Il existe un nombre limité d'erreurs / exceptions pour les tentatives.
Standard retry mode Les règles de nouvelle tentative sont standardisées avec des kits SDK AWS multilingues et une logique cohérente. Il gère plus d'erreurs et d'exceptions de limitation / limite que le mode hérité. Le facteur utilisé pour calculer le temps d'attente est de 2, comme en mode hérité, mais avec un maximum de 20 secondes. Le gestionnaire de tentatives v2 (https://github.com/boto/botocore/tree/master/botocore/retries) est utilisé.
legacy | standard | |
---|---|---|
Nombre maximum de tentatives par défaut | 5 | 3 |
Traitement des erreurs de connexion temporaires | ConnectionError ConnectionClosedError ReadTimeoutError EndpointConnectionError |
RequestTimeout RequestTimeoutException PriorRequestNotComplete ConnectionError HTTPClientError |
throttling/Ne pas répondre aux erreurs de limite et aux exceptions | Throttling ThrottlingException ThrottledException RequestThrottledException ProvisionedThroughputExceededException |
Throttling ThrottlingException ThrottledException RequestThrottledException TooManyRequestsException ProvisionedThroughputExceededException TransactionInProgressException RequestLimitExceeded BandwidthLimitExceeded LimitExceededException RequestThrottled SlowDown EC2ThrottledException |
Réessayer par code d'état | 429/500/502/503/504/509 etc. | 500/502/503/504 |
Formule de calcul du temps de retard | rand(0, 1) * (2 ^ (attempts - 1)) | min(rand(0, 1) * 2 ^ attempt, 20) |
Adaptive retry mode Côté client avec algorithme de compartiment à jetons en plus de la fonctionnalité de mode standard Fonction de limite de débit automatique et code d'erreur / exception / d'état HTTP du côté du service AWS pour chaque nouvelle tentative La possibilité de modifier les variables de limite de débit en fonction de a été ajoutée. Une ré-exécution flexible peut être effectuée côté client en fonction du contenu de l'erreur, ** Il s'agit d'un mode expérimental, donc ses fonctions et son comportement peuvent changer à l'avenir. ** **
Retries - Boto3 Docs https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html
c'est tout. Je suis heureux que vous puissiez l'utiliser comme référence.
Recommended Posts