Руководство AWS с использованием Cloudfront S3 для статических ресурсов - EC2 для вызовов API - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь заставить мой статический веб-сайт отправлять некоторые базовые вызовы API в экземпляр EC2 - сможет ли кто-нибудь поделиться передовым опытом или указать мне правильное направление?

Текущая настройка таковаследующим образом:

  • Пакет React и статические активы обслуживаются в облачном фронте / s3
  • SSL, управляемый через ACM и автоматически применяемый для моего развертывания Cloudfront
  • Домен, зарегистрированный и управляемый черезМаршрут 53

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

Для первого варианта я создал второе начало на облачном фронте и указал его на маршрут 53 DNS, который указывает на мой эластичный IP для ec2.Проблема в том, что я не могу заставить работать API, несмотря на то, что в моей консоли Cloudfront включен POST для всех источников:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Method>POST</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>2B5DB5E28188BE4A</RequestId>
<HostId>yXiiLTR5v8KERjzbG3fx4BGcZG5FO0e3Yufa0b9aC2W3sMyuOK3BBADtZj097T8E0qBZ3F/rBC8=</HostId>
</Error>

Полагаю, мои вопросы, помимо настройки проверки работоспособности, таковы:

  • Нужно ли запускать какие-тосертификата на моем экземпляре EC2?В настоящее время я перенаправляю все HTTP на HTTPS для моих статических активов - как это вписывается в вызовы API с помощью axios в React?Будут ли вызовы API автоматически отправляться через 443, когда клиент подключен через https?

  • Есть ли лучший способ выполнить то, что я пытаюсь сделать?Это персональный веб-сайт, имеющий форму электронной почты (единственная причина, по которой он не может быть полностью статичным). Все, что я запускаю на бэкэнде, - это чрезвычайно легкий экземпляр узла, который отправляет электронные письма владельцу

Большое спасибо за ваше время и помощь!Я ценю это

1 Ответ

0 голосов
/ 26 ноября 2018

Для любого, кто пытается заставить эту настройку работать с CloudFront CDN - наилучшим подходом было использование лямбда-функций.Создайте лямбда-функцию, которая обрабатывает каждый запрос и управляет с помощью AWS API Gateway.

CORS должен быть включен в вашей корзине S3 с использованием следующего фрагмента кода:

`<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>
   <AllowedHeader>*</AllowedHeader>
  <MaxAgeSeconds>3000</MaxAgeSeconds>
 </CORSRule>
</CORSConfiguration>`

Также кое-что я забрализ этого упражнения, которое может помочь другим людям: вам нужно возвращать 200 с этими заголовками всякий раз, когда клиент отправляет запрос OPTIONS на вашу конечную точку.Это можно сделать на любом бэкэнде, который вы выберете, но вот руководство по API Gateway:

https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

Вот руководство, которое я нашел и которое описывает, как создать подобный (хорошо масштабируемый) стек:

https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/

Спасибо!

...