Управление версиями AWS Lambda

Что вы узнаете
- Как действует $LATEST и почему его не рекомендуется использовать в продакшене
- Как публиковать версии и создавать алиасы в консоли и через CLI
- Как плавно переключать трафик с помощью алиасов и CodeDeploy
- Как SAM и CI/CD упрощают управление версиями
- Рольовые чеклисты, критерии приёмки и план отката
Ключевые понятия
- $LATEST — автоматическая версия, отражающая последние изменения функции.
- Версия (Version) — неизменяемая снимок функции, публикуемый вручную или CI/CD.
- Алиас (Alias) — ярлык, указывающий на конкретную версию и используемый другими сервисами.
- SAM — Serverless Application Model, расширение CloudFormation для serverless-приложений.
1-строчная глоссарий:
- Алиас: удобно менять «целевую» версию без обновления зависимых сервисов.
Почему $LATEST не для продакшена
$LATEST всегда указывает на текущую, редактируемую редакцию функции. Это удобно для разработки и отладки, но несёт риски для рабочей нагрузки:
- Любое изменение немедленно влияет на весь продакшен, если сервисы ссылаются на $LATEST.
- Нельзя откатиться к предыдущей стабильной версии через консоль, нужно вручную публиковать и переназначать.
- Интеграция с CodeDeploy для пошаговых релизов не поддерживается при прямом использовании $LATEST.
Рекомендация: используйте $LATEST только для разработки. Для релизов публикуйте версию и направляйте продакшн-трафик через алиас с названием типа production.
Публикация новой версии и смена трафика
Работа с версиями в консоли:
- Откройте функцию в Lambda Management Console.
- Переключитесь на версию $LATEST.
- В меню Actions выберите Publish new version.
- Присвойте описание и подтвердите публикацию.


После публикации вы получите целое число версии (1, 2, 3 …). Чтобы связать эту версию с API Gateway или другими сервисами, используйте алиас:
- В Actions выберите Create alias.
- Задайте имя алиаса, например production.
- Укажите номер версии, на который он должен указывать.

Пример AWS CLI (синтаксис необходимо проверить под вашу версию AWS CLI):
# Опубликовать новую версию
aws lambda publish-version --function-name my-function --description "v1.2.0"
# Создать алиас, указывающий на версию 3
aws lambda create-alias --function-name my-function --name production --function-version 3 --description "Production alias"
# Обновить алиас, чтобы он указывал на версию 4
aws lambda update-alias --function-name my-function --name production --function-version 4Если вы хотите плавно распределять трафик без CodeDeploy, можно использовать routing config алиаса (см. документацию AWS для точного формата JSON). Однако для самых безопасных канареечных релизов рекомендуется CodeDeploy.
Алиасы и плавный релиз
Алиасы — это основной инструмент для безопасной смены версии везде, где функция используется. Плюсы:
- Меняете одну сущность (алиас) — и все потребители видят новую версию.
- Можно переключать трафик моментально или постепенно.
- Алиасы интегрируются с IAM и CloudWatch как отдельные идентификаторы.
Когда нужен постепенный выпуск:
- Новая версия имеет риск регресса или потенциально тяжёлые изменения внешнего API.
- Требуется валидация в реальном трафике с минимальным blast radius.
Плавное распределение через CodeDeploy позволяет задать правила: например, 10% трафика на новую версию в течение N минут, затем 25%, и т. д., с автоматическим откатом при ошибках.
Mermaid-диаграмма решения — использовать алиас или прямую версию:
flowchart TD
A[Нужно ли откатывать без обновления сервисов?] -->|Да| B[Использовать алиас]
A -->|Нет| C[Может хватит $LATEST для разработки]
B --> D{Нужно ли плавное развертывание?}
D -->|Да| E[CodeDeploy]
D -->|Нет| F[Просто обновить алиас]Плавный релиз через CodeDeploy
CodeDeploy поддерживает стратегии развертывания для Lambda, включая канареечные и поэтапные релизы. Общая идея:
- Создаётся deployment group, привязанная к алиасу.
- В конфигурации указываются шаги распределения трафика и условия отката (например, ошибки > X% за Y минут).
- При срабатывании условий отката CodeDeploy автоматически возвращает алиас на предыдущую версию.
Важно: настройте метрики (ошибки, latency, throttles) в CloudWatch и Alarm, чтобы CodeDeploy мог корректно реагировать.
SAM, CloudFormation и автоматические версии
Если вы управляете функциями в большом масштабе, публиковать версии вручную неудобно. SAM и CloudFormation автоматизируют этот процесс:
- При деплое через SAM каждый обновлённый Lambda-ресурс создаёт новую версию (и обновляет $LATEST).
- CloudFormation рассматривает это как обновление стека, заменяет функцию и сохраняет новую версию.
- Комбинация Git + CodePipeline + CodeBuild позволяет автоматизировать сборку (транспиляцию/компиляцию), тестирование и деплой.
Рекомендации по CI/CD:
- Тегируйте релизы в Git и используйте ветки релизов.
- В CodePipeline добавьте этапы build -> test -> deploy.
- Прежде чем переключать алиас на новую версию, запускать интеграционные тесты и smoke tests.
Рольовые чеклисты
Разработчик:
- Тесты: unit и интеграционные тесты локально и в CI.
- Использует $LATEST для разработки и отдельный алиас dev.
- В коммите указывает changelog и ссылку на тикет.
SRE/операции:
- Настроить мониторинг CloudWatch: ошибки, latency, throttles, cold starts.
- Настроить CodeDeploy с четкими правилами отката.
- Периодически проверять IAM-права для функций и алиасов.
Релиз-менеджер:
- Проверяет описание версии и результаты smoke тестов.
- Запускает деплой в staging и затем production по расписанию.
- Контролирует откаты и post-deploy проверку.
Критерии приёмки и тесты
Критерии приёмки для версии перед переключением алиаса:
- Unit тесты: 100% прохождение в CI.
- Интеграционные тесты с зависимыми сервисами: green.
- Нагрузочные и latency тесты: не ухудшаются по сравнению с текущей версией более чем на допустимый порог.
- Логи и метрики: ошибок не больше заранее определённого лимита.
Пример набора smoke-тестов:
- Проверить успешный ответ на ключевой endpoint.
- Проверить корректность формата ответа.
- Проверить обработку ошибок на граничных данных.
План отката и инцидент-руководство
- Обнаружение: мониторинг обнаружил рост ошибок или падение SLA.
- Быстрый анализ: подтвердите аномалию по CloudWatch Logs/Tracing.
- Откат через алиас: обновить алиас на предыдущую стабильную версию.
- Если используется CodeDeploy — инициировать автоматический/ручной откат через него.
- Постмортем: собрать логи, воспроизвести ошибку в staging, обновить тесты.
Команды для экстренного отката через CLI:
# Узнать версии и алиасы
aws lambda list-versions-by-function --function-name my-function
aws lambda list-aliases --function-name my-function
# Откат алиаса на версию 3
aws lambda update-alias --function-name my-function --name production --function-version 3Лучшие практики и стратегия версий
- Публикуйте новую версию на каждый релиз — это даёт воспроизводимость и откаты.
- Алиасы называйте однозначно: production, staging, canary, dev.
- Храните исходный код и инфраструктуру в Git; тегируйте релизы.
- Автоматизируйте сборки и тестирование в CodePipeline/CodeBuild.
- Используйте CodeDeploy для плавных релизов и автоматического отката по метрикам.
- Документируйте зависимости и изменения в changelog при публикации версии.
Безопасность и соответствие требованиям приватности
- Управляйте правами через IAM: разные роли для деплоя, просмотра логов, вызова функций.
- Логи и трассировки могут содержать персональные данные — применяйте маскирование и политику хранения логов в соответствии с GDPR/локальными требованиями.
- Ограничивайте сторонние зависимости и обновляйте runtime для устранения уязвимостей.
Миграционные советы для регионов и локального окружения
- Убедитесь, что используемые сервисы (например, S3, API Gateway) доступны в нужном регионе.
- При переносе следите за регионами хранения логов и временем жизни секретов.
- Для локального тестирования используйте SAM CLI и локальные эмуляторы.
Итог
Управление версиями Lambda — ключ к безопасным и предсказуемым релизам. Шаблон действий:
- Разработка в $LATEST и dev-алиасе.
- Публикация версии для релиза.
- Назначение production-алиаса на новую версию с постепенным rollout через CodeDeploy.
- Мониторинг, тестирование и быстрый откат при проблеме.
Важно: автоматизируйте процесс через SAM + CodePipeline и поддерживайте четкие чеклисты для ролей.
Краткое резюме:
- Никогда не прямо используйте $LATEST в продакшене.
- Публикуйте версии, используйте алиасы и CodeDeploy для безопасных релизов.
- Автоматизируйте с SAM и CI/CD для масштабируемости и повторяемости.
Примечание: примеры команд и форматы JSON зависят от версии AWS CLI и вашей конфигурации. Сверяйтесь с официальной документацией при исполнении в продуктивной среде.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента