2016-01-06 14 views
8

Wiem, że możliwe jest przekazanie parametrów do programu Java działającego na AWS Lambda w celu przetestowania go. Ale nie wiem, jak przekazać te parametry, jeśli program zostanie wywołany przez zdarzenie harmonogramu.Jak przekazać parametry do funkcji AWS Lambda

Czy ktoś wie, czy jest to możliwe? Jeśli tak, w jaki sposób? Nie mogłem znaleźć nic na ten temat.

góry dzięki

Odpowiedz

3

Parametry można przekazywać pośrednio, na przykład przechowując je na s3 lub dynamo db. W każdym zaplanowanym cyklu możesz odczytać z wcześniej ustalonej lokalizacji i przekazać ją do swojego programu. Zwykle, jeśli potrzebuję uruchomić wiele zaplanowanych funkcji lambda ze współdzielonym kodem źródłowym, pakuję plik (każdy możliwy do odczytania format) z samym kodem źródłowym i odczytuję go podczas biegu. @garnaat ma rację, ponadto nie jest obecnie możliwe dynamiczne uruchamianie nowych funkcji lambda, co jest wielką niedogodnością.

+0

Przechowywanie tych parametrów w S3 to genialny pomysł. Ciekawe, dlaczego nie przyszło mi to do głowy :-) Dzięki. – sengbatz

0

Obecnie jedynym sposobem, aby utworzyć zaplanowane funkcji Lambda jest za pośrednictwem konsoli AWS i nie zapewnia żaden sposób przekazać parametry do funkcji lambda gdy scheduler to nazywa. Ponieważ twoja funkcja Lambda jest wywoływana przez program planujący w AWS, nie jest dla mnie jasne, jak działa przekazywanie parametrów.

0

Inną opcją, jeśli masz zautomatyzowane wdrożenia lub CI, jest wstawianie argumentów w czasie kompilacji z maven (lub podobnym) i właściwościami. Sądzę, że jest trochę bardziej zoptymalizowany, ponieważ nie musisz czytać pliku z S3?

Na przykład można mieć config/env1/app.properties i config/env2/app.properties

WITH Maven można tworzyć profile, które załadować odpowiedni config jak:

... 
<profiles> 
    <profile> 
     <id>env1</id> 
     <build> 
      <resources> 
       <resource> 
        <directory>config/env1</directory> 
        <filtering>true</filtering> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
    <profile> 
     <id>env2</id> 
     <build> 
      <resources> 
       <resource> 
        <directory>config/env2</directory> 
        <filtering>true</filtering> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
</profiles> 
... 

W kodzie przeczytać rekwizyty jak zwykle props.load(ClassLoader.getSystemResourceAsStream("app.properties"));

W Twoja automatyzacja pozwoli Ci zbudować mvn install -P en1, aby przygotować Jar.

0

Można wykorzystać zmienne środowiskowe z konfiguracji lambda. Następnie czytasz je w programie Java, używając: