HTTP AWS Lambda доступен из Интернета, но недоступен с EC2 в той же учетной записи

#amazon-web-services #aws-lambda #amazon-vpc

Вопрос:

У меня есть лямбда-функция, к которой подключен шлюз API. Он имеет общедоступный IP-адрес и доменное имя (созданное бессерверной платформой). Я могу получить доступ к нему из широкого Интернета, из моего собственного браузера (и других устройств).

Проблема в том, что он, похоже, недоступен для других служб в моей учетной записи, например, для экземпляра EC2. Из упомянутого экземпляра curl google.com работает и возвращает ответ, но mylink.com время ожидания свертывания истекает.

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

Обновление: Используя curl --verbose , я обнаружил, что при доступе из любого другого места IP-адрес, к которому ведет шлюз API, отличается от того, к которому осуществляется доступ из моей учетной записи AWS. VPC, похоже, не имеет значения, я создал новый VPC, экземпляр EC2 внутри него, и он все равно сделал то же самое.

Комментарии:

1. Есть ли у вас конечная точка интерфейса VPC для шлюза api?

2. Можете ли вы показать таблицу маршрутов для этого VPC?

3. Поэтому ссылки запрещены, поэтому я опишу: 172.31.0.0/16 локально активен, 0.0.0.0/0 igw-69***** активный

4. Вы вносили какие-либо изменения в VPC по умолчанию?

5. @Marcin Итак, это сработало. Не могли бы вы, пожалуйста, написать ответ, объясняющий, как и почему это работает, и я назначу вам награду?

Ответ №1:

Основываясь на комментариях.

Проблема была вызвана наличием конечной точки интерфейса VPC для шлюза API в VPC по умолчанию. Конечная точка интерфейса VPC для шлюза API используется для частного API, а не для общедоступных API, как это используется в OP. Впоследствии вызовы общедоступных конечных точек API завершаются неудачно, как объясняется в блоге AWS:

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

Есть два способа борьбы с этой проблемой:

В случае с операцией для решения проблемы был использован второй вариант.

Комментарии:

1. Как же тогда оператору удалось получить доступ к функции Lambda через шлюз API из Интернета? Кстати, спасибо за хорошее объяснение.

2. @СтефанН, Спасибо. Вопрос был прямо противоположным. Как получить доступ к общедоступному шлюзу API из lambda в VPC.

3. ОК. Но в первоначальном описании вопроса (первый абзац) ОП утверждает, что он может получить доступ к функции Lambda из Интернета. Почему это так, если «общедоступные сети недоступны»?

4. @StefanN Лямбда была снабжена общедоступным API. Не было доступа к API из экземпляра ec2. Это может произойти из-за конечной точки интерфейса шлюза api, которая может скрывать общедоступные dns-имена шлюза api.

Ответ №2:

Экземпляр EC2, скорее всего, находится внутри VPC, у которого нет общедоступного доступа в Интернет (или может быть, но через балансировщик нагрузки, хост бастиона или множество других опций).

Вам нужно будет выяснить, в каком VPC находится экземпляр EC2, и убедиться, что ваша функция lambda имеет к нему доступ. Вы можете добавить функцию в VPC, следуя документации

Комментарии:

1. Он находится внутри VPC по умолчанию, и у него есть доступ в Интернет. Просто, как ни странно, нет доступа к этой конкретной лямбде. Что еще более интересно, у него был доступ к нему всего несколько дней назад. Не он просто перестал работать вместе с другой машиной EC2 в том же VPC.