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

所要時間2分
0

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

簡単な説明

Lambda 関数を開発するときは、サポートされている Lambda ランタイムバージョンを選択します。特定のランタイムと互換性のある Lambda 関数と Layer を作成するには、次のいずれかを実行できます:

詳細については、「Lambda レイヤーの作成と共有」 を参照してください。

解決策

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

以下の説明では、コーディング言語として Python を使用し、例として Linux ベースのコンピュータープラットフォームを使用します。他のコーディング言語やプラットフォームの場合は、それに応じて手順を調整してください。

コンピューターに Docker をインストールする

LinuxWindows、または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.63.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.63.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 コマンドリファレンス)

AWS公式
AWS公式更新しました 3年前