AWS Lambda Layers を利用することで、Lambda 関数の依存関係を外部化し、関数のデプロイパッケージをシンプルに保つことができます。本記事では、特定の Git リポジトリから取得したライブラリを AWS Lambda Layers にアップロードする手順を解説します。
前提条件
以下のツールがインストールされていることを確認してください。
- Python 3.x
pip
- AWS CLI
zip
コマンド
Lambda Layer 用のディレクトリ構造を作成
Lambda Layer 用に、ライブラリをインストールするディレクトリを作成します。Lambda Layers は、このディレクトリ内にライブラリを配置することで、Lambda 関数がそれらを参照できるようにします。
mkdir python
python
ディレクトリが Layer にアップロードされる場所です。この中にライブラリをインストールしていきます。
Git リポジトリからライブラリをインストール
次に、pip
を使って特定の Git リポジトリからライブラリを python
ディレクトリ内にインストールします。例えば、特定のコミットハッシュやブランチを指定してライブラリを取得したい場合、以下のようなコマンドを使います。
pip install git+https://<リポジトリのURL>@<コミットハッシュまたはブランチ名> -t python/
<リポジトリのURL>
は対象ライブラリの Git リポジトリ URL を指定し、<コミットハッシュまたはブランチ名>
には特定のバージョンやブランチを指定します。
不要なファイルを削除(オプション)
インストールしたライブラリには、不要なファイル(例:ドキュメントやテストファイル)が含まれることがあります。Lambda Layers のサイズを抑えるために、以下のコマンドで不要なファイルを削除します。
find python/ -name "*.dist-info" -exec rm -r {} +
find python/ -name "*.egg-info" -exec rm -r {} +
Layer の ZIP ファイルを作成
次に、python
ディレクトリを ZIP ファイルに圧縮します。この ZIP ファイルが、AWS Lambda にアップロードされる Layer の内容になります。
zip -r layer.zip python
これで Layer の準備が整いました。
AWS Lambda Layer にアップロード
AWS CLI を使って、作成した ZIP ファイルを AWS Lambda Layer にアップロードします。以下のコマンドを実行します。
aws lambda publish-layer-version \
--layer-name <Layer名> \
--description "Lambda Layer for custom libraries" \
--zip-file fileb://layer.zip \
--compatible-runtimes python3.x \
--region <リージョン名>
<Layer名>
には Layer の名前を指定します。<リージョン名>
には AWS のリージョンを指定します(例:ap-northeast-1
など)。
このコマンドを実行すると、Layer の ARN(Amazon リソースネーム)が返されます。この ARN を後で Lambda 関数に設定します。
Lambda 関数に Layer を追加
Layer を作成した後、それを Lambda 関数で使用できるようにします。以下はSAMのtemplate.yaml
での例です。
Globals:
Function:
CodeUri: src
Runtime: python3.x
Timeout: 30
MemorySize: 256
Layers:
- arn:aws:lambda:<リージョン名>:<アカウントID>:layer:<Layer名>:<バージョン番号>
Environment:
Variables:
TABLE_NAME: "example_table"
<リージョン名>
, <アカウントID>
, <Layer名>
, <バージョン番号>
は、AWS CLI で Layer を作成した際に取得した情報を入力してください。
デプロイして動作確認
Layer を Lambda 関数に追加したら、通常通りに関数をビルドしてデプロイします。
sam build
sam deploy
デプロイ後、関数が正しく Layer を参照して動作しているか確認します。
まとめ
AWS Lambda Layers を使用することで、Lambda 関数に依存関係を簡単に管理し、ライブラリの一元管理や再利用が可能になります。特定の Git リポジトリからライブラリを取得して Layer にアップロードすることで、より柔軟な開発環境を構築できるようになります。