2016-09-21 3 views
2

У меня есть функция Lambda , которую я написал на Java (ну, на самом деле она написана на Clojure), и она появляется, когда вы запускаете ее три раза каждый раз.Функция AWS Lambda Java вызвана несколько раз

Моя функция работает успешно и хорошо в течение таймаута (который установлен на максимум 5 минут). Он возвращает строку, которую я могу увидеть вывод, когда я тестирую функцию в консоли.

Я видел кое-что в Интернете о необходимости называть функцию Context success/done, но не вижу этого в Java SDK (кажется, только для узла)?

Я что-то упустил?

Этого не происходит, когда я нажимаю тест на консоли (он запускается только один раз), но происходит при запуске через триггер CloudWatch или выполняется через AWS SDK.

Спасибо,

Donovan

Update: извинения, это не происходит при запуске с помощью триггера, только с помощью SDK и CLI, так что, возможно, есть некоторый тайм-аут в вызове творю.

ответ

5

В будущем для кого-либо еще проблема заключалась в том, что SDK и CLI ударили тайм-аут чтения одной минуты, а затем повторили запрос. Я вручную установил это на 5 минут, чтобы соответствовать тайм-ауту Lambda AWS.

Это можно сделать в CLI, добавив --cli-read-timeout int, где int - ваш желаемый тайм-аут (или просто --cli-read-timeout 0, который полностью отключает таймаут).

В Java SDK это может быть сделано путем вызова setSocketTimeout(int socketTimeout) на ClientConfiguration объекта

В Clojure с помощью Amazonica, добавьте :client-config {:socket-timeout xxx} в учетные данные на карте.

+0

Я решил это с помощью 'invokeRequest.setSdkRequestTimeout (180001); \t \t invokeRequest.setSdkClientExecutionTimeout (180001); ' –

Смежные вопросы