[PYTHON] Utilisez le mode de traitement des nouvelles tentatives ajouté à Boto3

introduction

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.

Comment changer 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)

Présentation de chaque mode de traitement des nouvelles tentatives

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. ** **

référence

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

Utilisez le mode de traitement des nouvelles tentatives ajouté à Boto3
Comment utiliser le générateur
Comment utiliser le décorateur
Laissez le traitement gênant à Python
Comment utiliser la fonction zip
Comment utiliser le module optparse
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser le module ConfigParser
Utilisez boto3 pour accéder à S3
[Linux] Comment utiliser la commande echo
Utilisez .flatten () [0] de numpy pour récupérer la valeur
Comment utiliser le débogueur IPython (ipdb)
Utilisez boto pour charger / télécharger des fichiers vers s3.
3 meilleures façons d'utiliser la commande less
Comment utiliser la bibliothèque C en Python
Comment utiliser MkDocs pour la première fois
Obtenons les informations Wiki en utilisant l'API MediaWiki
Activer la complétion de code sur boto3 avec boto3-stubs
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Utiliser des décorateurs pour empêcher la ré-exécution du traitement des données
Comment utiliser la bibliothèque de dessins graphiques Bokeh
Comment utiliser l'API Google Cloud Translation
Comment utiliser l'API du guide des programmes NHK
Le moyen le plus simple d'utiliser OpenCV avec python
[Algorithm x Python] Comment utiliser la liste
Utilisez le framework Python "cocotb" pour tester Verilog.
Comment utiliser la bibliothèque de traitement d'image basée sur PyTorch "Kornia"
Connectez-vous avec json en utilisant pygogo.
Je souhaite utiliser la fonction d'activation Mish
Le décorateur doit réessayer
[Introduction à Python] Comment utiliser l'instruction while (traitement répétitif)
Comment exécuter le module Ansible ajouté dans Ansible Tower
Comment utiliser Raspeye Relay Module Python
Comment utiliser le mode interactif python avec git bash
Je voulais utiliser la bibliothèque Python de MATLAB
Ajouter un utilisateur Linux, comment utiliser la commande useradd
[Python] Comment utiliser la bibliothèque de création de graphes Altair
Comment utiliser la commande grep et des exemples fréquents
Comment utiliser la clause exist dans l'ensemble de requêtes Django
Spécifiez MinGW comme compilateur utilisé dans Python
[Introduction à Udemy Python3 + Application] 27. Comment utiliser le dictionnaire
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
Comment utiliser argparse et la différence entre optparse
Comment utiliser le modèle appris dans Lobe en Python
Comment utiliser la bibliothèque de solveurs "kociemba" de Rubik Cube
(Rappelez-vous rapidement) Comment utiliser la ligne de commande LINUX
Le langage de programmation que vous souhaitez pouvoir utiliser
Je veux utiliser le jeu de données R avec python
utiliser autre chose que le profil par défaut avec boto3
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 8 Mesure du temps de traitement et profileur