CloudFront: внутреннее перенаправление на указанный c файл в файле S3 bucket с помощью RoutingRule - PullRequest
0 голосов
/ 31 марта 2020

Я использую AWS CDK для настройки нового частного сегмента S3 stati c с конфигурацией CloudFront для его обслуживания. Структура сегмента S3 выглядит следующим образом:

bucketname/1.2.3-SNAPSHOT/
bucketname/1.2.3-SNAPSHOT/index.html
bucketname/1.2.3-SNAPSHOT/config
bucketname/1.2.3-SNAPSHOT/config/config-dev.js
bucketname/1.2.3-SNAPSHOT/config/config-tst.js
bucketname/1.2.3-SNAPSHOT/config/config-acc.js
bucketname/1.2.3-SNAPSHOT/config/config-prd.js

Например, при развертывании версии 4.5.6-SNAPSHOT сайта stati c в папке создается новая папка 4.5.6-SNAPSHOT. bucketname S3 ведро. На данный момент индекс. html состоит из следующего:

<html>
  <head>
    <script src="https://dev.somesite.com/config/config-dev.js" />
  </head>
  <body>...</body>
</html>

Мне удалось настроить конфигурацию облачного фронта для сопоставления https://dev.somesite.com/some-path с bucketname/1.2.3-SNAPSHOT/some-path с использованием S3 destinationPrefix. Когда я перехожу к https://dev.somesite.com/, индекс. html обслуживается, и конфигурация js загружается. Пока все хорошо.

Однако, как вы можете видеть в HTML, ссылка на config-dev.js все еще жестко закодирована. Я бы хотел, чтобы конфигурация CloudFront внутренне (не в 30 раз) перенаправляла вызов https://dev.somesite.com/config/config.js на bucketname/1.2.3-SNAPSHOT/config/config-dev.js. Я попытался настроить RoutingRule, используя различные значения KeyPrefixEquals и ReplaceKeyWith, но безрезультатно. Я пытаюсь настроить конфигурацию, аналогичную this one (пример 2).

Мой сценарий CDK приводит к следующему правилу маршрутизации:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>1.2.3-SNAPSHOT/config</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyWith>1.2.13-SNAPSHOT/config/config-dev.js</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

Однако, вызов https://dev.somesite.com/config/anything не перенаправляется в требуемый файл config-dev. js. Кто-нибудь знает лучший подход к этому вопросу? Является ли настройка RoutingRule правильным подходом для всех?

[править]

Я использую настройку S3 destinationPrefix=1.2.3-SN, чтобы убедиться, что новая папка загружена в корзину bucketName в новой папке назначения (префикс) '1.2.3-SN'. Одновременно я настроил originPath CloudFront на /1.2.3-SN, чтобы убедиться, что папка установлена ​​как папка root. Это работает как ожидалось; переход к https://dev.somesite.com/ приводит к bucketname/1.2.3-SN/index.html обслуживанию.

Что бы я хотел сделать sh - это возможность "перенаправить" любой вызов на https://dev.somesite.com/config/**. js в один файл конфигурации, расположенный в bucketname/1.2.3-SN/config. Причина, по которой я хотел бы сделать это, заключается в том, чтобы ссылка на скрипт в index. html не нуждалась в изменении для каждой среды, в то же время экранируя другие файлы конфигурации, которые не нужны в текущей среде.

1 Ответ

1 голос
/ 10 апреля 2020

Вы можете запускать лямбда-функции на краях CloudFront. Он называется lambda@edge Когда CDN получает запрос ( Запрос средства просмотра ), вы можете настроить множество вещей, таких как:

  • Пересылка к указанному c ведро
  • Настройка заголовков ответов
  • ...

Я считаю, что это то, что вам нужно.

...