Выполнение Jupyter Notebooks в Lambda

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

Мы упаковали все необходимые библиотеки и двоичные файлы в слой, и он общедоступен здесь:

arn:aws:lambda:us-east-1:221470125883:layer:jupyterlayer:1

Добавьте указанный выше слой jupyter в свою функцию, и вы сможете использовать papermill для запуска блокнота. Ниже приведен пример функции, которая загружает блокнот Jupyter из S3, выполняет и загружает выполненный блокнот обратно в S3.

Шаг 1

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

Шаг 2

Добавьте указанный выше слой jupyter в свою функцию.

Шаг 3

Напишите свою функцию. Ниже приведен пример функции загрузки блокнота с S3, ее выполнения и загрузки результатов на S3.

(пути пакета внутри слоя необходимо добавить к пути внутри лямбды, как описано ниже)

# to add paths
import sys
# papermill to execute notebook
import papermill as pm
# lambda layer uploads zip to /opt/
sys.path.append("/opt/bin")
sys.path.append("/opt/python")
os.environ["PYTHONPATH"]='/var/task'
os.environ["PYTHONPATH"]='/opt/python/'
# ipython needs a writeable directory
os.environ["IPYTHONDIR"]='/tmp/ipythondir'
def lambda_handler(event, context):
    s3 = boto3.resource('s3')
     s3.meta.client.download_file("download_bucket","juptest.ipynb", "/tmp/juptest.ipynb")
    pm.execute_notebook('/tmp/juptest.ipynb', '/tmp/juptest_output.ipynb', kernel_name='python3')
    s3_client.upload_file("/tmp/juptest_output.ipynb", "upload_bucket","temp/juptest_output.ipynb")

Шаг 4

Выполнить функцию

Если вы хотите создать свой собственный слой…

Если вы хотите создать свой собственный слой, ниже приведены шаги. После последнего шага вы можете создать слой, используя lambda.zip в своей корзине, и использовать слой на шаге 2 выше.

docker run -it lambci/lambda:build-python3.8 bash
pip install requests papermill ipython jupyter boto3 -t .
cp -r /var/lang/bin .
rm lambda.zip
zip -9qyr lambda.zip .
aws s3 cp lambda.zip s3://your_bucket/prefix
​