CloudFront Functions
CloudFront Functions — это бессерверная вычислительная среда, предоставляемая Amazon Web Services (AWS) (Amazon Web Services — дочерняя компания Amazon; Meta Platforms Inc. — организация признана экстремистской и запрещена в РФ), которая позволяет выполнять небольшие фрагменты кода JavaScript в точках присутствия (PoP) сети доставки контента (CDN) Amazon CloudFront. Функции предназначены для низколатентной обработки HTTP-запросов и ответов на границе сети, непосредственно перед тем, как контент будет передан конечному пользователю.
Архитектура и принцип работы
CloudFront Functions выполняются на уровне CloudFront Edge Locations — географически распределённых серверов, которые кэшируют и доставляют контент пользователям. В отличие от Lambda@Edge (другого бессерверного сервиса AWS для CloudFront), CloudFront Functions имеют более лёгкую среду выполнения и запускаются на выделенном, изолированном процессоре в каждом Edge Location. Это обеспечивает сверхнизкую задержку — по данным AWS, время выполнения функции составляет менее 1 миллисекунды для типовых сценариев.
Триггеры и точки выполнения
Функции могут быть привязаны к одному из двух событий в жизненном цикле HTTP-запроса:
- Viewer Request — выполняется при получении запроса от пользователя до того, как будет проверен кэш CloudFront.
- Viewer Response — выполняется после того, как CloudFront получил ответ от источника (origin server) или из кэша, но до того, как ответ будет отправлен пользователю.
Важно отметить, что CloudFront Functions не могут быть привязаны к событиям на стороне источника (Origin Request и Origin Response). Для этих сценариев используется Lambda@Edge.
Возможности и ограничения
CloudFront Functions предоставляют ограниченный, но целенаправленный набор возможностей, оптимизированный для простых манипуляций с HTTP-запросами и ответами.
Поддерживаемые операции
- Манипуляция заголовками: добавление, изменение или удаление HTTP-заголовков запроса и ответа (например, установка заголовков безопасности
X-Frame-Options,Strict-Transport-Security). - Перенаправление запросов: редирект пользователей на другой URL (например, с HTTP на HTTPS, с
wwwна безwww). - Изменение URL: переписывание путей запросов (например,
/old-pathна/new-path). - Генерация ответов: создание простых HTTP-ответов (например, возврат статической HTML-страницы для ошибки 403 или 404).
- Нормализация запросов: приведение заголовков к единому формату, удаление нежелательных параметров.
- A/B-тестирование: разделение трафика на основе кук или заголовков.
Ограничения
- Среда выполнения: только JavaScript (ECMAScript 5.1 и часть ES6). Поддержка модулей (
require,import) отсутствует. - Размер кода: максимальный размер функции — 10 КБ (включая код и зависимости).
- Время выполнения: жёсткое ограничение — 1 миллисекунда на одно выполнение.
- Память: 2 МБ выделенной памяти на функцию.
- Доступ к сети: функции не имеют доступа к сети, файловой системе или внешним API. Они могут использовать только данные, переданные в HTTP-запросе/ответе.
- Отсутствие состояния: функции не могут хранить состояние между вызовами.
- Криптография: ограниченный набор криптографических функций (например,
crypto.createHmacдоступен, ноcrypto.createSign— нет).
Сравнение с Lambda@Edge
CloudFront Functions и Lambda@Edge — два бессерверных сервиса AWS для обработки запросов на границе сети. Они имеют разную архитектуру и сценарии применения.
| Характеристика | CloudFront Functions | Lambda@Edge |
|---|---|---|
| Среда выполнения | JavaScript (ES5.1/ES6), изолированный процессор | Node.js, Python, Go, Java, .NET, Ruby |
| Время выполнения | < 1 мс (типовое) | До 5 секунд (запрос) / 30 секунд (ответ) |
| Размер кода | До 10 КБ | До 50 МБ (включая слои) |
| Память | 2 МБ | 128–3008 МБ |
| Доступ к сети | Нет | Да (VPC, внешние API, базы данных) |
| Триггеры | Viewer Request, Viewer Response | Viewer Request/Response, Origin Request/Response |
| Цена | Значительно ниже | Выше (зависит от времени выполнения и памяти) |
| Сложность | Низкая (простая настройка) | Средняя/высокая (требуется IAM-роли, управление версиями) |
Вывод: CloudFront Functions подходят для задач, требующих сверхнизкой задержки и простоты, таких как редиректы, манипуляция заголовками и A/B-тестирование. Lambda@Edge используется для более сложных сценариев — проверка подлинности, динамическая генерация контента, взаимодействие с базами данных.
Применение
CloudFront Functions применяются в широком спектре задач, где требуется быстрая обработка запросов на границе сети.
- Управление кэшированием: установка заголовков
Cache-Controlдля оптимизации кэширования контента. - Безопасность: добавление заголовков безопасности (CSP, HSTS), блокировка подозрительных запросов (например, по User-Agent).
- Геотаргетинг: перенаправление пользователей на разные версии сайта в зависимости от их географического положения (на основе заголовка
CloudFront-Viewer-Country). - A/B-тестирование: распределение трафика между двумя версиями страницы на основе куки
experiment. - Нормализация URL: приведение URL к единому виду (например, удаление
index.htmlилиwww). - Генерация статических ответов: возврат простых HTML-страниц для ошибок (403, 404) или для редиректов (301, 302).
Разработка и управление
Функции создаются и управляются через консоль AWS Management Console, AWS CLI, SDK или Infrastructure as Code (например, AWS CloudFormation, Terraform). Процесс разработки включает:
- Написание кода: создание JavaScript-функции, которая экспортирует объект
handler, принимающий аргументevent(содержащий поляrequestилиresponse). - Тестирование: встроенный редактор в консоли AWS позволяет тестировать функции с образцами запросов.
- Публикация: после создания функция получает версию. Для использования в CloudFront необходимо опубликовать версию и привязать её к дистрибутиву.
- Мониторинг: метрики выполнения (количество вызовов, ошибки, задержка) доступны в Amazon CloudWatch.
Интересные факты
- CloudFront Functions были анонсированы на конференции AWS re:Invent в 2021 году.
- В отличие от Lambda@Edge, CloudFront Functions не требуют создания IAM-роли для выполнения — они работают в изолированной среде, управляемой AWS.
- Функции выполняются на процессорах Intel Xeon, специально выделенных для этого сервиса в каждом Edge Location.
- Цена за 1 миллион вызовов CloudFront Functions значительно ниже, чем за аналогичное количество вызовов Lambda@Edge, что делает их экономически эффективными для массовых операций.
Источники
- Официальная документация AWS: «CloudFront Functions».
- Документация AWS: «Using CloudFront Functions».
- Презентация AWS re:Invent 2021: «New – CloudFront Functions».
- Документация AWS: «Lambda@Edge».
- AWS Compute Blog: «CloudFront Functions vs. Lambda@Edge».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →