По умолчанию ваши функции AWS Lambda включают только функциональность Core Python. Лоуры лямбда – фантастическая функция, позволяющая добавлять внешние зависимости в ваши функции лямбда. В этом посте я пойду на вас, как вы можете создать собственную библиотеку LAMBDA SELERS, используя Docker.
Каковы слои лямбда?
Если вы не знакомы с LAMBDA SELERS, слой является дополнительным кодом, вы можете включить во время выполнения с помощью функций лямбда для включения внешних библиотек в вашу функцию лямбда. По умолчанию функции лямбда включают только основные библиотеки Python. Слои – это способ для вас включить другие внешние библиотеки в ваши функции лямбда. Полезная особенность слоев заключается в том, что они существуют вне самой функции лямбда. Как только вы создадите слой, вы можете использовать этот слой во всех ваших функциях лямбда. Вы можете прочитать больше о Слои от документации AWS.
Для этого поста мы собираемся создать слой, используя колбу в качестве примера. Создание слоя лямбда с Docket имеет четыре основных этапа:
- Настройка локального каталога для слоя
- Используйте Docker, чтобы установить пакеты слоя
- Создайте ZIP-файл вашего каталога
- Загрузить в 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”