Начало работы с AWS Lambda: пошаговое руководство

AWS Lambda – это мощная служба бессерверных вычислений, которая позволяет запускать код без управления инфраструктурой, так что вы можете сосредоточиться исключительно на написании кода, не беспокоясь о предоставлении или поддержке серверов.

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

Что такое AWS Lambda?

AWS Lambda – это платформа для бессерверных вычислений, предоставляемая Amazon Web Services (AWS), которая позволяет разработчикам выполнять код без предоставления или управления серверами. AWS Lambda обеспечивает это динамическим выделением ресурсов для выполнения ваших функций только при необходимости, взимая плату за использование, а не за предварительно выделенную мощность сервера.

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

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

Традиционные методы развертывания требуют настройки и управления серверами, что включает в себя масштабирование, обновление и исправление. Эти задачи могут занимать много времени, быть дорогостоящими и менее эффективными для нерегулярных нагрузок. В отличие от этого, безсерверное развертывание устраняет эти накладные расходы, предлагая автоматическое масштабирование и высокую доступность из коробки.

Функции AWS Lambda

  • Архитектура, основанная на событиях: Функции AWS Lambda вызываются в ответ на события, такие как изменения данных, HTTP-запросы или обновления ресурсов AWS.
  • Поддержка нескольких сред выполнения: Lambda поддерживает различные среды выполнения, включая Python, Node.js, Java, Go, Ruby и .NET. Разработчики также могут использовать собственные среды выполнения с помощью API среды выполнения AWS Lambda, что делает его универсальной платформой для различных случаев использования.
  • Автоматическое масштабирование: AWS Lambda автоматически масштабирует ваше приложение в зависимости от спроса. Независимо от того, обрабатывается ли одно событие или обрабатывается тысячи одновременно, Lambda динамически корректирует ресурсы вычислений.
  • Оплата по факту использования: Затраты определяются количеством запросов и временем выполнения ваших функций. Это устраняет необходимость в предварительных инвестициях и гарантирует, что вы платите только за то, что используете.
  • Интегрированная безопасность: Lambda работает с AWS Identity and Access Management (IAM), обеспечивая тонкую настройку контроля доступа и безопасные взаимодействия между вашими функциями и другими службами AWS.

Распространенные случаи использования Lambda

  • Обработка потоковых данных: AWS Lambda интегрируется с Amazon Kinesis для обработки и анализа потоковых данных в реальном времени. Например, вы можете мониторить устройства IoT или динамически обрабатывать файлы журналов.
  • Создание RESTful API: Функции Lambda могут быть связаны с AWS API Gateway для создания масштабируемых API для веб- и мобильных приложений. Эта конфигурация обычно используется для обработки аутентификации пользователей, запросов к базам данных или генерации динамического контента.
  • Автоматизация рабочих процессов: Автоматизируйте сложные рабочие процессы, запуская функции Лямбда на основе событий от сервисов, таких как S3, DynamoDB или CloudWatch. Например, вы можете изменять размер изображений, загруженных в S3, или автоматически архивировать старые записи в базе данных.
  • Обработка событий в потоках данных: Вы можете использовать Лямбду для обработки событий данных в реальном времени, таких как обработка новых загрузок в корзину S3, преобразование данных перед сохранением или обогащение потоков данных вызовами внешних API.
  • Безсерверная обработка на бекенде: Лямбда часто используется для переноса задач бекенда, таких как валидация данных, процессы ETL (извлечение, преобразование, загрузка) или отправка уведомлений через Amazon SNS или SES.

Как работает AWS Lambda?

AWS Lambda работает на модели, основанной на событиях, что означает, что код выполняется в ответ на определенные триггеры или события.Ключевой особенностью функционирования Lambda является ее интеграция с другими службами AWS и возможность выполнения функций по требованию. Давайте подробнее рассмотрим пошагово, как работает AWS Lambda:

Пример диаграммы архитектуры с использованием Lambda и других основных служб AWS. Источник изображения: AWS.

1. Запуск функций AWS Lambda

Функции AWS Lambda инициируются событиями от различных служб AWS или внешних систем. Обычные примеры источников событий включают:

  • API Gateway: Когда пользователь отправляет HTTP-запрос (например, GET или POST-запрос) на ваш конечный точечный API Gateway, Lambda может выполнить функцию для обработки запроса, например, конечная точка RESTful API для создания пользователя в базе данных.
  • События S3: Функции Lambda могут реагировать на действия, такие как загрузка, удаление или изменение объекта в бакете S3. Например, они могут изменять размер изображений или конвертировать формат файлов после загрузки изображения в бакет S3.
  • Потоки DynamoDB: Любые изменения в таблицах DynamoDB, такие как вставки, обновления или удаления, могут вызывать выполнение функции Lambda. Например, запуск аналитического конвейера при добавлении новых строк в таблицу DynamoDB.
  • Пользовательские приложения: Вы можете вызывать функции Lambda напрямую, используя SDK, CLI или HTTP-запросы, что позволяет интегрироваться с внешними системами.

2. Среда выполнения

Когда событие вызывает функцию Lambda, AWS автоматически создает окружение выполнения для запуска кода. Это окружение включает в себя:

  • Ваш код функции: Код, который вы написали для своей конкретной задачи.
  • Выделенные ресурсы: CPU и память (настраиваемые) динамически назначаются в зависимости от потребностей функции.
  • Зависимости: Все внешние библиотеки или пакеты, указанные во время развертывания, включены.

3. Параллелизм и масштабирование

AWS Lambda поддерживает автоматическое масштабирование, запускает несколько экземпляров вашей функции параллельно. Она управляет масштабированием прозрачно без какой-либо конфигурации. Вот как работает параллелизм:

  • Если вашей функции нужно обработать 100 событий одновременно, Lambda создаст столько сред выполнения, сколько нужно (в пределах лимита параллелизма).

4. Интеграция с другими сервисами AWS

AWS Lambda глубоко интегрируется с сервисами AWS для создания надежных, комплексных решений:

  • Взаимодействие с базами данных: Lambda может читать/записывать данные в DynamoDB или RDS во время выполнения.
  • Службы обмена сообщениями: Lambda может запускать уведомления через SNS или отправлять сообщения в очереди SQS для последующей обработки.
  • Мониторинг и логирование: CloudWatch фиксирует все журналы, метрики и детали ошибок для функций Lambda, позволяя вам отслеживать и устранять проблемы с производительностью.

Теперь давайте начнем настройку вашей первой функции Lambda!

Настройка AWS Lambda

Предварительные требования

  • Учетная запись AWS: Убедитесь, что у вас есть активная учетная запись AWS. Зарегистрируйтесь здесь.
  • Настройка IAM пользователя: Создайте IAM пользователя с разрешениями для AWS Lambda. Следуйте руководству по IAM.

Настройка среды разработки

  • Установите AWS CLI: Скачайте и установите AWS CLI. Настройте его с использованием ваших учетных данных IAM.
  • Настройте Python или Node.js: Установите Python или Node.js в зависимости от вашего предпочтения. AWS Lambda поддерживает несколько рантаймов. В этом руководстве мы будем использовать рантайм Python.

Шаг 1: Получите доступ к консоли AWS Lambda

  1. Войдите в Консоль управления AWS.
  2. Перейдите в службу Lambda.

Панель навигации в консоли AWS.

Щелкните Lambda в меню навигации , чтобы увидеть панель управления:

Панель управления AWS Lambda в консоли AWS.

Шаг 2: Создание новой функции

  1. Нажмите Создать функцию.
  2. Выберите “Автор с нуля”.
  3. Укажите имя вашей функции.
  4. Выберите среду выполнения (например, Python 3.11).
  5. Нажмите на Кнопку Создать функцию.

Создайте новую функцию AWS Lambda.

Это займет несколько секунд. После создания функции вы увидите успешное сообщение вверху.

Шаг 3: Напишите код вашей функции

AWS Lambda браузерная среда IDE для простого редактирования кода.

Шаг 4: Протестируйте свою функцию Lambda

На данный момент эта функция просто возвращает строку “Привет из Lambda!”.

Логики нет, зависимостей нет, ничего.

У нас есть скрипт на Python под названием lambda_function.py, который содержит функцию с именем lambda_handler(), возвращающую строку.

Теперь мы можем протестировать его, просто нажав на кнопку Test.

Проверьте свою функцию AWS Lambda в браузере.

Вы можете удалить “Event JSON”, так как наша функция не принимает входные данные. Укажите имя события и нажмите кнопку Invoke.

Успешное тестирование функции AWS Lambda.

Функция была успешно выполнена, и сообщение было возвращено.

Ура! Мы только что развернули серверную функцию с использованием AWS Lambda. В данный момент она не делает много, но она работает. Каждый раз, когда эта функция вызывается, она возвращает простую строку.

Запуск Лямбда событиями

Как уже упоминалось, архитектура AWS Lambda позволяет запускать функции в ответ на конкретные события из различных служб AWS, делая ее универсальным инструментом для автоматизации рабочих процессов и интеграции систем. 

События, такие как загрузка файлов в бакет S3, обновления в таблице DynamoDB или вызовы API через API Gateway могут вызывать функции Лямбда, обеспечивая обработку в реальном времени и масштабируемое выполнение.

1. Настройка триггера S3

  1. Перейдите в консоль S3.
  2. Выберите бакет S3.
  3. В разделе Свойства добавьте уведомление о событии для запуска вашей функции Лямбда при создании объекта.Создайте уведомление о событии в бакете AWS S3.Выберите функцию Лямбда для триггера в S3.

Примеры использования:

    • Автоматически изменять размер изображений, загруженных в S3.
    • Конвертировать видео в несколько разрешений или форматов для потоковой передачи.
    • Проверять форматы файлов, размеры или метаданные при загрузке.
    • Использовать ИИ для извлечения текста из загруженных документов (например, через Amazon Textract).

2. Интеграция с API Gateway

  1. Перейдите в сервис API Gateway.

Дашборд сервиса API Gateway в консоли AWS.

  1. Создайте новый REST API.

Создайте новый REST API через API Gateway.

  1. Настройте метод (например, POST) для вызова вашей функции Lambda.

Примеры использования:

    • Создайте безсерверный API для получения ответов в реальном времени.
    • Запустите функцию Lambda для создания и хранения пользовательских данных в базе данных.
    • Обрабатывайте POST-запросы для обработки и проверки заказов клиентов в реальном времени.
    • Запустите функцию Lambda для запроса и возврата данных из базы данных или API.

Развертывание и мониторинг AWS Lambdas

Развертывание функций AWS Lambda просто и может быть выполнено с использованием различных методов в зависимости от ваших потребностей, таких как консоль управления AWS для ручного развертывания или AWS CLI для автоматического развертывания.

1. Ручное развертывание с использованием AWS Console

Консоль управления AWS предоставляет интуитивно понятный веб-интерфейс для развертывания функций Lambda. Этот метод идеален для небольших проектов или быстрых изменений. Вот как развернуть функцию Lambda с помощью консоли:

  1. Создайте или отредактируйте функцию:
    • Войдите в Консоль управления AWS.
    • Перейдите в AWS Lambda.
    • Нажмите Создать функцию, чтобы создать новую функцию или выберите существующую функцию для обновления.
  2. Загрузите свой код:
    • Выберите Загрузить из и выберите .zip файл или контейнерное изображение.
    • Вы можете редактировать код функции непосредственно в интегрированном редакторе кода для разработки малого масштаба.
  3. Настройте функцию:
    • Определите переменные среды, выделение памяти и предельные временные рамки в соответствии с вашими потребностями.
    • Добавьте необходимые разрешения с использованием ролей AWS IAM, чтобы разрешить функции взаимодействовать с другими службами AWS.
  4. Разверните изменения:
    • Нажмите Развернуть, чтобы сохранить и активировать ваши изменения.
    • Используйте функцию Test, чтобы вручную вызвать функцию и проверить, что она работает как ожидается.

2. Автоматическое развертывание с использованием AWS CLI 

AWS CLI – это эффективный способ развертывания и обновления функций Lambda для автоматизации или частых обновлений. Он обеспечивает согласованность и снижает ручные ошибки, особенно в крупных проектах или конвейерах CI/CD.

Шаг 1 – Подготовьте пакет развертывания

Упакуйте свой код и зависимости в файл .zip. Например:

zip -r my-deployment-package.zip .

Шаг 2 – Разверните функцию с помощью CLI

Используйте команду update-function-code для загрузки нового кода в AWS Lambda:

aws lambda update-function-code \ --function-name MyFunction \ --zip-file fileb://my-deployment-package.zip

–function-name MyFunction \

–zip-file fileb://my-deployment-package.zip

aws lambda get-function --function-name MyFunction

Шаг 3 – Проверьте развертывание

После развертывания проверьте статус функции с помощью:

Эта команда извлекает конфигурацию функции и подтверждает развертывание.

Мониторинг Lambda с использованием CloudWatch

Мониторинг является важным для обеспечения эффективной работы ваших функций Lambda, обработки ошибок без сбоев и соответствия ожиданиям по производительности. Сервис AWS Lambda интегрируется с Amazon CloudWatch для предоставления возможностей мониторинга и журналирования.

  1. Amazon CloudWatch автоматически собирает и отображает ключевые метрики для ваших функций Lambda. Эти метрики помогают вам проанализировать производительность вашей функции и устранять проблемы.
  2. Метрики для мониторинга:
  3. Вызовы: Отслеживает количество вызовов вашей функции. Помогает понять трафик и тенденции использования.
  4. Ошибки: Отображает количество ошибок во время выполнения функции. Используйте это для выявления уровня сбоев и устранения проблем.

Продолжительность: Измеряет время выполнения функции. Это важно для оптимизации производительности и управления затратами.

  • Газы: Показывает количество вызовов, которые были замедлены из-за достижения пределов параллелизма.
  • Доступ к метрикам:
  • Перейдите в Консоль метрик CloudWatch.

Выберите Lambda из списка пространств имен.

Выберите функцию, которую вы хотите отслеживать, чтобы просматривать подробную статистику.

Лучшие практики AWS Lambda

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

1. Оптимизируйте запуски функций “с нуля”

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

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

Сжимайте и минифицируйте код, где это возможно, особенно для функций на JavaScript или Python.

Избегайте тяжелой инициализации в вашей функции

Переместите ресурсоемкую инициализацию (например, подключения к базе данных, клиентов API или сторонние библиотеки) за пределы обработчика функции. Это обеспечит выполнение кода только один раз на каждую среду и повторное использование во время вызовов.

Используйте предварительно выделенную мощность

Для критически важных функций, чувствительных к задержкам, используйте Предварительно выделенную мощность, чтобы поддерживать готовность среды выполнения к обслуживанию запросов. Хотя это приводит к дополнительным затратам, это гарантирует низкую задержку для рабочих нагрузок высокого приоритета.

2. Сохраняйте функции без состояния

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

Избегайте зависимости от данных в памяти

Функции Lambda – это временные, что означает, что их среда выполнения является временной и может не сохраняться между вызовами. Вместо использования переменных в памяти сохраняйте информацию о состоянии во внешних системах, таких как DynamoDB, S3 или Redis.

Включите идемпотентность

Проектируйте свои функции так, чтобы они обрабатывали дублирующиеся события корректно. Используйте уникальные идентификаторы для запросов и проверяйте журналы или базы данных, чтобы убедиться, что одно и то же событие не обрабатывается несколько раз.

3. Используйте переменные окружения

  • Переменные окружения — это безопасный и удобный способ настройки ваших функций Lambda:
  • Храните конфиденциальную информацию

Храните API ключи, строки подключения к базам данных и другие секреты в виде переменных окружения. AWS Lambda шифрует эти переменные в состоянии покоя и расшифровывает их во время выполнения.

Для дополнительной безопасности используйте AWS Secrets Manager или Systems Manager Parameter Store для динамического управления секретами.

Упростите управление конфигурацией

Используйте переменные среды для управления конфигурациями, такими как уровни журналирования, настройки региона или URL-адреса сторонних служб. Это устраняет необходимость в жестко закодированных значениях, делая вашу функцию более переносимой между окружениями (например, dev, staging, prod).

Заключение

Source:
https://www.datacamp.com/tutorial/aws-lambda