レイヤーを使用して最新バージョンの AWS SDK for JavaScript を Node.js の Lambda 関数に統合するにはどうすればよいですか?

最終更新日: 2021 年 5 月 12 日

AWS Lambda ランタイム環境には、AWS SDK 最新バージョンの特定の機能がありません。Node.js Lambda 関数のレイヤーを使用して、最新バージョンの AWS SDK for JavaScript を統合する方法を教えてください。

簡単な説明

最新バージョンの AWS SDK を Lambda 関数のデプロイパッケージに統合するには、Lambda レイヤーを作成して関数に追加します。AWS Command Line Interface (AWS CLI) または Lambda コンソールのいずれかを使用すると、Lambda レイヤーを作成して関数に追加できます。

次の手順では、Node.js 14x ランタイムを例として使用します。ランタイムと、Lambda が現在使用している AWS SDK バージョンの詳細なリストについては、「AWS Lambda ランタイム」を参照してください。

注意: 次の解決策は、関数のデプロイパッケージのサイズを増やします。Lambda のストレージ制限の詳細については、「Lambda のクォータ」を参照してください。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

(オプション) 関数が使用している AWS SDK のバージョンを確認する

関数が使用している AWS SDK のバージョンを確認するには、次の手順を実行します。

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

2.    関数が呼び出されたときに、使用している AWS SDK のバージョンを返すように、関数のコードを更新します。

使用している AWS SDK のバージョンを Lambda 関数に出力させる、Node.js のコード

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 ランタイムで指定されている通り、ランタイムと同じオペレーティングシステムを使用することをお勧めします。たとえば、互換性のある Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。

Lambda と互換性のあるローカル開発環境で、次を実行します。

1.    次のコマンドラインインターフェイス (CLI) のコマンドを実行して、作業ディレクトリを作成します。

mkdir -p aws-sdk-layer/nodejs

2.    次のコマンドを実行して作業ディレクトリに移動します。

cd aws-sdk-layer/nodejs

3.    AWS SDK の最新バージョンをインストールするには、Amazon Linux 2 と互換性のあるインスタンスを使用して、次のコマンドを実行します。

npm install aws-sdk

詳細については、「チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ」を参照してください。

注: Lambda リソースを開発するときは、Amazon Linux 2 環境を使用することをおすすめします。

- または -

開発に Windows または macOS オペレーティングシステムを使用している場合は、Docker を使用して次のコマンドを実行できます。

docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:14" /bin/sh -c "npm install aws-sdk; exit"

注: コマンドを実行する前に、Docker の最新バージョンを使用していることを確認してください

4.    次のコマンドを実行して、Lambda レイヤーをアップロードするための .zip ファイルを作成します。

zip -r ../package.zip ../

5.    (オプション) 次のコマンドを実行して、インストールした AWS SDK のバージョンを確認します。

cat package-lock.json

コマンドの出力例

{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "aws-sdk": {
      "version": "2.888.0",
...

AWS CLI を使用して Lambda レイヤーを作成し、関数に追加するには

1.    使用する AWS SDK の最新バージョンを含む、新しい Lambda レイヤーを作成するには、次の publish-layer-version AWS CLI コマンドを実行します。

注意: node_sdk を、レイヤーに付ける名前に置き換えます。マイレイヤーをレイヤーの説明に置き換えます。compatible-runtimes の値を、使用しているランタイムに置き換えます。region の値を、関数とレイヤーがある AWS リージョンに置き換えます。

aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes nodejs14.x --zip-file fileb://../package.zip --region <specify a region>

次の手順を完了するには、コマンド出力に含まれている LayerVersionArn の値が必要です。

2.    関数にレイヤーを追加するには、次の update-function-configuration コマンドを実行します。

注: my-function は、お使いの関数の名前に置き換えてください。arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 を、publish-layer-version コマンドの出力に含まれる、LayerVersionArn の値に置き換えます。

aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region <specify a region>

詳細については、レイヤーを使用するように関数を設定するを参照してください。

Lambda コンソールを使用して Lambda レイヤーを作成し、関数に追加するには

1.    Lambda コンソールでレイヤー ページを開きます。

2.    [レイヤーの作成] を選択します。それから、次を実行します。
[名前] に新しいレイヤーの名前を入力します。
(オプション) 説明 - オプションに、レイヤーの説明を入力します。
[.zip ファイルをアップロード] を選択します。
[アップロード] を選択します。次に、デプロイパッケージの .zip ファイルの名前を選択します。
[互換性のあるランタイム - オプション] で、互換性のあるランタイムを 1 つ以上選択します。この記事の例では、Node.js 14X です。
(オプション) ライセンス - オプションに、レイヤーに適用可能なソフトウェアライセンスの情報を入力します。
[作成] を選択します。

3.    Lambda コンソールで関数ページを開きます 。次に、レイヤーを追加する関数の名前を選択します。

4.    [関数の概要] の下で、[レイヤー] を選択します。

5.    [レイヤーの追加] を選択します。

6.    [レイヤーの選択] の下で、[カスタムレイヤー] を選択します。それから、次を実行します。
作成したレイヤーの名前を選択します。
[バージョン] で、使用するレイヤーのバージョンを選択します。このサンプルの場合は 1 です。
[追加] を選択します。

(オプション) セットアップをテストする

(オプション) AWS SDK のバージョンを確認する」セクションの手順に従って、関数を呼び出します。関数が、使用している AWS SDK のバージョンを返します。

使用している AWS SDK の CHANGELOG ファイルで、AWS SDK の最新バージョンを確認することもできます。詳しくは、GitHub の AWS SDK for JavaScript 用 Changelog を参照してください。