2016-11-02 23 views
9

Próbowałem wdrożyć Lambda w Serverless, aby uruchomić na harmonogramie Cron, który wywołuje go co godzinę. Po wywołaniu chcę, aby zdarzenie w Lambdzie zostało zapełnione przez moje własne wejście JSON, a nie informacje ze zdarzenia Cron, które jest domyślnym wejściem, gdy jest wdrożone.Jak przekazać dane wejściowe json do zaplanowanej instalacji Lambda Cron w zdarzeniu Serverless using?

Wewnątrz konsoli AWS mogę ręcznie przejść do wyzwalacza Cron dla Lambda i zmienić wejście z "Dopasowane zdarzenie" na "Stały (tekst JSON)", aby uzyskać pożądany wynik. Ponieważ Serverless tworzy tę regułę podczas wdrażania Lambda, wydaje mi się, że powinien istnieć jakiś sposób zmiany danych wejściowych poprzez konfigurację w pliku serverless.yml. Nie mogłem znaleźć niczego podczas przeszukiwania dokumentacji dla Serverless, więc teraz zastanawiam się, czy jest to możliwe przez Serverless w swoim obecnym stanie, a jeśli tak, to jak to zrobić.

Każda rada byłaby doceniona.

Edycja: Była aktualizacja, która powinna dodać tę funkcję, ale nadal nie byłem w stanie wdrożyć z harmonogramem z JSON przy użyciu Serverless 1.3.0 (i przetestowałem również w wersji 1.2.0). Niektóre przykłady serverless.yml użyłem są poniżej:

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' 

Czy ktoś będzie w stanie wypowiedzieć się na temat stanu tej funkcji w Serverless jak z 1.3.0 i czy moja serverless.yml powyżej wygląda dobrze ?

Edit 2: księgowanie serverless.yml roboczą

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

Zaktualizowałem moją odpowiedź – Erndob

Odpowiedz

5

EDIT DO EDIT: Zrobiłem trochę kopania, wydaje się Serverless automatycznie wyłączyć harmonogram, jeśli nie jest to ciąg znaków. Znaczenie, jeśli całe wydarzenie jest - schedule: rate(10 minutes), zostanie włączone. Ale jeśli posiadasz inne właściwości, MUSISZ go włączyć, ponieważ domyślnie będzie to wyłączone.

Więc aktualna .yml powinna wyglądać następująco:

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 

Można użyć tego samego input i inputPath w pliku serverless.yml tak jak byś zrobił z reguły zdarzeń cloudwatch. Jedyną różnicą w stosunku do reguł Cloudwath jest to, że możesz przekazać obiekt, a serwer bez serwera automatycznie go utworzy.

przykład:

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

ten będzie równy zasadę zdarzenia cloudformation z input:"{'key1':'value1','key2':'value2'}" przechodząc poprzez json zamiast dopasowane zdarzenia.

Zauważono, że pytanie zostało zadane 2 listopada. W tym czasie nie można było tego zrobić, ale zostało ono wdrożone wkrótce po zadaniu pytania. https://github.com/serverless/serverless/pull/2567

+0

Dzięki za odpowiedź. Właściwie nadążam za tym PR, ale nadal nie mogę wdrożyć z JSON, który mam wkład. Zaktualizuję pytanie i zamieszczę w nim kilka przykładów. – Raiju

+0

Spojrzałem na pierwszy przykład, który opublikowałeś ponownie i zauważyłem, że to były wcięcia, które były problemem. Pierwotnie skopiowałem formatowanie z PR, które nie zawierało wcięć, które spowodowało, że harmonogram nie pojawiał się w ogóle. Również wskazówka, która ma być włączona, była bardzo pomocna, dziękuję bardzo za pomoc! – Raiju

+0

Czy możesz przekazać tablicę? input: ['test1', 'test2'] – inside