好きこそものの上手なるby yukichi

プログラミング学習の備忘録。万歳車輪の再発明。

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を追加

で完了できた😄