Как мне вернуть файл json из s3 на конкретный URL, но только этот URL - PullRequest
2 голосов
/ 11 мая 2019

У меня есть специальный URL, который был установлен где-то еще, и НЕ МОЖЕТ быть изменен.

mydomain.com / discountCards

Мне нужно возвращать JSON из моей корзины s3 всякий раз, когда сервер отправляет вызов выборки на mydomain.com/discountCards

Вопрос:

Я использую приложение реагирования на mydomain.com с React-Router. Таким образом, переход на mydomain.com/discountCards отображает белую страницу реакции (поскольку на этом URL ничего нет)

Я пытаюсь настроить Cloudfront для прямой ссылки на файл S3 JSON, который работает, но проблема заключается в следующем:

работает только для mydomain.com/discountCards.json, а не для mydomain.com/discountCards

Итак .... прямо сейчас у моего s3 bucket есть файл discountCards.json - но мне нужно, чтобы это была discountCard без ".json".

Или что-то еще?

Как мне вернуть этот .json из моего s3 как отдельный домен, используя AWS s3, облачный фронт и маршрут 53?

Как я уже сказал, я настроил все с облачным фронтом, указывающим на мой файл s3, но он требует, чтобы я включил расширение файла в URL (что я не могу сделать, URL уже заблокирован в камне на mydomain.com/) discountCards not discountCards.json)

Это делается для того, чтобы другие веб-сайты и приложения могли получить этот URL и вернуть json. Есть ли другой способ добиться этого?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Итак .... сейчас у моего s3 bucket есть файл discountCards.json - но мне нужно, чтобы это была discountCard без ".json"

Сохраните свой файл discountCard.json в качестве дисконтной карты без расширения .json.См. Изображение ниже

enter image description here

Затем в свойствах под метаданными добавьте content-type к application/json см. Изображение ниже

enter image description here

Доступ к корзине теперь возможен через этот URL https://s3.amazonaws.com/stackkkover/discountCards

Этот ответ был вдохновлен этим сообщением https://stackoverflow.com/a/27046083/3521330

Я надеюсь, что этот ответбудет полезноСпасибо.

1 голос
/ 15 мая 2019

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

Создайте корзину S3, я настроил ее как статический хостинг с двумя файлами index.html и discountCards.json. Статические настройки сайта

В CloudFront: -

Настройки Cloudfront Создание CF с использованием статического веб-сайта S3 bucket в качестве источника.Не используйте ковш S3 из раскрывающегося списка.Вы использовали неверное происхождение, то есть файл JSON.Используйте только ведро как источник и папку как путь к источнику.

Затем создайте лямбда-функцию со следующим кодом: Лямбда-создание

exports.handler = async (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;
    const origin = request.origin;
    const response = event.Records[0].cf.response;

    console.log("The initial origin is " + JSON.stringify(origin)); //Shows the original origin 
    console.log("The Initial request is " + JSON.stringify(request)); //Shows the original origin request  
    const originDomain = origin.custom.domainName;

    // Checks the request uri for the `/discountCards` and replaces it with `/discountCards.json 
    if (request.uri == "/discountCards") {
        request.uri = "/discountCards.json";
    }

    console.log("The final origin is " + JSON.stringify(origin)); //Shows the final origin
    console.log("The final request is " + JSON.stringify(request)); //Shows the final request
    callback(null, request); };

ЛямбдаФункция изменит файл request.uri на файл, который вы хотите обслуживать, и, поскольку он обслуживается CloudFront, URL-адрес в браузере останется прежним.

Сохраните лямбда-функцию и опубликуйте ее с номером версии./tag.

Перейдите в дистрибутив CloudFront> Поведения (выберите поведение по умолчанию)> Изменить.Перейдите в конец страницы, чтобы связать лямбда-функции, выберите «Исходный запрос» и вставьте лямбда-функцию ARN (доступно на странице лямбда-функции, в верхнем правом углу), сохраните и аннулируйте кэш. Это должно выглядеть так.в конце

Сайт ведра index.html!

Ведро с содержимым discountCards.json

Актуальный сайт с Route53 + Cloudfront + Lambda

Конечный результат Вуаля!На странице будет файл JSON по нужному пути !!Без какого-либо перенаправления.не забудьте Invalidate Cache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...