Lambda-слой AWS (Amazon Web Service)  —  это механизм распределения библиотек, пользовательских сред выполнения и других зависимостей, которые можно добавить к функции Lambda. Он позволяет отделить код приложения от зависимостей, которые можно повторно использовать в нескольких функциях.

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

Преимущества Lambda-слоев

Вот пять преимуществ использования Lambda-слоев AWS.

  1. Упрощение управления кодом. Lambda-слои позволяют отделить код функции от ее зависимостей, что упрощает их управление и обновление по отдельности.
  2. Ускорение обновления функции. При обновлении Lambda-слоя нужно заново развернуть только слой, а не всю функцию. Это может значительно сократить время, необходимое для обновления Lambda-функции.
  3. Повторное использование кода. Один Lambda-слой можно использовать в нескольких функциях, сокращая дублирование кода и экономя время и усилия.
  4. Сокращение размера пакета. Разделяя зависимости в Lambda-слое, можно уменьшить размер пакета функции, что ускоряет ее развертывание и снижает общие затраты на хранение.
  5. Облегчение совместной работы. Публикация Lambda-слоев в AWS Serverless Application Repository или совместное использование между командами облегчает взаимодействие с общими зависимостями и снижает вероятность конфликтов между командами.

Bash-скрипт

#!/usr/bin/env bash

pip3 install pandas sqlalchemy --target python/
zip -r pandas_sqlalchemy_layer.zip python/

Выполнение/запуск скрипта

chmod +x create_lambda_layer.sh && ./create_lambda_layer.sh

Этот bash-скрипт устанавливает Python-библиотеки Pandas и SQLAlchemy, затем упаковывает их в zip-файл, который можно использовать в качестве Lambda-слоя AWS. Вот построчное объяснение.

  1. #!/usr/bin/env bash. Это называется “строка shebang”, которая указывает системе, какой интерпретатор использовать для выполнения скрипта. В данном случае она указывает, что скрипт должен выполнять Bash Shell.
  2. pip3 install pandas sqlalchemy — target python/. Эта строка использует pip3 для установки Python-библиотек Pandas и SQLAlchemy в каталог python/. Параметр --target указывает pip3 на установку библиотек в определенный каталог, а не в какое-то место по умолчанию.
  3. zip -r pandas_sqlalchemy_layer.zip python/. Эта строка создает zip-файл с именем pandas_sqlalchemy_layer.zip, в котором находится содержимое каталога python/. Параметр -r указывает zip на рекурсивное включение всех файлов и подкаталогов.

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

Загрузка Lambda-слоя в AWS

Ниже приведены общие шаги по загрузке Lambda-слоя pandas_sqlalchemy_layer.zip в AWS.

  1. Сначала откройте AWS Management Console и перейдите к сервису AWS Lambda.
  2. Нажмите на опцию Layers в левом меню.
  3. Затем нажмите кнопку Create Layer.
  4. Введите имя и описание для Lambda-слоя.
  5. Загрузите ZIP-архив, содержащий зависимости, перетащив файл в диалоговое окно загрузки или выбрав его с помощью инструмента выбора файлов.
  6. Укажите совместимую(ые) среду(ы) выполнения для Lambda-слоя, например Python 3.7, Python 3.8 и Python 3.9.
  7. Публикация слоя создаст новую версию, которую вы сможете использовать в своих функциях.

После создания и публикации Lambda-слоя можно присоединить его к своим функциям AWS Lambda, указав ARN слоя (Amazon Resource Name, номер ресурса Amazon) в конфигурации функции.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Dmit: Package AWS Lambda Layers for Python 🐍

Предыдущая статьяРуководство по AWS: настройка экземпляра EC2 для развертывания приложений Java
Следующая статьяНа что способен Selenium в паре с JavaScript?