ターゲット環境のランタイムと互換性のある AWS Lambda レイヤーを作成したいと考えています。どうすればできますか?
簡単な説明
Lambda 関数を開発するときは、サポートされている Lambda ランタイムバージョンを選択します。特定のランタイムと互換性のある Lambda 関数と Layer を作成するには、次のいずれかを実行できます:
詳細については、「Lambda レイヤーの作成と共有」 を参照してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、使用している AWS CLI が最新バージョンであることを確認してください。
以下の説明では、コーディング言語として Python を使用し、例として Linux ベースのコンピュータープラットフォームを使用します。他のコーディング言語やプラットフォームの場合は、それに応じて手順を調整してください。
コンピューターに Docker をインストールする
Linux、Windows、またはmacOS 用の Docker をまだインストールしていない場合はコンピューターにインストールしてください。
適切なディレクトリ構造を作成し、pip 要件ファイル (requirements.txt) に依存関係を指定します。
ディレクトリ構造の作成の詳細については、「ライブラリ依存関係をレイヤーに含める」を参照してください。依存関係の指定について詳しくは、pipユーザーガイドの「要件ファイル」を参照してください。
Python バージョン 3.6 および 3.8 と互換性のある Lambda レイヤーのディレクトリ構造の例
├── requirements.txt
└── python/
└── lib/
├── python3.6/
│ └── site-packages/
└── python3.8/
└── site-packages/
**注:**関数とすべてのレイヤーの解凍後の合計サイズは、解凍されたデプロイパッケージのサイズ制限である 250 MB を超えることはできません。Lambda での Python バージョンのサポートの詳細については、「Python を使用した Lambda 関数の構築」を参照してください。
ディレクトリ構造で指定したランタイムに基づいて、ライブラリの依存関係を適切なサブフォルダにインストールします
次の AWS CLI コマンドを、ディレクトリ構造で指定したランタイムごとに 1 回実行します:
重要:インストールする互換ライブラリに応じて、3.6 を 3.7 または 3.8 に置き換えます。
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"
レイヤーの.zip ファイルアーカイブの作成
次のコマンドを実行して python フォルダーを圧縮し、レイヤーパッケージを作成します:
注:mypythonlibs は好きな名前に置き換えることができます。
zip -r mypythonlibs.zip python > /dev/null
zip ファイルは Lambda 環境の /opt フォルダーで圧縮されています。/opt フォルダーには Lambda 関数コードからアクセスできます。
レイヤーの作成または更新
以下のコマンドを実行して、Lambda レイヤーを作成または更新します:
**重要:**前に指定した互換性のあるランタイムを必ず含めてください。mypythonlibs は、前のステップで使用したパッケージ名に置き換えます。My python libs を好きな説明に置き換えます。
aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"
出力を確認し、レイヤーの Amazon リソースネーム (ARN) をコピーします。次のステップを完了するには、レイヤーの ARN が必要です。
Lambda 関数設定を更新して Layer を使用する
次のコマンドを実行して Lambda 関数設定を更新して Layer を使用するようにします:
**重要:**arn: aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 をレイヤー ARN に置き換えます。
aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function
(オプション) Lambda パッケージに AWS SAM ファイルの代わりに Docker イメージを使用するには
AWS SAM ファイルを使用する代わりに、amazon/aws-sam-cli-build-image の Docker イメージを使用して Lambda パッケージを作成することもできます。Docker イメージを使用すると、レイヤーを作成せずにパッケージを作成できます。
1. 次のコマンドを実行して、必要なバージョンの依存関係を取得します:
重要:インストールする互換ライブラリに応じて、3.6 を 3.7 または 3.8 に置き換えます。
docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"
2. 関数コードと適切なライブラリを含む Lambda デプロイパッケージを作成します。
関連情報
Python (Boto 3) Lambda 関数で「不明なサービス」、「パラメータの検証に失敗しました」、「オブジェクトには属性がありません」というエラーが表示されるのはなぜですか?
ビルディングレイヤー
任意のプログラミング言語を使用し、共通のコンポーネントを共有
Lambda (AWS CLI コマンドリファレンス)