2017-10-23 4 views
1

Ich versuche, herauszufinden, was der beste Ansatz ist später eine aws Lambda-Funktion 5 Stunden aufzurufen. Ich habe eine andere Lambda-Funktion, die mehrere Suchaufträge ausgibt, um Gegenstände aus dem Gletscher zu holen, und ich brauche eine Lösung, um eine weitere Lambda-Funktion auf jedem der Elemente auszuführen, sobald sie abgerufen sind, was ungefähr 5 Stunden dauert. Ich dachte über die Verwendung von SNS nach, aber ich fragte mich, ob es andere Ansätze dafür gibt. Jede Eingabe wird geschätzt.invoke Lambda-Funktion mit Stunden Verspätung

+0

5 Stunden eine Konstante oder wollen Sie hängt Funktionen auf anderen Lambda-Ausgang laufen? –

+0

sollte es konstant sein und nicht abhängig von der anderen Lambda-Ausgabe – Calvin

+0

Ideales Design würde CloudWatch-Ereignisse verwenden. Ich habe Details in Antwort hinzugefügt –

Antwort

4

Neben Cloudwatch verwenden, ein weiterer interessanter Ansatz in Ihrem Fall wäre zu verwenden AWS Step Functions:

  1. Entweder ein wait state verwenden, indem Sie einen festen Zeitraum einstellen (oder sogar ein dynamischen wenn Sie liefern Eingangsdaten an die Zustandsmaschine):

    { 
        "Comment": "An example of the Amazon States Language using wait states", 
        "StartAt": "WaitState", 
        "States": { 
        "WaitState": { 
         "Type": "Wait", 
         "Seconds": 10, 
         "Next": "MyLambda" 
        }, 
        "MyLambda": { 
         "Type": "Task", 
         "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", 
         "End": true 
        } 
        } 
    } 
    
  2. Oder Sie können mit einem choice state eine separate Lambda-Funktion in einem task state kombiniert verwenden die überprüft, in einer Schleife, wenn die andere Funktion ausgeführt werden soll:

    { 
        "Comment": "A state machine that submits a Job to AWS Batch and monitors the Job until it completes.", 
        "StartAt": "Wait X Seconds", 
        "States": { 
        "Wait X Seconds": { 
         "Type": "Wait", 
         "SecondsPath": "$.wait_time", 
         "Next": "Get Job Status" 
        }, 
        "Get Job Status": { 
         "Type": "Task", 
         "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:CheckJob", 
         "Next": "Job Complete?" 
        }, 
        "Job Complete?": { 
         "Type": "Choice", 
         "Choices": [ 
         { 
          "Variable": "$.status", 
          "StringEquals": "RUNNING", 
          "Next": "Wait X Seconds" 
         }, 
         { 
          "Variable": "$.status", 
          "StringEquals": "SUCCEEDED", 
          "Next": "Do Job" 
         } 
         ], 
         "Default": "Wait X Seconds" 
        }, 
        "Do Job": { 
         "Type": "Task", 
         "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:CheckJob", 
         "End": true 
        } 
        } 
    } 
    
0

Der ideale Weg ist Lambda-Funktion Cloudwatch Ereignis zu planen. Bitte beachten Sie weitere Details zu dem gleichen here