Docker でシミュレートされた Lambda 環境を使用して、Lambda レイヤーを作成する方法を教えてください。
ターゲット環境のランタイムと互換性のある AWS Lambda レイヤーを作成したいと考えています。どうすればできますか?
簡単な説明
Lambda 関数を開発するときは、サポートされている Lambda ランタイムバージョンを選択します。特定のランタイムと互換性のある Lambda 関数と Layer を作成するには、次のいずれかを実行できます:
- AWS サーバーレスアプリケーションモデル (AWS SAM) を使用して、新しいリソースを自動的に作成します。
または、 - AWS SAM の基盤となる amazon/aws-sam-cli-build-image Docker イメージを使用して作成します。
詳細については、「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 コマンドリファレンス)
関連するコンテンツ
- 質問済み 6年前lg...
- 質問済み 7ヶ月前lg...
- 質問済み 7ヶ月前lg...
- 質問済み 9ヶ月前lg...
- 質問済み 7ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前