AWS Solutions Architect · Урок

Функции Lambda: среды выполнения, триггеры и обработчики

Напишите функцию Lambda, выберите среду выполнения, настройте память и время ожидания и подключите её к событию S3 или триггеру API Gateway.

Урок 1 из 413 шагов

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

Что такое AWS Lambda

AWS Lambda — это бессерверная вычислительная служба, которая запускает Ваш код в ответ на события без необходимости подготавливать серверы или управлять ими. Вы платите только за потреблённое вычислительное время, измеряемое в миллисекундах, поэтому Lambda чрезвычайно экономична для нерегулярных рабочих нагрузок, управляемых событиями. Lambda автоматически масштабируется от нуля до тысяч параллельных выполнений в зависимости от входящих событий.

Поддерживаемые среды выполнения

Lambda поддерживает управляемые среды выполнения, включая Python, Node.js, Java, Go, Ruby, .NET и другие. AWS поддерживает эти среды выполнения и устанавливает для них исправления безопасности. Для языков или версий сред выполнения, которые не поддерживаются изначально, можно предоставить пользовательскую среду выполнения с помощью исполняемого файла bootstrap или упаковать функцию в образ контейнера размером до 10 GB вместо ZIP-пакета развёртывания.

Функция-обработчик Lambda

У каждой функции Lambda есть обработчик — точка входа, которую необходимо экспортировать из кода. AWS вызывает обработчик с двумя аргументами: объектом события (входными данными от источника вызова) и объектом контекста (метаданными о вызове, такими как имя функции, оставшееся время и идентификатор запроса). Обработчик возвращает ответ, который в зависимости от типа вызова может быть передан вызывающей стороне.

# Python handler example
def lambda_handler(event, context):
    # event contains the trigger payload
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    print(f'Processing {key} from {bucket}')
    return {
        'statusCode': 200,
        'body': 'Processed successfully'
    }

Память, время ожидания и эфемерное хранилище

Lambda позволяет настроить объём памяти от 128 MB до 10 240 MB. CPU выделяется пропорционально объёму памяти: больше памяти означает больше CPU. Время ожидания можно установить от 1 секунды до 15 минут; если функция превышает это значение, Lambda завершает её работу. Также предоставляется эфемерное хранилище /tmp (по умолчанию 512 MB, с возможностью настройки до 10 GB) для временных файлов в рамках одного вызова. Это хранилище не сохраняется между вызовами.

Синхронный и асинхронный вызов

Функции Lambda можно вызывать синхронно (вызывающая сторона ожидает результат — так работают API Gateway и ALB) или асинхронно (вызывающая сторона не ожидает результат — так работают события S3 и SNS). В асинхронном режиме Lambda повторяет неудачные выполнения до двух раз и может направлять неудачные события в очередь недоставленных сообщений (SQS или SNS) либо в шину событий EventBridge. Выбор подходящего режима вызова влияет на проектирование обработки ошибок.

Распространённые источники вызова Lambda

Lambda поддерживает нативную интеграцию с десятками сервисов AWS в качестве источников событий (источников вызова):

  • API Gateway / ALB: HTTP-запросы (синхронно)
  • S3: события создания и удаления объектов (асинхронно)
  • потоки DynamoDB / Kinesis: потоковая передача записей (синхронно, на основе опроса)
  • SQS: сообщения очереди (на основе опроса)
  • SNS: уведомления темы (асинхронно)
  • EventBridge: запланированные или пользовательские события
  • журналы CloudWatch: фильтры подписки на журналы

Роль выполнения IAM

У каждой функции Lambda должна быть роль выполнения IAM, предоставляющая функции разрешения на вызов других сервисов AWS. Например, если функция читает данные из S3 и записывает их в DynamoDB, роли выполнения нужны разрешения s3:GetObject и dynamodb:PutItem. Следуйте принципу минимальных привилегий: предоставляйте только те разрешения, которые действительно нужны функции. Базовая роль выполнения также должна включать logs:CreateLogGroup, logs:CreateLogStream и logs:PutLogEvents для журналов CloudWatch.

Пакеты развёртывания и ограничения размера

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

# Deploy a ZIP package from S3
aws lambda update-function-code \
  --function-name 'MyFunction' \
  --s3-bucket 'my-lambda-packages' \
  --s3-key 'my-function-v2.zip'

Переменные среды и секреты

Передавайте конфигурацию в Lambda через переменные среды. Конфиденциальные значения (ключи API, пароли баз данных) храните в AWS Secrets Manager или хранилище параметров и получайте их при инициализации функции (вне обработчика), чтобы использовать контекст выполнения повторно. Никогда не встраивайте секреты в код функции и не храните их в переменных среды в открытом виде — используйте шифрование KMS для переменных среды Lambda, чтобы защитить их при хранении.

import boto3
import os

# Fetch secret once during cold start (outside handler)
ssm = boto3.client('ssm')
DB_PASSWORD = ssm.get_parameter(
    Name=os.environ['DB_PASSWORD_PARAM'],
    WithDecryption=True
)['Parameter']['Value']

def lambda_handler(event, context):
    # DB_PASSWORD is already loaded; no SSM call on each invocation
    pass

Холодный запуск и повторное использование контекста выполнения

Первый вызов функции Lambda после развёртывания или периода бездействия сопровождается холодным запуском: AWS должна инициализировать среду выполнения, загрузить пакет развёртывания и выполнить код инициализации. Последующие вызовы в той же среде выполнения являются тёплыми запусками и выполняются значительно быстрее. Размещайте глобальный код инициализации (клиенты SDK, подключения к базам данных) вне обработчика, чтобы повторно использовать контекст выполнения при тёплых вызовах.

Lambda в VPC

По умолчанию Lambda работает в VPC, управляемой AWS, и может обращаться к интернету, но не к ресурсам вашей частной VPC. Чтобы получить доступ к базе данных RDS или кластеру ElastiCache в частной подсети, настройте запуск Lambda внутри вашей VPC, указав подсети и группы безопасности. Функции Lambda с поддержкой VPC используют для сетевого взаимодействия Hyperplane ENI (теперь ENI не выделяется отдельно для каждой функции), что устраняет историческую задержку холодного запуска для Lambda в VPC.

aws lambda update-function-configuration \
  --function-name 'MyFunction' \
  --vpc-config 'SubnetIds=subnet-aaa111,subnet-bbb222,SecurityGroupIds=sg-xyz'

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

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

Итоги урока

В этом уроке Вы узнали, что среды выполнения Lambda поддерживают Python, Node.js, Java, Go и другие языки, а для особых случаев доступны пользовательские среды выполнения и образы контейнеров; источники вызова, включая API Gateway (синхронно) и S3/SNS (асинхронно), определяют, как события поступают в функции Lambda; а роль выполнения, переменные среды и конфигурация VPC — ключевые аспекты безопасного подключения Lambda к другим сервисам AWS. Далее мы рассмотрим параллелизм Lambda, ограничение скорости и зарезервированный параллелизм.

Можно начать бесплатно

Изучай AWS Solutions Architect с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

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

Урок «Функции Lambda: среды выполнения, триггеры и обработчики» бесплатный?

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

Чему я научусь в уроке «Функции Lambda: среды выполнения, триггеры и обработчики»?

Напишите функцию Lambda, выберите среду выполнения, настройте память и время ожидания и подключите её к событию S3 или триггеру API Gateway. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Функции Lambda: среды выполнения, триггеры и обработчики»?

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

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

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

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

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