2016-06-07 7 views
0

Ich sende Apple Push-Benachrichtigungen über AWS SNS via Lambda mit Boto3 und Python.AWS Lambda/SNS Publish ignoriere ungültige Endpunkte

from __future__ import print_function 
import boto3 

def lambda_handler(event, context): 

    client = boto3.client('sns') 
    for record in event['Records']: 
     if record['eventName'] == 'INSERT': 
      rec = record['dynamodb']['NewImage'] 
      competitors = rec['competitors']['L'] 
      for competitor in competitors: 
       if competitor['M']['confirmed']['BOOL'] == False: 
        endpoints = competitor['M']['endpoints']['L'] 
        for endpoint in endpoints: 
         print(endpoint['S']) 
         response = client.publish(
          #TopicArn='string', 
          TargetArn = endpoint['S'], 
          Message = 'test message' 
          #Subject='string', 
          #MessageStructure='string', 
         ) 

Alles funktioniert gut! Aber wenn ein Endpunkt aus irgendeinem Grund ungültig ist (im Moment geschieht dies jedes Mal, wenn ich einen Development Build auf meinem Gerät starte, da ich dann einen anderen Endpunkt bekomme. Dieser wird entweder nicht gefunden oder deaktiviert.) Die Lambda Funktion schlägt fehl und wird aufgerufen noch einmal. In diesem speziellen Fall, wenn zum Beispiel der zweite Endpunkt fehlschlägt, wird der Push immer wieder zu Endpunkt 1 nach Unendlich gesendet.

Ist es möglich, ungültige Endpunkte zu ignorieren und einfach mit der Funktion weiterzumachen?

Danke

Edit:

Dank Ihrer Hilfe ich es mit lösen konnte:

try: 
    response = client.publish(
     #TopicArn='string', 
     TargetArn = endpoint['S'], 
     Message = 'test message' 
     #Subject='string', 
     #MessageStructure='string', 
    ) 
except Exception as e: 
    print(e) 
    continue 
+1

Übrigens wäre es besser, die Erstellung des boto3 SNS-Clients außerhalb Ihres Handlers zu verschieben. Auf diese Weise müssen Sie nicht jedes Mal, wenn der Handler aufgerufen wird, einen neuen Client erstellen. – garnaat

+0

Hey Garnaat! Vielen Dank für die Informationen! – weka1

Antwort

2

Aws lamdba bei einem Fehler wiederholt die Funktion, bis das Ereignis aus dem Strom abläuft.

In Ihrem Fall, da die Ausnahme auf dem zweiten Endpunkt nicht behandelt wird, stellt der Wiederholungsmechanismus die erneute Ausführung des Posts zum ersten Endpunkt sicher.

Wenn Sie die Ausnahme behandeln und sicherstellen, dass die Funktion auch bei einem Fehler erfolgreich beendet wird, werden die Wiederholungen nicht ausgeführt.

+0

Hallo Shibashis, danke für Ihre Hilfe. Ich werde es versuchen! – weka1

+0

Danke Shibashis! – weka1