Я следовал учебному пособию здесь , чтобы создать 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 ",
Я не понимаю, почему.
Таблица маршрутизации общедоступной подсети выглядит следующим образом:
Запрос GET
на http://www.google.com
должен совпадатьigw-XXXXXXXXX
цель.Почему интернет-шлюз (igw) не может доставить запрос на http://www.google.com
и вернуть содержимое сайта?
В этой статье сказано, что я должен установить функцию лямбда-выражения внутри частногоподсеть, чтобы иметь доступ к Интернету.
Если вашей функции Lambda требуется доступ к частным ресурсам VPC (например, к экземпляру Amazon RDS DB или Amazon EC2), вы должны связать функцию с VPC.,Если вашей функции также требуется доступ к Интернету (например, для достижения общедоступной конечной точки службы AWS), ваша функция должна использовать шлюз или экземпляр NAT.
Но это не объясняет, почему я не могуустановить лямбда-функцию в общедоступной подсети.