Lambda レイヤーの作成手順
概要
Lambda レイヤーのデプロイパッケージの作成後の基本的な Lambda レイヤーの作成手順をまとめました。
サンプルとしてこちらの記事で作成した Lambda レイヤーを使用します。
Lamda レイヤーについて
Lambda レイヤーの作成と共有 - AWS Lambda
ライブラリの依存関係をレイヤーに含める
Lambda ランタイムごとに、PATH 変数に /opt ディレクトリ内の特定のフォルダが含まれます。レイヤー .zip ファイルアーカイブに同じフォルダ構造を定義すると、関数コードはパスを指定しなくても、レイヤーコンテンツにアクセスできます。
上記の記述のように、Lambda レイヤーにアップロードする zip ファイルアーカイブに特定のディレクトリにライブラリなどの依存関係を含めておくだけで、パスを指定しなくてもそれを利用することができます。
Lambda レイヤーを使用すると、他の Lambda 関数とのコードの共有と責任の分離ができます。
個人的には、ちょっとでもデプロイパッケージが大きいと、Lmabda のコンソールでコードを修正できなくなるので、外部ライブラリを使用する時点で他の Lambda 関数と共有する・しない関係なく Lambda レイヤー化しています。
Lambda レイヤーの作成手順 ( AWS マネジメントコンソール編 )
Lambda レイヤーの作成
Lambda コンソールのナビゲーションから「レイヤー」を選択して、「レイヤー」ページを開き、「レイヤーの作成」を選択します。
Lambda レイヤーの 名前
と「互換性のあるランタイム - オプション」を入力、「デプロイパッケージ」のアップロードを行います。
「互換性のあるランタイム - オプション」は複数選択可能で、この Lambda レイヤーを利用する予定の Lambda 関数のランタイムを選択します。ここで選択したランタイムを使用している Lambda 関数に対して、Lambda レイヤーを追加することができます。
デプロイパッケージ ( .zip ファイル ) をアップロードします。
Amazon S3 を使用したアップロードを行う場合は、Amazon S3 に アップロードしたデプロイパッケージ ( .zip ファイル ) のオブジェクト URL を入力します。
Lambda 関数に Lambda レイヤーを追加
対象の Lambda 関数のコンソールの「コード」タブを選択し、「レイヤーの追加」を選択します。
「レイヤーソース」としてカスタムレイヤーを選択し、追加する Lambda レイヤーとバージョンを選択し、「追加」を選択します。
追加が完了です。
Lambda レイヤーの作成手順 ( AWS CLI 編 )
Lambda レイヤーの作成・更新
Lambda レイヤーを作成または更新する場合は、publish-layer-version
コマンドを使用します。
なお、デプロイパッケージ (.zip ファイルアーカイブ) のサイズ上限は 50 MB です。
デプロイパッケージ (.zip ファイルアーカイブ) が 50 MB 以下であれば、publish-layer-version
コマンドで直接アップロードできます。
50 MB を超える場合は、一旦 S3 にアップロードして、格納した場所を publish-layer-version
コマンドで指定します。
aws lambda publish-layer-version --layer-name jq_layer \
--zip-file fileb://jq_layer.zip \
--compatible-runtimes provided
aws s3 cp jq_layer.zip s3://<バケット名>
aws lambda publish-layer-version --layer-name jq_layer \
--content S3Bucket=<バケット名>,S3Key=jq_layer.zip \
--compatible-runtimes provided
Lambda 関数を新規に作成する際に Lambda レイヤーを追加する
Lambda 関数を作成する create-function
コマンドの --layer
オプションに追加したい Lambda レイヤーの ARN を指定します。
aws lambda create-function --function-name sample_function \
--handler function.handler \
--runtime provided \
--role arn:aws:iam::xxxxxxxxxxxxxxxxxx:role/lambda-role \
--zip-file fileb://function.zip \
--layers arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxxxxxxx::layer:jq_layer:1
aws s3 cp jq_layer.zip s3://<バケット名>
aws lambda create-function --function-name sample_function \
--handler function.handler \
--runtime provided \
--role arn:aws:iam::xxxxxxxxxxxxxxxxxx:role/lambda-role \
--content S3Bucket=<バケット名>,S3Key=jq_layer.zip \
--layers arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxxxxxxx::layer:jq_layer:1
作成済みの Lmabda 関数に Lambda レイヤーを追加する
作成済みの Lambda 関数の設定を更新する update-function-configuration
コマンドの --layer
オプションに追加したい Lambda レイヤーの ARN を指定します。
aws lambda update-function-configuration --function-name sample_function-runtime \
--layers arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxxxxxxx::layer:jq_layer:1
Lambda 関数を直接実行する
aws lambda invoke --function-name bash-runtime --payload '{"text":"Hello"}' response.txt
個人開発したサービス
個人開発したサービス