レイヤーを使用して、最新バージョンの AWS SDK for JavaScript を Node.js Lambda 関数に統合する方法を教えてください。
最終更新日: 2020 年 4 月 30 日
AWS Lambda 実行環境には、AWS SDK 最新バージョンの特定の機能がありません。Node.js Lambda 関数のレイヤーを使用して、最新バージョンの AWS SDK for JavaScript を統合する方法を教えてください。
簡単な説明
Lambda 実行環境に組み込まれている AWS SDK のバージョンは常に最新状態ではないため、SDK の新機能の一部が利用できない場合があります。Lambda レイヤーを使用して、最新バージョンの AWS SDK を Lambda 関数デプロイパッケージに統合します。
注意: この解決策は、関数のデプロイパッケージのサイズを増やします。Lambda ストレージリソースの詳細については、AWS Lambda の制限を参照してください。
次の手順では、例として Node.js 10.x ランタイムを使用します。Node.js およびその他の言語のランタイム、および Lambda で現在使用している AWS SDK バージョン一覧については、AWS Lambda ランタイムを参照してください。
解決方法
注意: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
(オプション) AWS SDK のバージョンを確認する
AWS SDK の最新バージョンを確認するには、以下の手順を実行します。
2. 関数コードを更新して、AWS SDK のバージョンを出力します。Node.js 10x ランタイムを使用している場合は、次のサンプルコードを使用できます。
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
3. 関数を実行します。関数は AWS SDK のバージョンを返します。
4. 関数から返される AWS SDK のバージョンと、AWS SDK ドキュメントで特定されている最新バージョンを比較します。
最新の AWS SDK バージョンをインストールしてパッケージ化
注意: デプロイパッケージは Lambda 環境と互換性がある必要があります。次のステップでは、AWS Lambda ランタイムで指定されている通り、ランタイムに一致するオペレーティングシステムを使用することをお勧めします。
Lambda と互換性のあるローカル開発環境で、以下を実行します。
1. 作業ディレクトリを作成します。
mkdir -p aws-sdk-layer/nodejs
2. 作業ディレクトリに変更します。
cd aws-sdk-layer/nodejs
3. AWS SDK の最新バージョンをインストールします。
npm install aws-sdk
4. レイヤーにアップロードする .zip ファイルを作成します。
zip -r ../package.zip ../
5. (オプション) インストールした AWS SDK のバージョンを確認します。
cat package-lock.json
出力は次のようになります。
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.633.0",
...
レイヤーを作成して関数に追加する (AWS CLI)
注意: Lambda コンソールを使用してレイヤーを作成し、関数に追加することもできます。コンソールの手順については、次のセクションを参照してください。
1. AWS CLI から、Lambda publish-layer-version コマンドを実行します。
注意: node_sdk を、レイヤーに付ける名前に置き換えます。必要に応じて、「マイレイヤー」をレイヤーの説明に置き換えます。
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes nodejs10.x --zip-file fileb://../package.zip
出力で、LayerVersionArn を書き留めます。詳細については、レイヤーの管理を参照してください。
2. Lambda update-function-configuration コマンドを実行します。
注意: my-function を、ご使用の関数の名前に置き換えてください。arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 を前のステップの LayerVersionArn に置き換えます。
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1
詳細については、レイヤーを使用するように関数を設定するを参照してください。
レイヤーを作成して関数に追加する (Lambda コンソール)
1. Lambda コンソールのレイヤー ページを開きます。
2. レイヤーページで、[レイヤーを作成] を選択します。
3. [レイヤーを作成] ページで、次の手順を実行します。
[名前] にレイヤーの名前を入力します。
(オプション) 説明 - オプションに、レイヤーの説明を入力します。
[.zip ファイルをアップロード] を選択します。
[アップロード] を選択し、デプロイパッケージの .zip ファイルを選択します。
[互換性のあるランタイム - オプション] で、互換性のあるランタイムを 1 つ以上選択します。Node.js 10x の例では、[Node.js 10x] を選択します。
(オプション) ライセンス - オプションに、レイヤーのソフトウェアライセンス情報を入力します。
[作成] をクリックします。
4. Lambda コンソールの関数ページで関数を選択します。
5. [デザイナー] で、関数名の下にある [レイヤー] を選択します。
6. [レイヤー] で、[レイヤーを追加する] を選択します。
7. 関数にレイヤーを追加ページの [レイヤー選択] で、[ランタイム互換レイヤーのリストから選択] を選択します。
8. [互換性のあるレイヤー] で、以下の操作を行います。
[名前] で作成したレイヤーを選択します。
[バージョン] で、[1] を選択します。
9. [追加] を選択します。
10. [保存] を選択します。
(オプション) AWS SDK のバージョンを確認する
Lambda 関数をもう一度実行します。関数は、npm を使用して以前インストールした AWS SDK の最新バージョンを返します。
使用している AWS SDK の CHANGELOG ファイルで最新バージョンを確認できます。たとえば、GitHub の AWS SDK for JavaScript 用 Changelog を参照してください。
関連情報
プログラミングモデル (AWS Lambda デベロッパーガイド)