AWS Cloud9からPython Lambdaをデプロイするときに自作ライブラリを含める

pipでインストールできるライブラリを含める


例としてnumpyをインストールしてみます。
ec2-user:~/environment $ cd MyApp/
ec2-user:~/environment/MyApp $ ls -l
total 16
-rw-r--r-- 1 ec2-user ec2-user    0 Jun 11 13:39 __init__.py
drwxr-xr-x 2 ec2-user ec2-user 4096 Jun 11 13:42 MyFunc
-rw-r--r-- 1 ec2-user ec2-user   13 Jun 11 13:39 requirements.txt
-rw-r--r-- 1 ec2-user ec2-user  449 Jun 11 13:39 template.yaml
drwxr-xr-x 6 ec2-user ec2-user 4096 Jun 11 13:39 venv
ec2-user:~/environment/MyApp $ python3 -m pip install --target=./ numpy
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/b3/a9/b1bc4c935ed063766bce7d3e8c7b20bd52e515ff1c732b02caacf7918e5a/numpy-1.18.5-cp36-cp36m-manylinux1_x86_64.whl (20.1MB)
    100% |████████████████████████████████| 20.1MB 62kB/s 
Installing collected packages: numpy
Successfully installed numpy-1.18.5
You are using pip version 9.0.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
ec2-user:~/environment/MyApp $ ls -l
total 28
-rw-r--r--  1 ec2-user ec2-user    0 Jun 11 13:39 __init__.py
drwxr-xr-x  2 ec2-user ec2-user 4096 Jun 11 13:46 MyFunc
drwxrwxr-x 17 ec2-user ec2-user 4096 Jun 11 13:45 numpy
drwxrwxr-x  2 ec2-user ec2-user 4096 Jun 11 13:45 numpy-1.18.5.dist-info
drwxrwxr-x  2 ec2-user ec2-user 4096 Jun 11 13:45 numpy.libs
-rw-r--r--  1 ec2-user ec2-user   13 Jun 11 13:39 requirements.txt
-rw-r--r--  1 ec2-user ec2-user  449 Jun 11 13:39 template.yaml
drwxr-xr-x  6 ec2-user ec2-user 4096 Jun 11 13:39 venv
Cloud9のコンソールからpipでインストールできます。

次のコードをデプロイ、実行してみます。
import numpy as np

def lambda_handler(event, context):
    print(np.array([1, 2, 3]))
    return ""
リモート実行でもバッチリnumpyが使えています。

自作ライブラリを含める

てなわけで関数ディレクトリと同じ階層に自作ライブラリを置けば使えそうです。
ec2-user:~/environment/MyApp $ mkdir MyLib
ec2-user:~/environment/MyApp $ touch MyLib/__init__.py
ec2-user:~/environment/MyApp $ touch MyLib/MyUtil.py
import numpy as np

def print_numpy():
    print(np.array([1, 2, 3]))
import MyLib.MyUtil as util

def lambda_handler(event, context):
    util.print_numpy()
    return ""
狙い通りできました。