Как сделать так, чтобы приложение Angular в AWS S3 bucket выполняло вызовы API для обслуживания в AWS Elasti c Beanstalk - PullRequest
0 голосов
/ 15 января 2020

Я перенес веб-сайт на AWS с Angular на одном сервере, Nodejs / Express на другом сервере и с использованием базы данных PostgreSQL в RDB. Это прекрасно работает и в настоящее время работает, но не очень хорошо для масштабируемости и доступности.

Поэтому я переместил Angular для обслуживания из корзины S3, доступной через CloudFront, и обновил его с помощью WebHook в моем репозитории GitHub. Кажется, все это прекрасно работает.

У меня есть Nodejs / Express с использованием Elasti c Beanstalk и еще раз с использованием WebHook, он обновляется из репозитория GitHub. У меня еще есть пара вещей, которые нужно отработать в развертывании с этим, но я думаю, что они будут незначительными (что означает, что они укусят меня позже).

То, что я не могу понять, это способ разрешить Angular делать вызовы API для балансировщика нагрузки в Elasti c Beanstalk.

  • Я все еще использую proxy.config. json? Если так, на что я могу указать? Я попытался создать запись CNAME в Route 53 для api.myapp.com, указывающую на значение DNS балансировщика нагрузки. Это не сработало.

  • Использую ли я AWS API Gateway. Здесь я пробовал разные вещи, но я не смог заставить их работать. Единственное, что казалось возможным, потребовало бы от меня определения каждого из API, который, если это вообще возможно, был бы моим последним средством.

  • Это что-то, что не может быть сделано?

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


Отредактировано

После погони за многими белками за последние пару дней, я думаю, что она сузилась до проблемы конфигурации с CloudFront.

  • У меня есть маршрут в маршруте 53, который указывает на мой CloudFront как "dev.mydomain.com", и он прекрасно работает.
  • У меня есть маршрут в маршруте 53, который указывает на my Elasti c Beanstalk Load Balancer как "api.mydomain.com".
  • Я могу позвонить, введя URL-адрес в браузере, например "https://api.mydomain.com/api/getInfo", и он возвращает информацию вместе с заголовками cors. Когда у меня приложение выполняет тот же вызов, который обслуживается из корзины S3 CloudFront, я получаю «Доступ к XMLHttpRequest по адресу« https://api.mydomain.com/api/getInfo »из источника» https://dev.mydomain.com ' была заблокирована политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». " и, конечно же, в заголовке ответа нет ни одного заголовка cors.

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

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

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Решено

Ответ на этот вопрос приблизил меня к тому месту, где я хотел быть, но он все еще не отвечал на все мои звонки. Наконец выяснили, что это были вызовы базы данных, которые не отвечали. Я не настраиваю базу данных с помощью beanstalk elasti c, так как я делаю проверку концепции для производственной установки, поэтому база данных должна быть отдельной. Наконец выяснилось, что я не добавил правило в группу безопасности в базе данных, чтобы разрешать вызовы elasti c beanstalk. После добавления этого правила и добавления правил поведения и правил происхождения в CloudFront, похоже, он работает как шарм.

0 голосов
/ 15 января 2020

Вы можете создать собственное доменное имя для URL вашего балансировщика нагрузки из Route53. Необходимо создать запись A со свойством Alias, установленным на yes, указывающим на URL-адрес DNS-сервера балансировщика нагрузки.

Amazon Route 53 также предлагает записи псевдонимов, которые являются специфическим расширением c для Amazon Route 53 для DNS. Вы можете создавать записи псевдонимов для маршрутизации трафика c на выбранные AWS ресурсы, включая балансировку нагрузки Amazon Elasti c, распределение нагрузки Amazon CloudFront, AWS среды Elastic Beanstalk, шлюзы API, конечные точки интерфейса VP C, и корзины Amazon S3, настроенные как веб-сайты

Надеюсь, это поможет.

Ссылка:

Вопрос "Какие типы записей DNS поддерживает Amazon Route 53?" на https://aws.amazon.com/route53/faqs/

...