結論:docker run
の際にアーキテクチャを指定する
を参考にLambdaへpydanticのレイヤーを追加しようとしていたが、No module named 'pydantic_core._pydantic_core’
というエラーが出た。調べてみるとLambdaのアーキテクチャに関係するエラーだということが分かった。
Lambdaには2種類のアーキテクチャが用意されている
Lambda 関数の命令セットアーキテクチャの選択と設定 - AWS Lambda
- arm64 — AWS Graviton2 プロセッサ用の 64 ビット ARM アーキテクチャです
- x86_64 — x86 ベースプロセッサ用の 64 ビット x86 アーキテクチャです
レイヤーに追加するZipを作成するコンテナのアーキテクチャとLambdaのアーキテクチャを揃えなければならない。自身のMacはAppleシリコンなのでCPUのアーキテクチャはarm64
です。しかし、Lambdaのアーキテクチャはintelに合わせてx86_64
としてある(技術負債でもある)ので、互換性が無いため追加したレイヤーが認識されずエラーになったのです。
M1 Mac の基礎知識|M1 Mac で Docker を動かすための知識とノウハウ
結論としては
docker run --platform=linux/x86_64 -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.12" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.12/site-packages/; exit”
として、使用するアーキテクチャを指定するべきであった。
番外
模索中にDockerでLambdaの実行環境を再現し、そこでzipを作成すればいけるんじゃね?と思ったけどダメだった。
実際に使ったもの→aws/codebuild/amazonlinux-x86_64-lambda-standard:python3.12
Lambda コンピューティングイメージ - AWS CodeBuild
作成したイメージをinspectで見てみると"Architecture": "arm64”
うーんだめ
run
する時にアーキテクチャを指定しないとダメだった。