AWS Lambda ランタイム環境には、最新バージョン AWS SDK の一部の機能が含まれていません。AWS SDK for JavaScript の最新バージョンを Node.js Lambda 関数に統合したいです。
簡単な説明
AWS SDK の最新バージョンを Lambda 関数のデプロイパッケージに統合するには、Lambda レイヤーを作成します。次に、そのレイヤーを関数に追加します。
注: Node.js バージョン 16 以前の Lambda Node.js ランタイムには、AWS SDK for JavaScript バージョン 2 が含まれています。Node.js 18 バージョン以降の Lambda Node.js ランタイムには、AWS SDK for JavaScript バージョン 3 が含まれています。詳細については、AWS SDK for JavaScript ドキュメントを参照してください。
Lambda が使用するランタイムと AWS SDK バージョンの完全なリストについては、「Lambda ランタイム」を参照してください。
注: 次の解決策では、関数のデプロイパッケージのサイズが増加します。Lambda ストレージクォータの詳細については、「Lambda クォータ」を参照してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
(オプション) 関数で使用する AWS SDK のバージョンを確認する
次の手順を実行します。
注: この方法は、Node.js バージョン 16 以前にのみ使用してください。
-
Lambda コンソールで関数を作成します。
-
関数のコードを更新し、関数を呼び出す際に関数で使用する AWS SDK のバージョンを返します:
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
-
関数を呼び出します。
-
関数が返す AWS SDK のバージョンと、AWS SDK ドキュメントに記載されている AWS SDK の最新バージョンを比較します。
AWS SDK の最新バージョンをインストールし、パッケージ化する
注: デプロイパッケージは、使用する Lambda ランタイムと互換性がある必要があります。ランタイムには、Lambda ランタイムで指定されているオペレーティングシステム (OS) と同じ OS を使用することをおすすめします。
Lambda と互換性のある開発環境で、次の手順を実行します。
-
次のコマンドを実行してディレクトリを作成します。
mkdir -p aws-sdk-layer/nodejs
-
次のコマンドを実行し、該当するディレクトリに切り替えます。
cd aws-sdk-layer/nodejs
-
使用している Node.js ランタイムバージョン用の AWS SDK をインストールします。
Node.js 16 以前 (AWS SDK バージョン 2)
AWS SDK バージョン 2 の最新バージョンをインストールするには、Amazon Linux 2 と互換性のあるインスタンスを使用して次のコマンドを実行します。
npm install aws-sdk
詳細については、「チュートリアル: Amazon EC2 インスタンスで Node.js を設定する」を参照してください。
注: Lambda リソースを開発する際は、Amazon Linux 2 環境の使用をおすすめします。
または、
開発の OS に Windows または macOS を使用している場合は、Docker を使用して次のコマンドを実行します。
docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"
注: コマンドを実行する前に、Docker のウェブサイトで入手できる最新版の Docker を使用していることを確認してください。
Node.js 18 以降 (AWS SDK バージョン 3)
AWS SDK バージョン 3 の最新バージョンをインストールする方法については、「SDK for JavaScript のインストール」を参照してください。
-
.zip ファイルを作成し、Lambda レイヤーにアップロードします。
zip -r ../package.zip ../
-
(オプション) インストールした AWS SDK のバージョンを確認します。
cat package-lock.json
出力例
{ "requires": true, "lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.888.0",
...
AWS CLI または Lambda コンソールを使用して Lambda レイヤーを作成し、関数に追加する
AWS CLI
-
AWS SDK の最新バージョンを含む Lambda レイヤーを新たに作成するには、次の publish-layer-version コマンドを実行します:
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region
注: node_sdk を実際のレイヤー名に、My layer をそのレイヤーの説明に置き換えます。さらに、compatible-runtimes 値を、使用するランタイムに置き換え、region を使用している関数とレイヤーが置かれている AWS リージョンに置き換えます。
-
次のステップで使用するために、出力の LayerVersionArn 値をコピーします。
-
レイヤーを関数に追加するには、次の update-function-configuration コマンドを実行します:
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region
注: 実際のものでそれぞれ、my-function を関数名に、arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 を出力の LayerVersionArn 値に、region をリージョンに置き換えます。
詳細については、「レイヤーを使用して Lambda の依存関係を管理する」を参照してください。
Lambda コンソール
Lambda レイヤーを作成し、Lambda コンソールで関数に追加するには、次の手順を実行します。
- Lambda コンソールで [レイヤー] ページを開きます。
- **[レイヤーの作成]**を選択します。
- [名前] に新しいレイヤーの名前を入力します。
- [.zip ファイルのアップロード] を選択し、デプロイパッケージの .zip ファイル名を選択します。
- [作成] を選択します。
- Lambda コンソールで [関数] ページを開き、レイヤーを追加する関数の名前を選択します。
- [レイヤー] で [レイヤーを追加] を選択します。
- [レイヤーの選択] で [カスタムレイヤー] を選択します。
- [カスタムレイヤー] ドロップダウンリストを選択し、該当するカスタムレイヤーを選択します。
- [追加] を選択します。
(オプション) セットアップをテストする
「(オプション) 関数で使用する AWS SDK のバージョンを確認する」セクションの手順を実行し、関数を呼び出します。この関数は、使用している AWS SDK のバージョンを返します。
関連情報
AWS Lambda 関数を使用する際のベストプラクティス
Node.js 用の Lambda デプロイパッケージをビルドする方法を教えてください
Lambda Python 関数用のレイヤーを作成する方法を教えてください