初めに
AWS Lambda でBoto3の最新バージョンを使いたくて、レイヤーを設定する際にハマった箇所の備忘録です。
(そもそも)なぜレイヤーを使う?
AWS Lambda でPythonのBoto3を使うとき、
- デフォルトでのBoto3は Ver.1.20.32
- 最新のBoto3は Ver.1.25.1
となっていました。何が問題かというと、公式ドキュメントに書かれているサンプルコードの通りに実装しても動かないんです!!(ひどい落とし穴)
前提
この辺りを参考にしながら進めました。とてもに参考になります。
本記事ではレイヤーの作成方法は記載しませんので、レイヤーの作成方法自体わからないという方は下記サイトをまずはご覧ください。
本題
罠1:フォルダパス
動かなかったもの
boto3.zip
|-- boto3/
|-- boto3/
|-- boto3-1.25.2.dist-info/
|-- botocore/
|-- etc...
動いたもの
boto3.zip
|-- python/
|-- boto3/
|-- boto3-1.25.2.dist-info/
|-- botocore/
|-- etc...
は? って感じでした。
でも公式ドキュメントにしれっと書いてありました。
つまり、Zip化する前のトップフォルダは、名前を"Python"にしておかなければいけないということですね。
罠2:zip コマンド
Windows上でもZipファイルを作成できる
Linuxで作成すべしという風潮がありましたが、Windows上で簡単に作成できました。
いくつかのサイトを見たところLinux系の"zip"コマンドを使用しており、これが存在しないWindowsでは作成できない。なのでLinux上でZipファイルを作成するという風潮がありました。
試しにGitbushでzipコマンドを実行してみたのですが、やっぱりなかったです。gzipコマンドでは再帰圧縮しかできず、個別のファイルを.gzにしてしまうのでダメでした。
Windows上でZipファイルを作成する手順
1.Gitbushで下記のコマンドを打つ
mkdir python
pip install -t python/ boto3
2.エクスプローラーで該当箇所を開いて、右クリック⇒「ZIPファイルに圧縮する」をクリック
3.作成されたZipファイルをLayerにアップロード
これでOKでした。
これに気づく前は、EC2上でpipインストールして、Boto3インストールして、zipコマンドインストールして、圧縮して、WindowsPCに転送して、Lambdaにアップロードして……
という七面倒な手順を使っていましたが、そんなこと必要ありませんでしたね。
最後に
レイヤーについてはまだまだ理解が足りておりませんので、間違い等ありましたら是非ともご教示お願います。