Как ответить от Lambda внутри частной подсети на веб-сокет шлюза API, используя VPC Link и VPC Endpoint
Я перехожу с архитектуры, в которой у меня есть лямбда внутри частной подсети, общаюсь с общедоступной подсетью, в которой есть NatGateway, запускаемая API-шлюзом WebSocket. А теперь я удалил шлюз Nat и вставил конечную точку VPC с каналом VPC Link. Это я нашел по ссылке: https://d1.awsstatic.com/whitepapers/private-api-best-practices.pdf
Моя конечная точка VPC в настоящее время имеет открытую политику, я не использовал Enable Private DNS Name, потому что в моем VPC есть другие проекты, которые взаимодействуют с API Gateway.
Мой шлюз API активировал лямбду, но не смог ответить на ответное сообщение. У моей лямбды истекло время ожидания.
В моей старой архитектуре конечная точка возврата была
https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage}
, и теперь, когда я пытаюсь ответить, это не работает с этой конечной точкой.
Мне нужно изменить конечную точку?
Моя группа безопасности и NACL очень открыты, пока я не закончу тестирование этого соединения. Связь VPC и конечная точка шлюза API настроены с использованием подсети Lambda и группы безопасности Lambda.
Что-то не хватает в VPC Link или VPC Endpoint?
Изменить: я активировал журнал в ApiGateway, и перед журналами лямбда он возвращается:
{
"requestId": "em-5aGamaDDAdtd=",
"ip": "",
"caller": "-",
"user": "-",
"requestTime": "30/Apr/2021:17:57:42 +0000",
"eventType": "MESSAGE",
"routeKey": "lambda",
"status": "504",
"connectionId": "em-5abCDaaDBJtw="
}
И клиент получает сообщение:
{
message: "Endpoint request timed out", connectionId: "enBZ-dFG2oAFDA4a=",…}
connectionId: "em-5abCDaaDBJtw="
message: "Endpoint request timed out"
requestId: "em-5aGamaDDAdtd="
1 ответ
Я обнаружил свою проблему, у моего VPC Link не было соединения со шлюзом API. В AWS::ApiGatewayV2::Integration мне нужно было вставить соединение VPC Link.