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

Редактируемая карта перезаписи URL для веб-сайта CloudFront / S3 с использованием Lambda @ Edge

Я переношу статический веб-сайт с IIS на Amazon S3, используя CloudFront для https. Старый сайт использовал модуль перезаписи URL и имел 301 карту перенаправления с более чем 200 записями. Вот пример:

example.com?pageID=1234 => example.com/about/history

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

Я хочу использовать триггер события пользовательского запроса CloudFront с функцией Lambda @ Edge, чтобы создать карту перезаписи пар ключ-значение (что-то вроде того, что описано в это руководство). Функция получит URI запроса и, если он соответствует любому из ключей на карте, изменит запрос, чтобы отразить соответствующее значение.

Я мог бы жестко закодировать карту перезаписи в функцию Lambda, но со временем на карту будут добавляться новые записи. Я бы предпочел не создавать новую версию функции, а затем редактировать поведение CloudFront для использования этой новой версии всякий раз, когда требуется новый персональный URL. Это кажется опасным и подверженным ошибкам, которые могут испортить CloudFront.

Кто-нибудь знает, как создать карту перезаписи (файл JSON или что-то в этом роде?), Которую можно прикрепить к функции Lambda и отредактировать, не изменяя саму функцию Lambda? Спасибо!

Я бы спас Файл конфигурации JSON в Ковш S3 и сделал Лямбда @ Edge прочтите его при запуске (хотя не для каждого запроса! только один раз при запуске Lambda).

Дайте Lambda соответствующее разрешение IAM на чтение файла с S3, и все готово.

  • у вас будет конфигурация, отделенная от кода
  • нет необходимости повторно развертывать Lambda или перенастраивать CloudFront
  • изменения конфигурации будут распространяться глобально в течение нескольких минут (вы можете настроить время истечения срока действия конфигурации в Lambda, если хотите повторно загружать его каждые несколько минут)

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