Lambda レイヤー用のライブラリを S3 にアップロードする

AWS

はじめに

Lambda 関数内の処理において外部のライブラリを使用する方法として、以下の2つの方法があります。

  • デプロイパッケージの中に実行ファイルとライブラリを含める
  • Lambda レイヤーを利用する

今回は、2つ目のLambda レイヤーを利用したいと思います。この Lambda レイヤーを作成する際、ライブラリのアップロード方法はローカルからのアップロードと S3 からのアップロードの2種類の方法から選ぶことができます。
また Lambda レイヤーはアーキテクチャ( x86_64 や arm64 )やランタイムごとに、互換性の有無を指定して作成するため、異なるアーキテクチャ、ランタイムの Lambda 関数から同様の Lambda レイヤーの利用が必要になったらレイヤーの再作成が必要になります。
その都度、ローカルからアップロードするのは、管理の面で効率的でないため、本記事ではライブラリは S3 で一元的に保管するためのシェルファイルを作成します。

対象者

この記事は下記のような人を対象にしています。

  • Lambda レイヤーを使用したい人
  • Lambda レイヤーの再作成を見越して、ライブラリをS3に保管しておきたい人

手順

レイヤー保管用 S3 バケットの作成

レイヤーを保管しておくバケットを作成します。
本記事ではバケット名を「lambda-layer-20220314」とします。

シェルファイルの作成

レイヤーに設定したコードは Lambda 関数の /opt 配下に展開され、/opt 以下の特定のディレクトリに対してあらかじめパスが通っています。
Lambda レイヤーの作成と共有によると、Python の場合は以下ディレクトリに対してパスが通っています。

  • /opt/python
  • python/lib/python3.9/site-packages(サイトディレクトリ)

上記を加味して、シェルファイルを作成します。

export LAYER_NAME=$1

mkdir python &&
cd python &&
pip3 install -t ./ $LAYER_NAME &&
cd .. &&
zip -r ${LAYER_NAME}.zip ./python &&
aws s3 cp ${LAYER_NAME}.zip s3://lambda-layer-20220314 &&
rm -rf python

引数に利用したいライブラリ名を指定し上記のシェルファイルを実行することで、Lambda レイヤー用のライブラリを S3 にアップロードすることができました。

おわりに

今回は Lambda レイヤー用のライブラリを S3 にアップロードするためのシェルファイルを作成しました。この記事がどなたかの参考になれば幸いです。

参考

コメント