Docker でシミュレートされた Lambda 環境を使用して、Lambda レイヤーを作成する方法を教えてください。

最終更新日: 2021 年 3 月 12 日

ターゲット環境のランタイムと互換性のある AWS Lambda レイヤーを作成したいと考えています。どうすればできますか?

簡単な説明

Lambda 関数を開発する場合、サポートされている Lambda ランタイムバージョンの中から、いずれかを選択する必要があります。特定のランタイムと互換性がある Lambda 関数とレイヤーを作成するには、AWS サーバーレスアプリケーションモデル (AWS SAM) を使用して、新しいリソースを自動的に作成します。あるいは、AWS SAM の基盤となる amazon/aws-sam-cli-build-image Docker イメージを使用して作成することもできます。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

このチュートリアルでは、例として Python を使用しています。他の言語に関しては、必要に応じて各ステップを変更します。

1.    インストールが完了していない場合は、LinuxWindows、または MacOS 用のいずれかの Docker をコンピュータにインストールします。

2.    適切なディレクトリ構造を作成し、pip Requirements ファイル (requirements.txt) で依存関係を指定します。詳細については、pip ユーザーガイドの要件ファイルをご参照ください。

たとえば、Lambda レイヤーに Python バージョン 3.6 および 3.8 と互換性を持たせる場合、構造は次のようになります。

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

注: 関数とすべてのレイヤーを解凍したときの合計サイズは、解凍後デプロイパッケージのサイズ制限である 250 MB を超えることはできません。

Lambda がサポートする Python バージョンの詳細については、Python による Lambda 関数のビルドをご参照ください。

3.    ディレクトリ構造で指定した各ランタイムに対して、次のコマンドをそれぞれ 1 回実行します。これにより、そのランタイムと互換性のあるライブラリが適切なサブフォルダにインストールされます。

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

重要: インストールするライブラリの互換性に応じ、3.63.7 または 3.8 に置き換えます。

4.    次のコマンドを実行して Python フォルダを zip に圧縮し、レイヤパッケージを作成します。この .zip ファイルは、Lambda 環境の /opt フォルダに圧縮されており、このフォルダには Lambda 関数のコードからアクセスできます。

zip -r mypythonlibs.zip python > /dev/null

注: mypythonlibs を、必要に応じ任意の名前に置き換えます。

5.    次のコマンドを実行し、レイヤーの作成または更新を行います。先に指定した、互換性のあるランタイムを含めてください。

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

重要: mypythonlibs を前のステップで使用したパッケージ名に置き換えます。My python libs を適切な説明に置き換えます。

出力結果を見て、レイヤーの Amazon リソースネーム (ARN) を書き留めておきます。ステップ 6 には ARN が必要です。

6.    次のコマンドを実行して、レイヤーを使用するように Lambda 関数設定を更新します。

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

重要: arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 を、ステップ 5 で書き留めておいたレイヤーの ARN に置き換えます。

(オプション) Lambda パッケージ用に Docker イメージを使用する

レイヤーを作成せずに、Lambda パッケージ用の amazon/aws-sam-cli-build-image イメージを直接使用することもできます。

1.    次のコマンドを実行して、依存関係で必要なバージョンを取得します。

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

重要: インストールするライブラリの互換性に応じ、3.63.7 または 3.8 に置き換えます。

2.    関数コードと適切なライブラリを含む Lambda デプロイパッケージを作成します 。