3
2

More than 1 year has passed since last update.

【AWS Lambda レイヤー】設定したときにハマった話

Last updated at Posted at 2022-10-27

初めに

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"にしておかなければいけないということですね。
image.png

罠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ファイルに圧縮する」をクリック
image.png
3.作成されたZipファイルをLayerにアップロード

これでOKでした。

これに気づく前は、EC2上でpipインストールして、Boto3インストールして、zipコマンドインストールして、圧縮して、WindowsPCに転送して、Lambdaにアップロードして……
という七面倒な手順を使っていましたが、そんなこと必要ありませんでしたね。

最後に

レイヤーについてはまだまだ理解が足りておりませんので、間違い等ありましたら是非ともご教示お願います。

3
2
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
3
2