Учебники

Использование AWS Lambda @ Edge с CloudFront

Lambda @ Edge является дополнением к сервису AWS Lambda Compute Service, который используется для настройки контента, предоставляемого облачным фронтом.

Блок-схема, показывающая работу AWS Lambda с облачным фронтом от AWS, показана ниже —

Блок-схема Cloudfront

Существует четыре способа использования AWS Lambda:

  • Viewer Request — Конечный пользователь делает запрос под названием Viewer Request для CloudFront.

  • Запрос отправления CloudFront направляет запрос отправителю

  • Ответ источника — CloudFront получает ответ от источника

  • Ответ зрителя — CloudFront отправляет ответ зрителю

Viewer Request — Конечный пользователь делает запрос под названием Viewer Request для CloudFront.

Запрос отправления CloudFront направляет запрос отправителю

Ответ источника — CloudFront получает ответ от источника

Ответ зрителя — CloudFront отправляет ответ зрителю

Мы можем использовать Lambda @ Edge для следующих целей —

  • Для изменения заголовков по запросу и времени ответа.

  • Добавьте куки в заголовки. Выполните тестирование AB на основе запроса и ответа.

  • Перенаправьте URL на другой сайт, основываясь на деталях заголовка.

  • Мы можем получить пользовательский агент из заголовков и узнать детали браузера, ОС и т. Д.

Для изменения заголовков по запросу и времени ответа.

Добавьте куки в заголовки. Выполните тестирование AB на основе запроса и ответа.

Перенаправьте URL на другой сайт, основываясь на деталях заголовка.

Мы можем получить пользовательский агент из заголовков и узнать детали браузера, ОС и т. Д.

реквизиты

Чтобы начать работать с CloudFront и Lambda @ Edge, нам нужно следующее:

  • Создать хранилище S3 с подробной информацией о файле

  • Создайте роль, которая позволит работать с CloudFront и Lambda @ Edge

  • Создать дистрибутив CloudFront

  • Создать лямбда-функцию

  • Добавить детали лямбда-функции в облачный фронт

  • Проверьте URL-адрес облачного фронта в браузере

Создать хранилище S3 с подробной информацией о файле

Создайте роль, которая позволит работать с CloudFront и Lambda @ Edge

Создать дистрибутив CloudFront

Создать лямбда-функцию

Добавить детали лямбда-функции в облачный фронт

Проверьте URL-адрес облачного фронта в браузере

Мы будем работать над примером с CloudFront и Lambda @ Egde, в котором мы будем размещать страницу и изменять ответ при обнаружении как настольного компьютера, так и устройства.

Создать хранилище S3 с подробными сведениями о файле

Войдите в консоль AWS, создайте корзину в S3 и добавьте . HTML- файл, который вы хотите отобразить.

Ведро хранения

Нажмите на S3 и создайте корзину, как показано ниже —

Amazon S3

Теперь нажмите кнопку « Создать корзину» и добавьте детали корзины, как показано ниже —

Кнопка Создать ковш

Нажмите кнопку « Создать» и загрузите HTML-файл.

Загрузить HTML

Создать роль

Перейдите в консоль AWS и нажмите IAM .

Безопасность

Теперь нажмите Роли -> Создать роль , как показано на рисунке —

Создать ролевую панель

Выберите разрешение для S3, Lambda и Cloudfront . Хорошей практикой является создание политики, дающей разрешение только на требуемую функцию хранения с использованием сведений ARN.

В приведенном ниже примере мы показываем разрешение на полный доступ . Политики для роли с именем роли для облачного фронта добавляются, как показано выше. Нажмите на Создать роль.

Полное разрешение доступа

Роль Cloudfront

Вся политика, необходимая для lambda @ edge и cloudfront, показана выше. Здесь необходимо выполнить дополнительный шаг, поскольку в случае облачного фронта URL-адрес будет доступен по всему региону, и для этого нужны доверительные отношения между службами, которые мы используем.

Теперь, для созданной роли, нажмите на вкладку Доверительные отношения, как показано на рисунке —

отношения

Нажмите на Изменить доверительные отношения, как показано ниже —

Изменить доверительные отношения

Он отображает документ политики. Нам нужно добавить другие сервисы в Принципал -> Сервис, которые мы планируем использовать. Окончательный документ о политике доверия показан ниже:

Окончательные доверительные отношения

Нажмите кнопку « Обновить политику доверия» , чтобы сохранить изменения.

Создать дистрибутив CloudFront

Перейти к сервису CloudFront, как показано ниже —

Создать Cloudfront

Нажмите на сервис CloudFront и нажмите Создать рассылку

Создать рассылку

Настройки источника, Настройки поведения и Настройки распространения

Давайте посмотрим на эти настройки один за другим —

Настройки происхождения

Настройки происхождения

Различные параметры настроек источника описаны ниже:

Исходное доменное имя — это имя корзины S3, в которой мы сохранили html-файлы. Мы также можем хранить изображения, если они есть, в корзине S3, создавая папки по нашему выбору.

Origin Path — Здесь вам нужно ввести имя папки, в которой хранятся файлы. В настоящее время у нас нет этой папки, поэтому мы пока оставим ее пустой.

Origin ID — Заполняется, когда выбрано имя домена происхождения. Вы можете изменить идентификатор в соответствии с вашим выбором.

Ограничить доступ к корзине — здесь мы выберем опцию yes . Здесь нам нужна безопасность для корзины S3, чтобы никто не имел доступа к корзине S3. Для этой опции есть еще несколько опций, таких как Идентификация доступа к источнику, Комментарий и Предоставление разрешения на чтение в корзине .

Идентификация доступа к источнику — Мы использовали опцию создания нового идентификатора. Вы также можете выбрать существующую личность. Это создает новую личность, которая используется CloudFront для чтения деталей из корзины S3.

Grand Read Permission on Bucket — для этого выберите опцию Да .

Исходные пользовательские заголовки — здесь мы оставим пустые заголовки, поскольку нам не нужны детали прямо сейчас.

Далее, давайте обсудим и заполните параметры поведения для распространения Cloudront —

Настройки поведения

Теперь выберите протокол — https или http и опцию кэширования. Обратите внимание, что кэширование по умолчанию — 86400 или 24 часа. Вы можете изменить это значение согласно требованию.

Нажмите Object Caching (опция настройки), чтобы изменить кэширование. Вы можете использовать плавную трансляцию в случае, если на вашей странице есть видео. Здесь мы оставляем доступной опцию по умолчанию. Как только лямбда-функция будет создана, ее детали будут добавлены.

Детали настроек распространения показаны ниже —

Кеширование объектов

Различные параметры настройки распространения описаны ниже —

Ценовой класс — имеет такие детали, как происхождение трафика пользователей. Обратите внимание, что здесь мы выбрали вариант по умолчанию — Использовать все крайние местоположения.

AWS WAF Web ACL — для выбора брандмауэра веб-приложения. Здесь у этого есть выбор как Ни один . Во-первых, нам нужно создать брандмауэр в AWS. Это обеспечивает безопасность сайта.

Альтернативные доменные имена — здесь вы можете указать доменное имя, если у вас есть.

Сертификат SSL — здесь есть все детали, которые нужно выбрать для сертификата SSL. Мы оставим по умолчанию.

Корневой объект по умолчанию — здесь мы будем указывать имя файла, которое мы загрузили в S3. Для этого нам нужен контент из .html, который будет отображаться по умолчанию.

В остальном мы сохраним настройки по умолчанию.

Нажмите кнопку Создать рассылку, чтобы добавить рассылку.

Cloudfront Distribution

Обратите внимание, что рассылка займет некоторое время, чтобы показать статус развернутого.

Создать лямбда-функцию AWS

Перейдите в консоль AWS и создайте функцию Lambda.

Функция Cloudfront

В лямбда-коде AWS мы возьмем заголовки запроса и проверим пользовательский агент. Если пользовательский агент с рабочего стола, мы изменим ответ на отображаемое сообщение как «DESKTOP: Добро пожаловать в AWS Lambda с Cloudfront!», А если устройство будет «МОБИЛЬНЫЕ УСТРОЙСТВА: Привет от Lambda @ Edge!»

Соответствующий лямбда-код AWS показан ниже:

let content = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
   </body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
   </body>
</html>
`;
exports.handler = (event, context, callback) => {
   let request = event.Records[0].cf.request;
   let finalrequest = JSON.stringify(request);
   let headers = request.headers;
   let useragent = JSON.stringify(headers["user-agent"][0].value);
   let str = "";
   if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
      str = content;
   } else {
      str = content1;
   }
   const response = {
      status: '200',
      statusDescription: 'OK',        
      body: str+useragent,
   };
   callback(null, response);
};

Теперь сохраните лямбда-функцию. Обратите внимание, что нам нужно опубликовать функцию Lambda, чтобы ее можно было использовать со всеми регионами. Чтобы опубликовать, нам нужно сделать следующее —

В раскрывающемся списке «Действия» выберите « Опубликовать новую версию», как показано ниже.

Опубликовать новую версию

Если вы нажмете Опубликовать новую версию , отобразится следующий экран —

Опубликовать последнюю версию

Теперь введите описание версии и нажмите « Опубликовать» . ARN отобразит версию лямбда-функции AWS, созданной, как показано ниже:

Описание версии

Добавьте триггер CloudFront в новую версию, созданную, как показано ниже —

Cloudfront Trigger

Теперь добавьте детали конфигурации для CloudFront. Событие CloudFront имеет параметр для запроса средства просмотра, запроса источника, ответа источника и ответа средства просмотра .

Далее выберите дистрибутив CloudFront, созданный ранее. Из событий мы выберем запрос зрителя . На основании запроса средства просмотра будет выбран рабочий стол / устройство от пользовательского агента, и ответ будет изменен. Затем добавьте детали триггера.

Запрос зрителя

После добавления триггера нам нужно дождаться развертывания дистрибутива из CloudFront.

Cloudfront Deploy

Как только статус меняется на « Развернутый» , мы можем протестировать URL-адрес CloudFront и проверить доменное имя в браузере.

Отображение в браузере на рабочем столе, как показано ниже. Здесь мы распечатали user-agent из события viewer-request.

Настольный браузер

Это дисплей в мобильном устройстве.

Мобильное устройство

Таким образом, в приведенном выше примере мы использовали Lambda @ Edge для изменения ответа на настольном и мобильном устройстве.