Lambda レイヤーを Amazon Linux 2で作成する
最近Discord上で動く時差変換botを作って、lambdaで動かすようにした。
GitHub - kumo2kumo/time_converter
その際lambda_function.pyで
Unable to import module 'lambda_function': No module named 'nacl._sodium
と出て読み込めない。
lambdaのランタイムはpython3.10に指定。
やり方は
Python Lambda 関数の「モジュールをインポートできません」エラーを解決する | AWS re:Post
を参考にした。
まずリンクの通りIAMポリシー作成→ロールにアタッチー>ロールをEC2にアタッチ
AmazonLinux2は初期でPython 3.7.16
リンクに従ってamazon-linux-extraでインストールしようとしても
amazon-linux-extras list | grep python
44 python3.8 available [ =stable ]
の通り3.8までしかできない。
ので3.10は自身でインストールする。
これを参考に
Amazon Linux 2にPython3.10をインストール | fragment
完了したらpynaclをインストールしてlayerに追加
mkdir python
python3.8 -m pip install pynacl -t python/
zip -r layer.zip python
aws lambda publish-layer-version --layer-name hoge --zip-file fileb://layer.zip --compatible-runtimes python3.10 --region ap-north-east-1(tokyo regionの場合)
最後にlambdaでhoge layerを追加
で完了できた😄