Lambda レイヤー
Amplify は、ライブラリ依存関係を含むレイヤーを関数に追加する機能を提供しています。Lambda レイヤーを使用すると、関数コードをその依存関係から分離でき、複数の関数間での共有コンポーネントの管理が容易になり、デプロイメントパッケージのサイズが削減されます。
Lambda レイヤーを関数に追加するには、以下の手順に従ってください。
-
まず、AWS で Lambda レイヤーを作成して設定してください。これは AWS コンソールまたは AWS CLI を使用して実行できます。レイヤーの作成に関するガイダンスについては、Lambda レイヤーの作成に関する AWS ドキュメントを参照してください。
-
レイヤーが作成され AWS で利用可能になったら、以下に示すように Amplify プロジェクトで参照できます。
defineFunctionにlayersプロパティを指定します。例えば:amplify/functions/my-function/resource.tsimport { defineFunction } from "@aws-amplify/backend";export const myFunction = defineFunction({name: "my-function",layers: {"@aws-lambda-powertools/logger":"arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:12",},});Lambda レイヤーはキー/バリューペアのオブジェクトで表現されます。キーはレイヤーからエクスポートされるモジュール名で、値はレイヤーの ARN です。キー(モジュール名)はモジュール依存関係を外部化するために使用され、Lambda 関数にバンドルされないようにします。最大 5 個のレイヤーを関数にアタッチでき、それらは関数と同じリージョンにある必要があります。
または、レイヤーをmyLayer:1として指定することもできます。ここでmyLayerはレイヤーの名前で、1はレイヤーのバージョンです。例えば:amplify/functions/my-function/resource.tsimport { defineFunction } from "@aws-amplify/backend";export const myFunction = defineFunction({name: "my-function",layers: {"some-module": "myLayer:1"},});Amplify は、既存のアカウント ID とリージョンを使用して、これを完全なレイヤー ARN 形式
arn:aws:lambda:<region>:<account-id>:layer:myLayer:1に自動的に変換します。 -
次に、関数ハンドラーで局所的にインストールされたモジュールを使用します。
amplify/functions/my-function/handler.tsimport { Logger } from "@aws-lambda-powertools/logger";import type { Handler } from "aws-lambda";const logger = new Logger({ serviceName: "serverlessAirline" });export const handler: Handler = async (event, context) => {logger.info("Hello World");};
レイヤーの作成と管理の詳細については、Lambda レイヤーに関する AWS ドキュメントを参照してください。