#amazon-web-services #aws-lambda #amazon-vpc
#amazon-web-services #aws-lambda #amazon-vpc
Вопрос:
Вот мое дело: у меня есть 2 функции A и B:
- A находится в Lambda VPC по умолчанию, предоставляемом AWS, который имеет открытый входящий и исходящий доступ в Интернет
- B находится на определенном VPC с базой данных RDS, с входящим доступом, но без доступа в Интернет (без шлюза NAT).
Процесс заключается в следующем :
- A отправляет данные в B (через шлюз API), в то время как B вставляет эти данные в базу данных RDS
- Предполагается, что B отправляет подтверждение (через другой шлюз API) о том, все в порядке или нет, но A продолжает получать ошибку 502 (тайм-аут, я думаю).
Сначала я подумал, что это глупая ошибка формата вывода прокси-сервера Lambda, но теперь я понял, что это более серьезно. Я ищу какой-нибудь простой / дешевый выход (я студент с ограниченным бюджетом, и это PoC). Есть ли какое-то простое решение этой проблемы?
Комментарии:
1. Не могли бы вы изменить is на то, что Lambda-A вызывает Lambda-B через
Invoke()
вызов API вместо перехода через API Gateway? Затем он может передавать информацию обратно в качестве возвращаемого значения.2. не требует ли возвращаемое значение доступа в Интернет?
3. Ответ вернется через
payload
поле в ответе наInvoke()
вызов API. Для Lambda-A потребуется доступ в Интернет, но не для Lambda-B. Однако Lambda-A нужно будет дождаться завершения работы Lambda-B, поэтому вы платите за две лямбда-функции, пока выполняется Lambda-B.
Ответ №1:
К сожалению, ни у одной из них не будет доступа в Интернет.
«Размещение» функции A в VPC по умолчанию не дает ей ни доступа в Интернет, ни общедоступного IP :. Из документов.
Подключение функции к общедоступной подсети не дает ей доступа в Интернет или общедоступного IP-адреса.
Функция A может вызывать B, если она не в VPC. В этом случае у нее будет доступ в Интернет, и она сможет напрямую вызывать функцию B или вызывать конечную точку вашего шлюза API. Но это не может быть в общедоступной подсети. Если вы все же хотите разместить его в VPC, то он должен находиться в частной подсети (не общедоступной), и вы должны использовать частную конечную точку для шлюза API. Такая лямбда-функция не сможет вызывать общедоступный API с помощью шлюза NAT.
Функция B сможет вызывать ваш шлюз API при условии, что вы используете частную конечную точку.
Комментарии:
1. Извините, возможно, я был неясен. Я имел в виду, что функции A нет ни в одном из моих виртуальных компьютеров, у нее есть доступ к Интернету, это точно (я использую уже несколько недель). Теперь, будет ли частное конечное решение работать, даже если функции A нет в VPC?
2. @Fares Привет. Чтобы использовать частную конечную точку API gateway, ваша функция A должна быть в VPC. Частные конечные точки доступны только с VPC. Но функция B уже находится в частной подсети какого-то VPC. Таким образом, он должен иметь доступ к частной конечной точке, если вы разместите его в том же VPC или подсети.
3. Таким образом, частная конечная точка должна находиться в том же VPC / Подсети, что и моя функция B, верно?
4. ДА. Более подробная информация о частных конечных точках находится здесь .