Почему лямбда-функция AWS в общедоступной подсети VPC не может подключаться к Интернету? - PullRequest
0 голосов
/ 25 октября 2018

Я следовал учебному пособию здесь , чтобы создать VPC с общими и частными подсетями.

Затем я установил лямбда-функцию AWS внутри общедоступной подсети, чтобы проверить, может ли она подключитьсяво внешний интернет.

Вот моя лямбда-функция, написанная на python3

import requests

def lambda_handler(event, context):
    r = requests.get('http://www.google.com')
    print(r)

Приведенная выше функция не смогла извлечь содержимое http://www.google.com, когда я установил его в общедоступной подсети в VPC.

Вот сообщение об ошибке:

"errorMessage": "HTTPConnectionPool (host = 'www.google.com', port = 80): максимальное число повторов превышено с помощью url: /(Вызвано NewConnectionError (': не удалось установить новое соединение: [Errno 110] Время ожидания истекло',)) "," errorType ":" ConnectionError ",

Я не понимаю, почему.

Таблица маршрутизации общедоступной подсети выглядит следующим образом:

enter image description here

Запрос GET на http://www.google.com должен совпадатьigw-XXXXXXXXX цель.Почему интернет-шлюз (igw) не может доставить запрос на http://www.google.com и вернуть содержимое сайта?

В этой статье сказано, что я должен установить функцию лямбда-выражения внутри частногоподсеть, чтобы иметь доступ к Интернету.

Если вашей функции Lambda требуется доступ к частным ресурсам VPC (например, к экземпляру Amazon RDS DB или Amazon EC2), вы должны связать функцию с VPC.,Если вашей функции также требуется доступ к Интернету (например, для достижения общедоступной конечной точки службы AWS), ваша функция должна использовать шлюз или экземпляр NAT.

Но это не объясняет, почему я не могуустановить лямбда-функцию в общедоступной подсети.

1 Ответ

0 голосов
/ 25 октября 2018

Причина, по которой ваша функция Lambda не может получить доступ к Интернету, даже если функция Lambda работает внутри общедоступной подсети VPC, заключается в том, что функции Lambda не имеют и не могут иметь публичные IP-адреса.Вы не можете отправлять трафик напрямую в интернет без публичного IP.Вам необходимо будет выполнить маршрутизацию через NAT.

Целевым маршрутом по умолчанию для трафика в общедоступной подсети VPC является Интернет-шлюз (IGW) , поскольку функция Lambda имеет только частный IP-адрес.все пакеты в Интернет из функции Lambda будут отброшены на IGW.

Если вашей функции Lambda на самом деле не требуется доступ к частным ресурсам внутри вашего VPC, то обычно вам не нужно развертывать Lambda.в VPC.Но если это необходимо, запустите функцию Lambda в частной подсети и обеспечьте маршрут по умолчанию из этой подсети в экземпляр NAT или шлюз NAT в общедоступной подсети.И настроить IGW.

...