Я знаю, что можно передать параметры программе Java, работающей на AWS Lambda, для ее тестирования. Но я не знаю, как передать эти параметры, если эта программа вызывается событием расписания.

Кто-нибудь знает возможно ли это? Если да, то как? Я ничего не смог найти об этом.

Заранее спасибо

14
sengbatz 6 Янв 2016 в 15:35

5 ответов

Лучший ответ

Вы можете передавать параметры косвенно, например, сохраняя их в s3 или Dynamo db. В каждом запланированном цикле вы можете читать из заранее определенного места и передавать его своей программе. Обычно, если мне нужно запустить несколько запланированных лямбда-функций с общим исходным кодом, я связываю файл (любой читаемый формат) с самим исходным кодом и читаю его во время выполнения. @garnaat прав, к тому же в настоящее время невозможно динамически запускать новые лямбда-функции, что является большим неудобством.

5
Yerken 6 Янв 2016 в 13:59

В настоящее время единственный способ создать запланированную функцию Lambda - через консоль AWS, и она не предоставляет никакого способа передачи параметров функции Lambda, когда планировщик ее вызывает. Поскольку ваша функция Lambda вызывается планировщиком в AWS, мне не совсем понятно, как будет работать передача параметров.

-3
garnaat 6 Янв 2016 в 13:37

Другой вариант, если у вас есть автоматическое развертывание или CI, - вставить свои аргументы во время сборки с помощью maven (или аналогичного) и свойств. Я думаю, он немного более оптимизирован, так как вам не нужно читать файл с S3?

Например, у вас могут быть config/env1/app.properties и config/env2/app.properties

С помощью maven вы создаете профили, которые загружают соответствующую конфигурацию, например:

...
<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>
...

В коде прочтите реквизиты как обычно props.load(ClassLoader.getSystemResourceAsStream("app.properties"));

В процессе автоматизации вы можете создать mvn install -P en1, чтобы развернуть Jar-файл.

0
Santiago Trias 26 Апр 2017 в 20:29

Вы можете создать правило CloudWatch как расписание и настроить ввод целевого объекта как постоянное значение json:

CloudWatch -> События -> Правила -> Расписание -> Цели

Установите для Настроить ввод значение Сonstant (текст JSON) и передайте туда любые допустимые данные json.

В Lambda вы можете получить доступ к постоянному вводу как к объекту ввода.

AWS CloudWatch screenshot

8
Hosam Aly 4 Май 2018 в 16:09

Вы можете использовать переменные среды из конфигурации лямбда. Затем вы читаете их в своей программе на Java с помощью:

System.getenv("VAR_NAME")
7
Diogo Eichert 9 Янв 2018 в 17:10