Рубрики
Без рубрики

Создание Python AWS LAMBDA LAYERS с Docker

Создайте свою собственную библиотеку AWS LAMBDA SELERS, используя Docker!. Помечено с AWS, Python, Serverless.

По умолчанию ваши функции AWS Lambda включают только функциональность Core Python. Лоуры лямбда – фантастическая функция, позволяющая добавлять внешние зависимости в ваши функции лямбда. В этом посте я пойду на вас, как вы можете создать собственную библиотеку LAMBDA SELERS, используя Docker.

Каковы слои лямбда?

Если вы не знакомы с LAMBDA SELERS, слой является дополнительным кодом, вы можете включить во время выполнения с помощью функций лямбда для включения внешних библиотек в вашу функцию лямбда. По умолчанию функции лямбда включают только основные библиотеки Python. Слои – это способ для вас включить другие внешние библиотеки в ваши функции лямбда. Полезная особенность слоев заключается в том, что они существуют вне самой функции лямбда. Как только вы создадите слой, вы можете использовать этот слой во всех ваших функциях лямбда. Вы можете прочитать больше о Слои от документации AWS.

Для этого поста мы собираемся создать слой, используя колбу в качестве примера. Создание слоя лямбда с Docket имеет четыре основных этапа:

  1. Настройка локального каталога для слоя
  2. Используйте Docker, чтобы установить пакеты слоя
  3. Создайте ZIP-файл вашего каталога
  4. Загрузить в AWS, используя AWS CLI

Следующие несколько разделов будут описать каждый из этих шагов более подробно. Последний раздел покажет, как эти шаги могут быть объединены в один скрипт Bash, чтобы сделать развертывание еще проще.

Настройка каталога вашего слоя

Первым шагом является создание локальной структуры каталога, которая будет содержать все артефакты для нашего слоя. В терминале введите команды ниже. Новый каталог под названием Флэк-слой создается вместе с подкаталогом python/lib.python3.8/Сайт-пакеты Где мы установим наши пакеты Python.

mkdir flask-layer
cd flask-layer
mkdir -pv python/lib/python3.8/site-packages

Если вы хотите создать свой слой для нескольких версий Python, вы можете повторить последнюю команду и изменить «Python3.8» любую другую версию Python, которую вы хотите включить.

В пределах Флэк-слой каталог Создать требования .txt Файл, который включает в себя следующее.

flask==1.1.1

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

Однозначное осознание слоев заключается в том, что когда они загружены в вашу функцию лямбда, они не могут превышать 250 МБ в размере. Функция лямбда может включать до 5 различных слоев. Учитывая эти ограничения, имея меньшие слои, которые вы можете смешивать, а матч по всему функциям предпочтительнее, а не настроить большие однозначные слои.

Установка требований к Docker

Docker установит зависимости, которые вы указываете в требования .txt Отказ У докера есть Изображения реплицировать aws lambda окружающую среду. Используя эти изображения Docker установит библиотеки, которые вы указали в требования .txt которые совместимы с Rambda Runtime. В терминале введите следующий код. Убедитесь, что у вас есть Docker, прежде чем вводить эту команду!

docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"

После запуска команды вы должны увидеть Сайт-пакеты Каталог, который вы создали на предыдущем шаге, заполнили все ваши зависимости.

Если у вас есть дополнительные версии, вы хотите создать свой слой, чтобы убедиться, что вы замените вхождения «Python3.8» с правильной версией, которую вы хотите использовать.

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

AWS требует, чтобы весь код слоя находиться в ZIP-архиве, поэтому нам нужно все, что все в Python каталог.

zip -r flask-layer.zip python

Все содержимое Python каталог включены в ZIP-архив под названием flask-layer.zip Отказ

Теперь слой можно загрузить на AWS, используя AWS CLI Отказ Вам необходимо предоставить несколько параметров на этом этапе:

  • Название слоя это имя, которое вы хотите дать свой слой
  • Описание кратко обобщить слой
  • zip-файл Путь к архиву ZIP вы создали на предыдущем шаге
  • Совместимые-runtimes Детали подробности Python Versions Ваш слой совместим с

Введите следующее в терминал, чтобы опубликовать наш слой к AWS:

aws lambda publish-layer-version \
    --layer-name "flask-layer" \
    --description "Lambda Layer for Flask 1.1.1" \
    --zip-file "fileb://flask-layer.zip" \
    --compatible-runtimes "python3.8"

И с тем, что ваш слой колба опубликован на AWS! Теперь давайте упростим этот процесс немного больше, упаковывая некоторые из этих шагов в один скрипт Bash.

Для управления моими слоями я создал один скрипт Bash, упаковка большую часть шагов, вместе, чтобы облегчить развертывание слоев. У меня есть каталог, где мне управлять всеми моими слоями. Ниже приведен образец этих слоев. Каждый слой имеет свой каталог и create-lambda-layer.sh Сценарий ручки устанавливают зависимости слоя и загрузки их на AWS.

Вот что create-lambda-layer.sh. похоже:

#!/usr/bin/env bash


while [[ "$#" -gt 0 ]]; do case $1 in
  -v|--version) pythonEnvs+=("$2"); shift;;
  -n|--layer-name) layerName="$2"; shift;;
  -d|--desc) layerDescription="$2"; shift;;
  *) echo "Unknown parameter passed: $1"; exit 1;;
esac; shift; done


# Create and install requirements to directory.
for penv in ${pythonEnvs[@]}; do
    mkdir -pv python/lib/${penv}/site-packages
    docker run -v "$PWD":/var/task "lambci/lambda:build-${penv}" /bin/sh -c "pip install -r requirements.txt -t python/lib/${penv}/site-packages/; exit"
done


# Create zip file of environments.
zip -r ${layerName}.zip python


# Publish Layer to Lambda.
aws lambda publish-layer-version \
    --layer-name "${layerName}" \
    --description "${layerDescription}" \
    --zip-file "fileb://${layerName}.zip" \
    --compatible-runtimes ${pythonEnvs[@]}

Сценарий принимает параметры для версий Python (вы можете предоставить несколько!), Имя и описание для вашего слоя. Из этих параметров скрипт будет генерировать структуру файла, запустите команду Docker для каждой версии Python, создайте архив ZIP, а затем обновить слой к AWS.

Мы можем проверить это, установив Twilio Помощь библиотека. В терминале создайте каталог, где вы собираетесь хранить свои слои лямбда.

mkdir my-lambda-layers
cd my-lambda-layers

Создайте файл внутри этого каталога, create-lambda-layer.sh и вставьте код выше в файл.

Каждый слой должен иметь свой каталог, выполните следующий код в терминале, чтобы создать каталог Twilio-слой Отказ

mkdir twilio-layer
cd twilio-layer

Последний бит настройки – создать требования .txt Файл, который должен включать в себя:

twilio==6.40.0

Теперь мы можем позвонить нашему сценарию Bash, чтобы закончить создание и развертывание нашего слоя (снова, убедитесь, что у вас есть Docker, прежде чем выполнять этот код!)

bash ../create-lambda-layer.sh -v "python3.8" -n "twilio-layer" -d "Twilio 6.40.0 Layer"

И ваш слой развернут для AWS!

Если вы хотите создать свой слой для нескольких разных версий Python, все, что вам нужно сделать, это указать дополнительные Параметры с этими версиями. Приведенный ниже пример создает слой для Python 3.6, 3.7 и 3.8 runtimes.

bash ../create-lambda-layer.sh -v "python3.8" -v "python3.7" -v "python3.6" -n "twilio-layer" -d "Twilio 6.40.0 Layer"

Очень просто!

В этом посте я показал вам, как развернуть слой лямбда через командную строку с помощью Docker. Приведенный скрипт Bash не полностью представлен, но в его текущей форме предоставляет удобный способ развертывать ваши слои лямбда. Слои – это аккуратный инструмент, который может помочь вам добавить функциональность в ваш лямбдас. Docker упрощает создание слоев, чтобы вы могли управлять собственной библиотекой слоев, которые вы можете поделиться с друзьями и коллегами!

Счастливое здание!

Оригинал: “https://dev.to/matthewvielkind/creating-python-aws-lambda-layers-with-docker-4376”