Я пытаюсь заставить локальную Java программу работать в AWS Lambda и сделать так, чтобы ее можно было вызывать с помощью HTTP-запроса. Все, что мне нужно, это просто иметь возможность дублировать функциональность запуска java локально из командной строки через HTTP в AWS, чтобы другие сотрудники компании могли выполнить код, просто отправив HTTP-запрос в Postman (на данный момент, следующий шаг - это веб-форма, которая просто делает запрос) вместо загрузки jar и запуска командной строки Java.
Я прошел учебник hello world на сайте Amazon и смог адаптировать свой код и успешно запустите его, используя функцию тестирования на панели управления AWS Lambda. Я также могу видеть журналы в cloudwatch, которые он запустил, а также наблюдать за результатами. Так что все это работает от функции тестирования панели управления Lambda.
Таким образом, вместо аргументов командной строки я даю аргументы в формате JSON следующим образом:
{
"environment": "dev",
"username": "Test",
"password": "Test22",
"storeId": "TESTMA0001",
"data": "a,b,c,d"
}
И это работает очень хорошо при вызове лямбда-выражения из тестовой функции.
Однако я хочу иметь возможность ввести это в теле HTTP-запроса и запустить свою лямбду, поэтому я добавил шлюз API через gui в панели aws lambda, выбрал вид HTTP API и параметры по умолчанию.
Затем я отправляю HTTP-запрос GET на конечную точку API, тело которого совпадает с вводом, которое я использовал на панели тестирования, но всякий раз, когда я запускаю его, я получаю внутреннюю ошибку сервера. Я включил журналы доступа для API шлюза, и я получаю следующее: моя лямбда не запускается через API, поскольку при использовании API не пишется лямбда-журнал, он записывается при запуске из AWS лямбда-панель.
{
"requestId": "KByVuheeoAMEPLA=",
"ip": "",
"requestTime": "27/Mar/2020:02:25:40 +0000",
"httpMethod": "GET",
"routeKey": "$default",
"status": "500",
"protocol": "HTTP/1.1",
"responseLength": "35"
}
Моя функция handleRequest принимает строку, отображение строки в качестве входных данных и возвращает строку в качестве вывода:
public class StoreCategoryImporter implements RequestHandler<Map<String,String>, String> {
@Override
public String handleRequest(Map<String,String> event, Context context)
Я даже не использую объект контекста, но он был там в учебник так и остался.
Я часами гуглил и не смог найти решение, любая помощь будет признательна. Я нахожу большинство AWS руководств, пропускающих некоторые важные детали, или у них их нет для разработчиков POJO и использующих js, которые я не понимаю.
Заранее спасибо.