Як створити шар Matplotlib для AWS Lambda за допомогою Docker

Створення шару Matplotlib для AWS Lambda стало для мене несподіваною проблемою в минулому. Більш конкретно, помилка залежності numpy:

"errorMessage": "Unable to import module 'lambda_function': No module named 'numpy'"

Один із простих способів вирішення цієї проблеми та створення сумісного шару — використати Docker контейнер!

1. Встановіть Docker на свій комп’ютер

Якщо у вас ще немає встановленого Docker, перейдіть на офіційний сайт Docker і завантажте його. У цьому прикладі я використовую Docker desktop для Windows.

2. Створіть Docker контейнер з правильною версією Python

Перевірте версію середовища виконання вашої функції Lambda та запишіть її.

pic

У моєму випадку це Python 3.12

Тепер відкрийте термінал Windows або будь-який інший інструмент командного рядка та створіть контейнер для Python з тією ж версією Python.

docker run -it --rm -v /c/Users/YourUser/my-lambda:/mnt/host/src python:3.12 /bin/bash

Зверніть увагу, що контейнер використовує ту ж версію, що й Lambda (3.12).

“/c/Users/YourUser/my-lambda” Змініть “YourUser” на ваше фактичне ім’я користувача.

Тепер /mnt/host/src змонтовано в директорію /c/Users/YourUser/my-lambda на хост-машині.

3. Створення шару

Перейдіть до змонтованої директорії та створіть віртуальне середовище Python:

cd /mnt/host/src  
python3 -m venv venv  
source venv/bin/activate

Тепер встановіть Matplotlib:

pip install matplotlib

Після встановлення пакету, його потрібно заархівувати, щоб підготувати до завантаження:

mkdir -p layer/python/lib/python3.12/site-packages  
cp -r venv/lib/python3.12/site-packages/* layer/python/lib/python3.12/site-packages/  
cd layer/  
zip -r matplotlib_layer.zip python/  
cp matplotlib_layer.zip /mnt/host/src/

Увага! ZIP, ймовірно, не встановлений у контейнері, тому вам потрібно буде його отримати. Це можна зробити таким чином:

apt-get update  
apt-get install zip

4. Готово!

Тепер ви можете побачити архівований файл, готовий до використання в шарі. Він знаходиться в директорії хост-машини, яку ви налаштували під час створення контейнера — “/c/Users/YourUser/my-lambda”.

exit #щоб вийти з Docker контейнера

Структура zip файлу повинна завжди починатися з “python/” і виглядати так:

pic

Перекладено з: How to create a Matplotlib AWS Lambda layer using Docker

Leave a Reply

Your email address will not be published. Required fields are marked *