2017-10-12 12 views
1

J'envoie des événements à AWS Kinesis et ceux-ci sont traités par une fonction AWS lambda. Cependant, si le lambda génère une erreur, les enregistrements ne sont pas supprimés et sont traités encore et encore, bloquant le traitement de nouveaux enregistrements.Comment faire pour annuler les enregistrements?

J'aimerais plutôt ignorer l'enregistrement défectueux et digérer de nouveaux enregistrements. Je ne comprends pas comment faire ça.

La fonction lambda intercepte toutes les exceptions et ne doit donc pas générer d'erreur d'exécution.

Ci-dessous l'extrait en python.

Je comprends que lambda doit être rejugé au cours de la période de « rétention » (par défaut 24h), mais je voudrais jeter et éventuellement connecter toute sorte d'erreurs

def ProcessKinesisRecords(event, context): 
    body = "ok" 
    response_code = 200 
    for record in event['Records']: 
     # Kinesis data is base64 encoded so decode here 
     try: 
      payload = base64.b64decode(record["kinesis"]["data"]) 
      #...payload processing 
     except Exception as e: 
      body = e 

    return {"isBase64Encoded": True, "statusCode": response_code, "headers": { "x-custom-header": "headerValue" }, "body": body} 

Je pense que je suivais ce lambda retries .. .mais je ne vois pas ce que je fais mal

Répondre

0

Eh bien, en fait, je n'attrapais pas toutes les exceptions. En python

except Exception as e: 

ne reflète pas toutes les exceptions: Difference between except: and except Exception as e: in Python

Il ne se coince pas BaseException ou les exceptions-sortie du système SystemExit, KeyboardInterrupt et GeneratorExit. C'est pourquoi ça ne fonctionnait pas.