Вот ответ, который я получил от службы поддержки AWS.Оно работает!Я еще не смог отправить обратно к клиенту, хотя.Если кто-нибудь успешно это сделал, пожалуйста, дайте мне знать.Я пытаюсь использовать AmazonHTTPClient, и мне не ясно, как правильно подписать сообщение с помощью AWS4Signer.Если кто-нибудь успешно сделал это, пожалуйста, дайте мне знать.
В настоящее время мы не предлагаем поддержку веб-сокетов в APIGatewayProxyRequestEvent, как мы делаем для REST [1].Однако я упомянул об этом команде, которая присматривает за репозиторием GitHub, так что в конечном итоге они также реализуют класс для веб-сокета.
Альтернативой на данный момент является обработка ввода как потока ипроанализируйте его, используя любой доступный анализатор JSON.Для начала я приложил пример проекта, который вы можете создать с помощью "пакета mvn" и загрузить в Lambda.Я лично проверил его и смог напечатать весь requestContext [2], возвращенный API Gateway, в виде строки.Единственная недостающая часть - это разбор строки JSON.
Обратите внимание, что предоставленный мною код основан на некоторых примерах, которые мне удалось собрать внутри, и он не готов к работе, он используется исключительно как шаблонкод.Также хочу отметить, что поддержка кода обычно выходит за рамки поддержки AWS Premium, поэтому я не могу гарантировать, что я или другие инженеры AWS смогут поддерживать этот код в дальнейшем.Однако я хотел бы предоставить вам кое-что для начала, так как я понимаю, что в нашей документации отсутствуют примеры Web Socket API Gateway и Java.
SAMPLE CODE SAMPLE
package example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class LambdaBasicStreamFunction implements RequestStreamHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
int letter;
String eventObject = "";
while ((letter = inputStream.read()) > -1) {
char inputChar= (char) letter;
eventObject += inputChar;
}
//Passing a custom response as the output string
String response = "{\n" +
" \"statusCode\": 200,\n" +
" \"headers\": {\"Content-Type\": \"application/json\"},\n" +
" \"body\": \"plain text response\"\n" +
"}";
outputStream.write(response.getBytes());
System.out.println("Input-Event: " + eventObject);
}
}