0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaに新しくレイヤーを追加する際に詰まった話です。

Posted at

結論: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する時にアーキテクチャを指定しないとダメだった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?