Que dois-je faire avec le processus de nouvelle tentative dans la fonction Lambda? C'est un mémo auquel j'ai pensé.
La diapositive suivante a été utile pour le processus de nouvelle tentative dans Lambda.
En outre, les articles suivants sont détaillés sur la réduction exponentielle.
Les fonctions Lambda sont écrites dans AWS Chalice. (Réessayer le traitement peut être effectué sans aucun problème, même s'il ne s'agit pas de Chalice.) Pour les tentatives, essayez d'utiliser les bibliothèques suivantes.
$ pip install retrying
Il y a aussi retry, qui semble également être facile à réessayer.
app.py
from chalice import Chalice
from datetime import datetime
from retrying import retry
import boto3
from botocore.exceptions import ClientError
app = Chalice(app_name='exponential-backoff')
def retryIfClientError(exception):
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
print('retrying...')
#Réessayez jusqu'à ce que False soit renvoyé
return isinstance(exception, ClientError)
# retry_on_exception:Pour récupérer une exception spécifique
# stop_max_attempt_number:Nombre d'essais
# wait_exponential_multiplier:multiplicateur
@retry(retry_on_exception=retryIfClientError, stop_max_attempt_number=3, wait_exponential_multiplier=1000)
def retryS3Test():
s3 = boto3.resource('s3')
client = s3.meta.client
response = client.get_object(Bucket='mybucket', Key='Fichiers qui peuvent ne pas exister')
@app.route('/')
def index():
retryS3Test()
requirements.txt
retrying==1.3.3
Si vous déployez le projet calice et que vous atteignez Endpoint, vous devriez voir le journal suivant dans CloudWatch Log et il est en cours de nouvelle tentative.