【问题标题】:Running Jupyter Notebook on AWS Lambda在 AWS Lambda 上运行 Jupyter Notebook
【发布时间】:2020-08-07 13:17:07
【问题描述】:

我正在尝试在 AWS Lambda 上运行 Jupyter Notebook,创建了一个包含所有依赖项的层,jupyter notebook 是一个简单的代码,它从亚马逊 S3 中提取一个 csv 文件并将数据显示为条形图。下面是为下载 .ipynb 文件并使用 papermill 执行 notebook 而编写的 lambda 函数。不知道为什么它会因为找不到 boto3 模块而失败。

import json
import sys
import os
import boto3
# papermill to execute notebook
import papermill as pm
import pandas as pd
import logging
import matplotlib.pyplot as plt

sys.path.append("/opt/bin")
sys.path.append("/opt/python")
os.environ["PYTHONPATH"]='/var/task'
os.environ["PYTHONPATH"]='/opt/python/'
os.environ["MPLCONFIGDIR"] = '/tmp/'
# ipython needs a writeable directory
os.environ["IPYTHONDIR"]='/tmp/ipythondir'
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    s3 = boto3.resource('s3')
    s3.meta.client.download_file('test-boto', 'testing.ipynb', '/tmp/test.ipynb')
    pm.execute_notebook('/tmp/test.ipynb', '/tmp/juptest_output.ipynb', kernel_name='python3')
    s3_client.upload_file('/tmp/juptest_output.ipynb', 'test-boto', 'temp/juptest_output.ipynb')
    logger.info(event)

错误操作:

START RequestId: c4da3406-c829-4f99-9fbf-b231a0d3dc06 Version: $LATEST
[INFO]  2020-08-07T17:55:16.602Z    c4da3406-c829-4f99-9fbf-b231a0d3dc06    Input Notebook:  /tmp/test.ipynb
[INFO]  2020-08-07T17:55:16.603Z    c4da3406-c829-4f99-9fbf-b231a0d3dc06    Output Notebook: /tmp/juptest_output.ipynb

Executing:   0%|          | 0/15 [00:00<?, ?cell/s][INFO]   2020-08-07T17:55:17.311Z    c4da3406-c829-4f99-9fbf-b231a0d3dc06    Executing notebook with kernel: python3
OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k

Executing:   7%|▋         | 1/15 [00:01<00:14,  1.06s/cell]
Executing:   7%|▋         | 1/15 [00:01<00:20,  1.46s/cell]
[ERROR] PapermillExecutionError: 
---------------------------------------------------------------------------
Exception encountered at "In [1]":
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-9c332490c231> in <module>
      1 import pandas as pd
      2 import os
----> 3 import boto3
      4 import matplotlib.pyplot as plt
      5 client = boto3.client('s3')

ModuleNotFoundError: No module named 'boto3'

Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 28, in lambda_handler
    pm.execute_notebook('/tmp/test.ipynb', '/tmp/juptest_output.ipynb', kernel_name='python3')
  File "/opt/python/papermill/execute.py", line 110, in execute_notebook
    raise_for_execution_errors(nb, output_path)
  File "/opt/python/papermill/execute.py", line 222, in raise_for_execution_errors
    raise errorEND RequestId: c4da3406-c829-4f99-9fbf-b231a0d3dc06
REPORT RequestId:c4da3406-c829-4f99-9fbf-b231a0d3dc06
    Duration: 1624.78 ms    Billed Duration: 1700 ms    Memory Size: 3008 MB    Max Memory Used: 293 MB

Jupyter 笔记本:

import pandas as pd
import os
import boto3
import matplotlib.pyplot as plt
client = boto3.client('s3')

path = 's3://test-boto/aws-costs-Owner-Month-08.csv'
monthly_owner = pd.read_csv(path)
plt.bar(monthly_owner.Owner.head(6),monthly_owner.Amount.head(6))
plt.xlabel('Owner', fontsize=15)
plt.ylabel('Amount', fontsize=15)
plt.title('AWS Monthly Cost by Owner')
plt.show()

【问题讨论】:

  • 来自Matplotlib 的消息似乎表明笔记本已执行,但可能没有完成。您是否已验证您可以在主机上相同配置的环境中运行它?也许使用 Docker 或 VM 来引入所有依赖项并将执行与您可能已作为用户库安装的内容隔离开来?
  • @Parsifal 感谢您的回复,Matploylib 警告是由于import。我没有尝试过相同配置的环境。
  • @Parsifal 我更新了内存限制,笔记本开始执行,我在遇到另一个问题时编辑了问题
  • 您说“创建了一个包含所有依赖项的层”...该依赖项是否包括 boto3?

标签: python amazon-web-services aws-lambda jupyter-notebook


【解决方案1】:

看起来 papermill 内核无法检测到 boto3 包,即使您的 lambda 处理程序能够找到它。我看到你在你的 lambda 处理程序中覆盖(而不是附加) PYTHONPATH 。这将从 PYTHONPATH 中删除其他目录以查找包。 Papermill 子进程随后将使用此 python 路径。

您可能还会发现this 很有用。它允许您直接将 Jupyter Notebooks 部署为无服务器功能。它在幕后使用造纸厂。

免责声明:我为 Clouderizer 工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2017-11-05
    相关资源
    最近更新 更多