[Python] Running Jupyter Notebook on AWS Lambda

Discussão em 'Python' iniciado por Stack, Março 13, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to run Jupyter Notebook on AWS Lambda, created a layer with all the dependencies, the jupyter notebook is a simple code which pulls a csv file from amazon S3 and displays the data as bar graph. Below is the lambda function written to download the .ipynb file and execute the notebook with papermill. Not sure why its failing with boto3 module not found.

    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)


    Error o/p:

    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 Notebook:

    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()

    Continue reading...

Compartilhe esta Página