レイヤーを使用して、最新バージョンの 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 の最新バージョンを確認するには、以下の手順を実行します。

1.    Lambda コンソールで関数を作成します

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 を参照してください。