2016-05-21 3 views
2

Кто-нибудь знает текущий и правильный способ для асинхронного вызова функций Amazon AWS Lambda вместо синхронного?Как активировать функцию лямбда AWS асинхронно

API InvokeAsync в SDK Java SDK по-прежнему доступен, но отмечен как устаревший, и они предлагают использовать API Invoke. Я не могу понять, почему они заставляют нас использовать синхронизацию. У меня есть веб-интерфейс, который отправляет несколько пакетных заданий. Я не могу ожидать, что интерфейс будет оставаться открытым в течение нескольких минут, пока он ждет ответа (который фактически отправляется им по электронной почте после 4-5 минут обработки).

В идеале я пытаюсь понять, как это сделать с их конечными точками API, а не с Java SDK, потому что среда (GAE), в которой я запускаю мой сервер, не поддерживает использование AWS HttpClient.

ответ

5

Я смотрю последние документы API here, и похоже, что только AWSLambdaAsyncClient.invokeAsyncAsync() устарел. Метод AWSLambdaAsyncClient.invokeAsync() не отмечен как устаревший. Похоже, что они просто делают некоторую очистку кода, удаляя необходимость в классах InvokeAsyncRequest и InvokeAsyncResult и дополнительных методах invokeAsyncAsync().

Вы должны иметь возможность использовать метод AWSLambdaAsyncClient.invokeAsync(), который использует InvokeRequest и возвращает InvokeResult. Возможно, вам придется установить InvocationType на InvokeRequest на InvocationType.Event. Неясно, если это необходимо, если вы используете Async-клиент.

Что касается второго вопроса о вызове лямбда-функций асинхронно без использования SDK, я бы рассмотрел использование API Gateway as a service proxy. Это рекомендуемый способ отображения функций лямбда для асинхронных вызовов.

+0

Спасибо, что помогли прояснить вещи для меня! – pilcrowpipe

2

Ниже код может быть использован для вызова лямбда асинхронно из другой Lambda

AWSLambdaAsyncClient client = new AWSLambdaAsyncClient(); 
client.withRegion(Regions.fromName(region)); 
InvokeRequest request = new InvokeRequest(); 
request.setInvocationType("Event"); 
request.withFunctionName(functionName).withPayload(payload); 
InvokeResult invoke = client.invoke(request); 
+0

Приведенный выше пример для Lambda в JAVA –

+0

как определить полезную нагрузку, если я хочу добавить JsonObject, то !! –

+0

ObjectMapper может использоваться для преобразования пользовательского объекта в JSON, а затем его можно передавать как полезную нагрузку –

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