Гид по технологиям

CloudFront Functions: быстрый код на краю CDN

• 5 min read • DevOps • Обновлено 28 Nov 2025
CloudFront Functions на AWS — быстро и дешево
CloudFront Functions на AWS — быстро и дешево

Логотип AWS

Что такое CloudFront Functions

CloudFront Functions — это способ запускать небольшие JavaScript-функции непосредственно на краю CDN Amazon CloudFront (edge), ближе к пользователю. Функции оптимизированы для сверхнизкой задержки и очень недороги по сравнению с Lambda@Edge, но имеют жёсткие лимиты по времени выполнения, памяти и размеру кода.

Определение в одну строку: лёгкая среда выполнения JavaScript для быстрых трансформаций HTTP-запросов и ответов на узлах CloudFront.

Ключевые возможности:

  • Запуск на всех узлах CloudFront с минимальной задержкой.
  • Поддержка работы на событиях viewer-request и viewer-response.
  • Ограниченный пакет: максимум 10 KB кода и 2 MB памяти.
  • Процессная модель изоляции, минимум файловой и сетевой подсистемы.

Сравнение: CloudFront Functions vs Lambda@Edge

  • Цена: CloudFront Functions примерно в 1/6 стоимости Lambda@Edge для эквивалентных кратких операций.
  • Возможности: Lambda@Edge поддерживает полноценный Node.js Lambda runtime, доступ к сети/файловой системе более гибкий; CloudFront Functions — только лёгкий JS и ограниченный API.
  • События: CloudFront Functions доступны на viewer-request и viewer-response; Lambda@Edge может работать также на origin-request и origin-response, что позволяет модифицировать контент перед кэшированием.

Когда выбрать CloudFront Functions:

  • Простейшие трансформации URL и заголовков.
  • Быстрые авторизации на уровне запроса (например, проверка токенов).
  • Нормализация ключей кэша и A/B тестирование редиректами.

Когда выбрать Lambda@Edge:

  • Необходима модификация Origin Response (контента до кэша).
  • Требуется доступ к внешним ресурсам или длительная обработка.
  • Нужно больше памяти или богатый runtime.

Important: если задача требует изменения ответа от origin перед кэшированием, CloudFront Functions не подойдёт — используйте Lambda@Edge.

Архитектура CloudFront Functions — схема взаимодействия запроса и ответа через CDN

Ограничения и практические числа

Fact box — ключевые ограничения:

  • Максимальный пакет кода: 10 KB.
  • Память процесса: ~2 MB.
  • Рекомендуемое время выполнения: < 1 ms (максимум — очень короткое время, оптимизировано для миллисекунд).
  • Поддерживаемые события: viewer-request, viewer-response.
  • Логирование: console.log() → CloudWatch.

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

Когда это не сработает — примеры

  • Нужна модификация HTML/JSON-ответа от origin перед кэшированием.
  • Требуется подключение к базе данных или внешнему API из функции.
  • Необходимо исполнять криптографические операции, требующие больших библиотек или памяти.

Краткая методология: как выбрать подход

  1. Опишите задачу (одно предложение). Если задача — строковая манипуляция запроса/заголовка → CloudFront Functions вероятно подходит.
  2. Оцените зависимость от внешних ресурсов и объём выполнения. Если нужна сеть/файлы → Lambda@Edge.
  3. Проверяйте ограничения кода (10 KB) и тестируйте производительность на высоких QPS.
flowchart TD
  A[Нужна модификация запроса/ответа?] --> B{Требуется доступ к origin-response или внешним ресурсам?}
  B -- Да --> C[Lambda@Edge]
  B -- Нет --> D{Манипуляция простая 'заголовки, URL, редиректы'?}
  D -- Да --> E[CloudFront Functions]
  D -- Нет --> C

Пошаговое руководство: создание и развёртывание

  1. Убедитесь, что у вас есть распределение CloudFront. Если нет — настройте CloudFront в консоли или через IaC (CloudFormation/Terraform).
  2. В консоли CloudFront слева выберите “Functions” и нажмите “Create function”.

Экран создания функции в консоли CloudFront

  1. Дайте функции имя, откроется редактор кода, где можно писать, тестировать и публиковать функцию.

Редактор функции: код, тестирование, публикация

  1. Пример простой тестовой функции (в демонстрационных примерах функция переведёт любой ответ в 404 — чисто для теста):
function handler(event) {
  var response = event.response || { statusCode: 200, statusDescription: 'OK', headers: {} };
  response.statusCode = 404;
  response.statusDescription = 'Not Found';
  return response;
}
  1. Нажмите “Save” для сохранения редакционной версии, затем перейдите к тестированию. В тестовом режиме вы можете подставить пример события с URL и заголовками; консоль сделает запрос так, как если бы это был реальный трафик.

Тестирование функции против CDN-ответа

  1. После успешного теста нажмите “Publish” — это создаст продакшн-версию функции.

Публикация функции

  1. Ассоциируйте опубликованную функцию с распределением CloudFront: выберите событие (viewer-request или viewer-response) и укажите функцию. Развёртывание будет глобальным.

Тестирование и логирование

  • Логирование ограничено console.log(), данные отправляются в CloudWatch. Добавляйте логирующие вызовы экономно, чтобы не превысить квоты и не влиять на латентность.
console.log('debug:', request.uri, request.headers);
  • Тестируйте на реальных сценариях: разные географии, горячие и холодные кэши, сочетание cookies и заголовков.
  • Инструменты: браузер, curl, заголовок Host для эмуляции запросов, CloudFront тестовые события.

Рекомендации по безопасности и приватности

  • Не храните секреты в коде функции. Используйте защищённые хранилища (Secrets Manager) и внешние контроллеры для распространения конфигурации, если нужно.
  • Проверяйте входящие заголовки и валидируйте токены строго — функции работают на границе сети, поэтому они первыми встречают трафик.
  • Учитывайте законодательство о данных: если вы обрабатываете персональные данные на границе, проверьте требования локальных правил и GDPR.

Notes: так как функция исполняется по всему миру, логирование и обработка персональных данных может подпадать под требования локальных регуляторов.

Ролевая чек-лист для развёртывания

DevOps:

  • Настроить распределение CloudFront.
  • Проверить IAM-права для создания/публикации функций.
  • Настроить CI/CD для версии кода (опционально).

Разработчик:

  • Убедиться, что код укладывается в 10 KB.
  • Минимизировать зависимости и использовать нативный JS.
  • Добавить тестовые события и unit-тесты вне консоли.

QA/Сайт-менеджер:

  • Прогнать A/B тестирование и сценарии с разными географиями.
  • Проверить логи CloudWatch и латентность.

Плейбук внедрения — минимальный набор шагов

  1. Прототип в консоли (редактирование + тестирование).
  2. Публикация и привязка к staging-распределению CloudFront.
  3. Наблюдение за метриками: latencies, error rates, CloudWatch logs.
  4. Постепенное продвижение на production по каналу релизов.
  5. Откат: удалить ассоциацию функции с распределением и, при необходимости, удалить опубликованную версию.

Критерии приёмки

  • Функция корректно обрабатывает 100% тестовых сценариев.
  • Нагрузка не приводит к увеличению median latency более чем на 1 ms.
  • Логи не содержат ошибок выполнения или превышений лимитов.
  • Пакет кода < 10 KB и потребление памяти в рамках ожиданий.

Альтернативные подходы

  • Использовать Lambda@Edge для сложной обработки origin-response.
  • Выполнить предварительную нормализацию запросов на CDN уровне (без кода) с помощью правил перенаправления.
  • Перенести бизнес-логику в API Gateway + региональные Lambda для более сложных проверок.

Заключение

CloudFront Functions — отличное решение для лёгких, высокопроизводительных трансформаций HTTP-запросов и ответов на краю сети. Они экономичны, масштабируются мгновенно и превосходно подходят для задач с низкой вычислительной сложностью. При проектировании учитывайте ограничения по размеру и времени, тестируйте в разных географиях и имейте план отката.

Summary:

  • Подходит для простых манипуляций заголовками, URL, авторизации на уровне запроса.
  • Не заменяет Lambda@Edge для сложных задач или работы с origin-response.
  • Тестируйте и логируйте экономно; следите за размерами кода.

Панель тестирования CloudFront Functions

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро