0Pricing
AWS Solutions Architect · Урок

Слои Lambda и пакеты развёртывания

Объединяйте общие зависимости в повторно используемые слои Lambda и управляйте пакетами развёртывания для больших сред выполнения.

«Слои Lambda и пакеты развёртывания» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Проблема зависимостей в Lambda

Пакеты развёртывания Lambda должны быть самодостаточными: все зависимости (библиотеки, SDK, двоичные файлы) необходимо включать в ZIP. Из-за этого размер пакета быстро увеличивается: функция Python для анализа данных с NumPy, Pandas и SciPy может превышать 200 MB в распакованном виде. Каждое обновление кода функции требует повторной загрузки всего пакета, включая неизменившиеся библиотеки. Слои Lambda решают эту проблему, отделяя общие зависимости от кода функции.

Что такое слой Lambda

Lambda Layer — это ZIP-архив, содержащий библиотеки, пользовательские среды выполнения, данные или файлы конфигурации. Слои хранятся отдельно от кода функции и монтируются в среду выполнения функции по пути /opt. Один и тот же слой могут использовать несколько функций: достаточно обновить слой один раз, и все функции, которые его используют, получат обновления. Каждая функция Lambda может иметь до 5 слоёв, а их общий распакованный размер не должен превышать 250 MB.

Создание и публикация слоя

Чтобы создать слой, упакуйте зависимости в правильную структуру каталогов для используемой среды выполнения (например, python/lib/python3.12/site-packages/ для Python), сожмите каталог в ZIP-архив и опубликуйте его. После публикации слой получает ARN версии. Указывайте этот ARN при подключении слоя к функции. При каждом обновлении слоя создаётся новая версия; функции продолжают использовать версию, с которой они были настроены, пока Вы явно не обновите их конфигурацию.

# Build layer for Python
mkdir -p layer/python
pip install pandas numpy -t layer/python/
cd layer && zip -r ../my-data-layer.zip python/

# Publish the layer
aws lambda publish-layer-version \
  --layer-name 'DataScienceLayer' \
  --zip-file fileb://my-data-layer.zip \
  --compatible-runtimes python3.12 python3.11

Подключение слоёв к функции

Добавляйте слои к функции с помощью параметра --layers при создании или обновлении функции. Lambda монтирует все подключённые слои в /opt до запуска функции. Пакеты Python в /opt/python автоматически добавляются в путь поиска Python; модули Node.js в /opt/nodejs/node_modules автоматически находятся системой. Код функции может использовать import или require для подключения пакетов из слоя так, будто они установлены локально.

aws lambda update-function-configuration \
  --function-name 'DataProcessor' \
  --layers \
    'arn:aws:lambda:us-east-1:123456789012:layer:DataScienceLayer:3' \
    'arn:aws:lambda:us-east-1:123456789012:layer:UtilsLayer:1'

Общедоступные слои от AWS

AWS публикует официальные слои, которые можно использовать без самостоятельной сборки. Например, это слой AWS Lambda Powertools (структурированное журналирование, трассировка и функциональные флаги), слои с драйверами баз данных и слой AWS Parameters and Secrets Lambda Extension для локального кэширования значений из SSM/Secrets Manager. Сторонние поставщики, такие как Datadog и New Relic, также публикуют общедоступные слои со своими агентами мониторинга. Проверяйте Serverless Application Repository и консоль Lambda, чтобы узнать о доступных общедоступных слоях.

Расширения Lambda через слои

Lambda Extensions работают как отдельные процессы вместе с кодом функции в одной среде выполнения. Они подключаются к событиям жизненного цикла Lambda (инициализация, вызов и завершение), чтобы выполнять такие задачи, как сбор телеметрии, сканирование безопасности или кэширование конфигурации. Расширения распространяются в виде слоёв Lambda. AWS предоставляет расширение CloudWatch Lambda Insights и расширение AWS AppConfig; поставщики предоставляют пользовательских агентов мониторинга в виде расширений.

Форматы пакетов развёртывания: ZIP и контейнер

Lambda поддерживает два формата развёртывания:

  • ZIP (до 50 MB в сжатом виде и 250 MB в распакованном): быстрая загрузка, поддержка слоёв и совместимость со всеми средами выполнения.
  • Образ контейнера (до 10 GB): хранится в Amazon ECR, использует стандартные инструменты Docker, не поддерживает слои и идеально подходит для очень больших зависимостей (моделей машинного обучения и крупных двоичных файлов).

Образы контейнеров должны реализовывать интерфейс среды выполнения Lambda (с использованием базовых образов, предоставляемых AWS), чтобы Lambda знала, как вызывать обработчик.

# Dockerfile for a Lambda container image
FROM public.ecr.aws/lambda/python:3.12
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
CMD ['app.lambda_handler']

Рабочий процесс с образом контейнера

Сборка и развёртывание образа контейнера Lambda выполняются по стандартному рабочему процессу для контейнеров: соберите образ с помощью docker build, отправьте его в Amazon ECR и укажите URI образа при создании или обновлении функции Lambda. Образы контейнеров неизменяемы: каждой метке образа соответствует определённая версия функции. Lambda кэширует образы контейнеров в своей инфраструктуре, поэтому последующие холодные запуски выполняются быстрее первого.

# Build and push to ECR
docker build -t my-lambda-function .
aws ecr get-login-password | docker login --username AWS \
  --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker tag my-lambda-function \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latest

Версии и псевдонимы

Versions Lambda — это неизменяемые снимки кода и конфигурации функции. При каждой публикации версии Lambda фиксирует пакет развёртывания, переменные среды и слои. Псевдонимы — это именованные указатели на определённые версии: prod может указывать на версию 5, а staging — на версию 6. Также можно использовать псевдонимы с распределением трафика, чтобы направлять часть трафика на новую версию при канареечном развёртывании (например, 10% на v6 и 90% на v5).

# Publish a version and create/update an alias
aws lambda publish-version --function-name 'DataProcessor'
# Returns version number, e.g., "Version": "7"

aws lambda update-alias \
  --function-name 'DataProcessor' \
  --name 'prod' \
  --function-version '7' \
  --routing-config 'AdditionalVersionWeights={"6": 0.1}'

Версионирование и устаревание слоёв

Слои также имеют версии. После публикации новой версии слоя существующие функции продолжают использовать закреплённую за ними версию, пока Вы не обновите их конфигурацию. Благодаря этому общий слой можно безопасно обновлять, не нарушая работу всех функций одновременно: новую версию можно внедрять постепенно. Со временем выводите старые версии слоёв из эксплуатации, чтобы уменьшить затраты на хранение и обслуживание. Lambda сохраняет версии слоёв, даже если Вы удаляете их из консоли, пока на них ссылается хотя бы одна функция.

Выбор между слоями и образами контейнеров

Используйте слои, если общий распакованный размер не превышает 250 MB, Вы хотите совместно использовать зависимости в нескольких функциях и Вам нужна быстрая итерация (обновили слой один раз — все функции получили обновление). Используйте образы контейнеров, если зависимости превышают 250 MB, Вам нужно применять пользовательские пакеты базовой ОС, у Вас уже есть рабочие процессы Docker или Вы хотите включить в пакет крупные ресурсы (модели машинного обучения и справочные базы данных). Образы контейнеров несовместимы со слоями Lambda, но обеспечивают большую гибкость.

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03), рассмотренных в этом уроке.

Итоги урока

В этом уроке Вы узнали, что Lambda Layers позволяют упаковывать общие зависимости отдельно от кода функции, уменьшая размер пакета и обеспечивая повторное использование в нескольких функциях; образы контейнеров (до 10 GB через ECR) подходят, когда зависимости превышают ограничение ZIP в 250 MB или когда уже используются рабочие процессы Docker; а версионирование и псевдонимы обеспечивают неизменяемые выпуски и канареечные развёртывания с распределением трафика по весам. Далее мы рассмотрим Lambda@Edge и шаблоны, управляемые событиями.

Часто задаваемые вопросы

Урок «Слои Lambda и пакеты развёртывания» бесплатный?

Да — полный текст урока «Слои Lambda и пакеты развёртывания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Слои Lambda и пакеты развёртывания»?

Объединяйте общие зависимости в повторно используемые слои Lambda и управляйте пакетами развёртывания для больших сред выполнения. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Слои Lambda и пакеты развёртывания»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Функции Lambda: среды выполнения, триггеры и обработчики
  2. Параллелизм, ограничение частоты и зарезервированный параллелизм
  3. Слои Lambda и пакеты развёртывания
  4. Lambda@Edge и событийно-ориентированные шаблоны
← Назад к AWS Solutions Architect