Ссылка VPC AWS API Gateway на ELB возвращает службу, недоступную с HTTP503 в журналах ApiGateway, но ничего в журналах ELB

У меня возникли проблемы с настройкой ссылки VPC шлюза AWS API на существующий ELB, чтобы сделать частную конечную точку общедоступной.

Ошибка, которую я получаю при просмотре конечной точки шлюза API: {"message":"Service Unavailable"}

Вот настройка проекта.

  1. Экземпляры EC2 в частном VPC
  2. EC2 добавлен в целевую группу с прослушивателем порта 80
  3. ELB создан с двумя правилами: 1) http:80 на https:443 2)HTTPS на целевую группу в #2
  4. Группы Sec, используемые EC2, разрешают доступ по HTTP только из ELB.
  5. Группа Sec на ELB разрешает трафик HTTPS с определенных IP-адресов.
  6. Ссылка VPC создана для того же VPC, что и #1, включая все 3 подсети. Создана новая группа Sec, разрешающая HTTPS-трафик от всех.
  7. Группа Sec в № 5 (ELB) настроена на разрешение запросов HTTP и HTTPS от SecGroup, созданной в № 6 (ссылка VPC).
  8. Шлюз HTTP API создан
  9. Маршрут шлюза API создан, /sample/{proxy+}, с использованием настройки интеграции в качестве частного ресурса, ALB/BLB, указывающего на ELB в #3, с прослушивателем HTTP (также попробовал HTTPS), методом ANY и VPC LInk установлен на ссылку, созданную в #6
  10. Журналы Cloudwatch включены для этапа $default шлюза API.
  11. Ведение журнала ELB включено для S3.

Основная платформа отлично работает для людей, подключающихся по HTTP через ELB, однако любые запросы к конечной точке шлюза API ждут некоторое время, а затем возвращают ответ HTTP503 с телом {"message":"Service Unavailable"}

Журналы Cloudwatch показывают ответ HTTP503, но не содержат никакой другой полезной информации. Журналы ELB не показывают запросов, поступающих с запрошенным URL-адресом.

Результаты выглядят так, как будто ссылка VPC не работает, а запрос к ELB отклоняется группой безопасности на ELB, даже если SecGroup ELB настроен на разрешение «весь трафик» из SecGroup, используемой ссылкой VPC.

Я не понимаю, что может быть причиной проблемы, и надеюсь, что кто-то сможет заметить что-то, что я пропустил по пути.

Я следил за различными документами AWS, включая:

  1. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html
  2. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-private.html
  3. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html

Ни в одном из них не упоминается настройка SecGroup.

Мне удалось создать интеграцию HTTP URI и указать ее на конечной точке, которая разрешает публичные запросы. Это нехорошо, поскольку приложение должно оставаться частным, кроме одной или двух конечных точек.

Все, что я прочитал, предполагает, что подход API Gateway -> VPC Link -> ELB -> EC2 должен работать.

ОБНОВЛЕНИЕ 1

Настройка канала VPC

  1. VPC указывает на тот же VPC, в котором работают инстансы EC2, который является тем же VPC, что и ELB.
  2. Все три подсети (172.30.0.0/20, 172.30.16.0/20 и 172.30.32.0/20) включены.
  3. У него есть своя SecGroup

Интеграция со шлюзом API

Метод выбора: Ручной Целевая служба: ALB/NLB Балансировщик нагрузки: SM-01-ELB Прослушиватель: HTTP 80 Ссылка VPC: ссылка SM01-VPC

Я сделал это месяц назад, и это сработает и на вашей стороне. И я думаю, что в вашем исходном состоянии нет ничего плохого. Можете ли вы прикрепить образ конфигурации vpc_link к ALB. Я думаю, что ваш API GW не направляет трафик на ALB. Можете ли вы проверить, ставите ли вы VPC Link в частные подсети, а не в публичные?

Chuong Nguyen 01.11.2022 15:44

@AshBlake Я согласен с вами в том, что GW не перенаправляется на ELB. VPCLink использует тот же VPC, что и экземпляры EC2, и ELB. У EC2 есть общедоступные IP-адреса, но у них есть правила SecGroup, чтобы ограничить их определенными IP-адресами управления для SSH.

Steve Mapes 01.11.2022 16:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документам, там сказано:

Ссылки VPC позволяют создавать частные интеграции, которые соединяют ваши маршруты HTTP API с частными ресурсами в VPC.

Вы создали ALB и VPC Link, расположенные в частных подсетях? Я предполагаю, что вы не сможете успешно подключиться к ALB, если используете его в частных подсетях.

И можете ли вы также проверить, создан ли ENI VPC Link или нет?

Мне нужно разместить свои вопросы здесь, так как раздел комментариев для меня довольно мал

Не могли бы вы уточнить, что вы подразумеваете под «Я предполагаю, что вы не сможете успешно подключиться к ALB, если используете его в частных подсетях»?

Steve Mapes 01.11.2022 16:24

Я имею в виду, что согласно документам все ваши ресурсы должны находиться в частных подсетях, что означает наличие шлюза NAT. Я предполагаю, что вы размещаете все ресурсы в общедоступной подсети, чтобы вы могли подключаться напрямую

Chuong Nguyen 01.11.2022 16:26

Я думаю ты прав. Глядя на них, они кажутся общедоступными подсетями, которые были привязаны. Я создам новый частный VPC для тестирования, чтобы посмотреть, работает ли он, и если да, то я отмечу ответ как правильный. Это, безусловно, имело бы смысл

Steve Mapes 01.11.2022 17:04

Пожалуйста, попробуйте ^^ Я сделал это всего месяц назад, и с вашей базой все в порядке.

Chuong Nguyen 01.11.2022 17:05

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

Steve Mapes 03.11.2022 00:39

Какой смысл иметь лямбду между ними, если эти (подсети) общедоступны? В этом случае вы можете использовать HTTP-интеграцию APIG и указать ее на свой LB.

Rati_Ge 04.11.2022 11:04

Другие вопросы по теме