Как заставить 2 лямбда-функции взаимодействовать друг с другом.. когда у одного из них нет доступа в Интернет?

#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. ДА. Более подробная информация о частных конечных точках находится здесь .