Назад | Перейти на главную страницу

Какой сервис AWS поможет избежать проблем CORS со статическим контентом S3 и серверными модулями aws

Введение

На Amazon AWS развернута следующая архитектура.

Цель состоит в том, чтобы предоставить веб-приложение (одностраничное приложение), выступающее в качестве точки входа в https://app.acmecorp.com. Это одностраничное приложение, которое:

Бэкэнд

Идея состоит в том, чтобы развернуть серверные части в кластере эластичных контейнеров (через докер). Затем они порождаются / автоматически масштабируются в целевые группы, которые обслуживаются балансировщиком нагрузки. Бэкэнд доступен через https://backend.acmecorp.com. (DNS CNAME, указывающая на балансировщик нагрузки AWS)

Внешний интерфейс

Одностраничное приложение развертывается в корзине Amazon S3 и предоставляется через хостинг статического сайта S3. (http://frontend.s3-website-us-west-2.amazonaws.com). Это также может быть представлено через DNS CNAME на http://frontend.acmecorp.com

Обратный прокси

Я бы хотел следующее. Пользователи получают доступ к приложению через https://app.acmecorp.com. Это должно обслуживать статический контент. Чтобы избежать установки CORS, я хотел бы, чтобы одностраничное приложение могло выполнять вызовы API из этого домена, чтобы /api, поэтому призывает https://app.acmecorp.com/api/** должно отображаться на серверной части.

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

Вы можете достичь своей цели с помощью Cloudfront и обратного прокси-сервера:

  1. Сначала создайте свой дистрибутив с app.acmecorp.com с именем CNAME и загрузите собственный сертификат SSL для этого поддомена.

  2. Создайте два источника: один указывает на вашу корзину, а другой - на балансировщик нагрузки API. Эти два источника будут использоваться позже при настройке поведения CDN.

  3. Создайте поведение для / api, в котором ваш балансировщик является источником, передавая все заголовки источнику (что эффективно отключает кеширование края)

  4. Настройте поведение по умолчанию, чтобы оно указывало на вашу корзину S3.

  5. Наконец, укажите свой app.acmecorp.com на конечную точку CDN в DNS.

У происхождения и поведения Cloudfront есть гораздо больше возможностей, о которых вам нужно позаботиться, но основы для удовлетворения ваших потребностей есть.