関数へのレイヤーの追加
Lambda レイヤーは、補助的なコードやデータを含む .zip ファイルアーカイブです。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。
このセクションでは、Lambda 関数にレイヤーを追加する方法を説明します。レイヤーの概念的な情報とその使用を検討する理由の詳細については、レイヤーによる Lambda 依存関係の管理 を参照してください。
レイヤーを使用するよう Lambda 関数を設定する前に、以下を実行する必要があります。
-
レイヤーバージョンで GetLayerVersion API を呼び出す権限があることを確認する。AWS アカウント の関数については、ユーザーポリシーでこの権限を持っている必要があります。別のアカウントでレイヤーを使用するには、そのアカウントの所有者は、リソースベースのポリシーで自分のアカウントにアクセス許可を付与する必要があります。例については、「他のアカウントに Lambda レイヤーへのアクセス許可を付与する」を参照してください。
Lambda 関数には最大 5 つのレイヤーを追加できます。関数とすべてのレイヤーの解凍後の合計サイズは、解凍後のデプロイパッケージのサイズクォータである 250 MB を超えることはできません。詳細については、「Lambda クォータ」を参照してください。
関数は、すでに追加したレイヤーバージョンであれば、そのレイヤーバージョンが削除された後でも、またはレイヤーへのアクセス権限が取り消された後でも、そのレイヤーバージョンを引き続き使用できます。しかし、削除されたレイヤーバージョンを使用して新しい関数を作成することはできません。
注記
関数に追加するレイヤーが、関数のランタイムおよび命令セットアーキテクチャと互換性があることを確認します。
関数へレイヤーを追加するには (コンソール)
Lambda コンソールの [関数ページ]
を開きます。 -
設定する関数を選択します。
-
[Layers] (レイヤー) で [Add a layer] (レイヤーの追加) をクリックします。
-
[レイヤーを選択する] で、レイヤーソースを選択します。
-
[AWS レイヤー] または [カスタムレイヤー] のレイヤーソースの場合、プルダウンメニューからレイヤーを選択します。[Version (バージョン)]のプルダウンメニューからレイヤーバージョンを選択します。
-
[ARN を指定する] レイヤーソースの場合、テキストボックスに ARN を入力して [確認] を選択します。次に、[Add] (追加) を選択します。
-
レイヤーを追加する順序は、Lambda がレイヤーのコンテンツを実行環境にマージする順序です。レイヤーのマージ順序はコンソールを使用して変更できます。
関数のレイヤーのマージ順序を更新するには (コンソール)
Lambda コンソールの [関数ページ]
を開きます。 -
設定する関数を選択します。
-
[Layers] (レイヤー) で [Edit] (編集) をクリックします。
-
レイヤーの 1 つを選択します。
-
[Merge earlier (前にマージする)] または [Merge later (後にマージする)] を選択して、レイヤーの順序を調整します。
-
[Save] を選択します。
レイヤーはバージョン管理されています。各レイヤーバージョンのコンテンツは変更できません。レイヤーの所有者は更新されたコンテンツを提供するため、新しいレイヤーバージョンをリリースすることができます。関数に添付されているレイヤーバージョンを更新するには、コンソールを使用します。
関数のレイヤーバージョンを更新するには (コンソール)
-
Lambda コンソールの [Layers (レイヤー)] ページ
を開きます。 -
バージョンを更新したいレイヤーを選択します。
-
[Functions using this version] (このバージョンを使用する関数) タブを選択します。
-
変更したい関数を選択してから、[Edit] (編集) を選択します。
-
[Layer version] (レイヤーバージョン) では、変更するレイヤーのバージョンを選択します。
-
[Update functions] (関数を更新) をクリックします。
AWS アカウント間で、関数のレイヤーバージョン更新することはできません。
関数からレイヤーコンテンツにアクセスする
Lambda 関数にレイヤーを含めると、Lambda は関数実行環境で/opt
ディレクトリにレイヤーコンテンツを抽出します。Lambda は、関数によって一覧表示された順序 (低から高) でレイヤーを抽出します。Lambda は同じ名前のフォルダをマージします。複数のレイヤーに同じファイルが表示された場合は、関数は最後に抽出されたレイヤーのバージョンを使用します。
各 Lambda ランタイムは、PATH
変数に特定の /opt
ディレクトリフォルダを追加します。関数コードはパスを指定しなくても、レイヤーコンテンツにアクセスできます。Lambda 実行環境のパス設定の詳細については、「定義されたランタイム環境変数」を参照してください。
レイヤー作成時にライブラリをどこに含めるかに関しては、各 Lambda ランタイムのレイヤーパス を参照してください。
Node.js または Python ランタイムを使用している場合は、Lambda コンソールの組み込みコードエディターを使用することができます。レイヤーとして追加した任意のライブラリを、現在の関数にインポートできるはずです。
レイヤー情報の確認
関数のランタイムと互換性のあるレイヤーをアカウントで検索するには、ListLayers API を使用します。たとえば、次の list-layers
AWS Command Line Interface (CLI) コマンドを使用することができます。
aws lambda list-layers --compatible-runtime python3.9
次のような出力が表示されます:
{ "Layers": [ { "LayerName": "my-layer", "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LatestMatchingVersion": { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2023-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "python3.9", "python3.10", "python3.11", ] } } ] }
アカウント内のすべてのレイヤーをリスト化するには、--compatible-runtime
オプションを省略します。レスポンスの詳細には、各レイヤーの最新バージョンが表示されます。
ListLayerVersions API を使用して、最新バージョンのレイヤーを取得することもできます。たとえば、次の list-layer-versions
CLI コマンドを使用することができます。
aws lambda list-layer-versions --layer-name my-layer
次のような出力が表示されます:
{ "LayerVersions": [ { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2023-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "java11" ] }, { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1", "Version": 1, "Description": "My layer", "CreatedDate": "2023-11-15T00:27:46.592+0000", "CompatibleRuntimes": [ "java11" ] } ] }