2016-11-02 12 views
9

Ich habe versucht, ein Lambda in Serverless zu implementieren, um auf einem Cron-Zeitplan zu laufen, der es stündlich aufruft. Wenn es aufgerufen wird, möchte ich, dass das Ereignis innerhalb des Lambda von meiner eigenen JSON-Eingabe und nicht von den Informationen aus dem Cron-Ereignis ausgefüllt wird, das bei der Bereitstellung die Standardeingabe ist.Wie übergebe ich Json-Eingaben an ein Cron-geplantes Lambda, das im Serverless-Event eingesetzt wird?

In der AWS-Konsole kann ich manuell in den Cron-Trigger für das Lambda gehen und die Eingabe von "Matched event" in "Constant (JSON text)" ändern, um das gewünschte Ergebnis zu erhalten. Da Serverless diese Regel bei der Bereitstellung von Lambda erstellt, habe ich das Gefühl, dass es eine Möglichkeit geben sollte, die Eingabe über eine Konfiguration in der Datei serverless.yml zu ändern. Ich habe nichts gefunden, während ich die Dokumente für Serverless durchsucht habe, also frage ich mich, ob das durch Serverless in seinem aktuellen Zustand möglich ist, und wenn ja, wie es geht.

Jeder Rat würde geschätzt werden.

Edit: Es gab ein Update, das diese Funktionalität hätte hinzufügen sollen, aber ich konnte noch nicht mit einem Zeitplan mit JSON mit Serverless 1.3.0 bereitstellen (und auch mit 1.2.0 getestet). Einige Beispiele für die serverless.yml I verwendet werden, sind unten:

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 

jemand in der Lage sein würde, wie von 1.3.0 über den Zustand diese Funktion in Serverless Stellung zu nehmen, und ob mein serverless.yml oben sieht gut aus ?

Edit 2: Veröffentlichung der Arbeits serverless.yml

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
      rate: rate(10 minutes) 
      enabled: true 
      input: 
      key: value 
     - schedule: 
      rate: rate(10 minutes) 
      input: '{"key": "value"}' 
      enabled: true 
     - schedule: 
      rate: rate(10 minutes) 
      input: 
      key: 'value' 
      enabled: true 
+0

Ich aktualisierte meine Antwort – Erndob

Antwort

5

EDIT ZU IHRER EDIT: ich einige graben tat, scheint es wie serverless automatisch den Zeitplan deaktivieren, wenn es nicht eine Zeichenfolge ist. Das bedeutet, wenn Ihr gesamtes Ereignis - schedule: rate(10 minutes) ist, wird es aktiviert. Aber wenn Sie andere Eigenschaften haben, müssen Sie es aktivieren, weil es standardmäßig deaktiviert ist.

So Ihre aktuelle .yml sollte wie folgt aussehen:

functions: test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     enabled: true 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     enabled: true 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 
     enabled: true 

Sie gleichen input und inputPath in Ihrer serverless.yml Datei verwenden können, wie Sie mit Cloudwatch Ereignisregel tun würde. Der einzige Unterschied zu Cloudwathregeln besteht darin, dass Sie ein Objekt tatsächlich übergeben können und serverless es für Sie automatisch stringifiziert.

Beispiel:

functions: 
    crawl: 
    handler: crawl 
    events: 
     - schedule: 
      rate: rate(1 hours) 
      input: 
      key1: value1 
      key2: value2 

Dies wird zu Cloudformation Ereignisregel gleich mit input:"{'key1':'value1','key2':'value2'}" so json statt abgestimmt Ereignis vorbei.

Ich bemerkte gerade, dass die Frage am 2. November gestellt wurde. Zu dieser Zeit war es nicht möglich, aber es wurde kurz nach der Anfrage umgesetzt. https://github.com/serverless/serverless/pull/2567

+0

Danke für die Antwort. Ich habe tatsächlich mit dieser PR Schritt gehalten, aber immer noch nicht in der Lage gewesen, mit dem JSON zu implementieren, den ich eingegeben habe. Ich werde die Frage aktualisieren und einige Beispiele darin veröffentlichen. – Raiju

+0

Ich schaute auf das erste Beispiel, das Sie erneut gepostet hatten, und ich bemerkte, dass es die Einzüge waren, die das Problem waren. Ich hatte ursprünglich die Formatierung von der PR kopiert, die die Einrückungen nicht enthielt, die den Zeitplan überhaupt nicht erscheinen ließen. Der Tipp, der aktiviert werden sollte, war sehr hilfreich, vielen Dank für die Hilfe! – Raiju

+0

Können Sie ein Array übergeben? input: ['test1', 'test2'] – inside

Verwandte Themen