1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Lambda Layersを使ったPythonライブラリーの追加

Last updated at Posted at 2022-02-24

はじめに

Lambda関数でサードパーティのライブラリーを使用したいときは、下記のいずれかの方法を使って、対象のライブラリーを追加する必要がある。

  • 追加したいライブラリーを含んだパッケージデプロイ
  • Lambda Layersを使って追加

今回は「Lambda Layersを使って追加」についてまとめていく。

Lambda Layersを使った追加方法

環境

  • Windows / Mac
  • Dockerが使えること。
    • ここではDockerのインストール方法は省略するが、ローカルの場合はDocker Desktopを使うと簡単。
    • Linuxサーバー等にインストールする場合は下記記事記事を参照。

やってみて分かったこと

  • Layerにアップロードするライブラリーは、AmazonLinux環境で作成しないと読み取ってくれないことが分かった。

    • WindowsやMacのローカル環境で、pipを使ってインストールしたライブラリーをLayerに追加しても正常に読み取ってくれなかった。
    • 他のLinux環境では試していないので、もしかしたらそちらでも可能かもしれない(未検証)
  • そこで、「docker-lambda」というLambda環境を構築できるDockerコンテナを利用してライブラリーを作成することでうまくいったので、次章ではその方法についてまとめていく。

docker-lambdaを使ったライブラリーファイルの作成

  • requirements.txtに必要なライブラリーを記載する。
  • 下記コマンドを実行。
    • 初回だけイメージpullに時間がかかるが、2回目以降はしないので早くなる。
    • 作成するフォルダ名は「python」にしないといけないみたい。
      • これについては諸説あるみたいだが、「python」とするとうまくいった。
    • Pythonのバージョンは例として3.8とした。
      • どのバージョンをサポートしているかは上記に記載したURLを参照。
docker run --rm -v "$(PWD):/var/task" lambci/lambda:build-python3.8 pip install -r ./requirements.txt -t python/lib/python3.8/site-packages/
  • カレントディレクトリに「python」フォルダができているのでzipファイルにする。

Layerを追加

  • Lambdaのページを開き、「レイヤー」で追加したいライブラリーを含んだレイヤーを作成する。
    • zipファイルが10Mを超える場合はS3経由のアップロードになるので注意すること。
  • レイヤーを作成後は、Lambda関数の「レイヤーを追加」で対象のレイヤーを追加する。
    • 「ARNを指定」を選び、追加したレイヤーのARN貼り付ける。
      image.png
  • 正常にレイヤー追加されると、下記のように一覧に追加したレイヤーが表示される。
    image.png
  • その後は通常通り、import XXXXXでライブラリーをimportして使用することができる。
1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?