スキップしてコンテンツを表示

Node.js で Lambda コードを実行する際「Cannot find module」または「Cannot find Package」というエラーが発生する場合の解決方法を教えてください。

所要時間2分
0

Node.js で AWS Lambda コードを実行する際、「Cannot find module」または「Cannot find Package」というエラーが発生します。

簡単な説明

Node.js コードで指定したライブラリが Lambda 環境で見つからない場合は、次のいずれかのエラーが発生します。これらのエラーは、Node.js ライブラリの一部で、Lambda が事前にパッケージ化されていないことが原因で発生します。

CommonJS でモジュールが見つからない場合、次のエラーが発生します。 Runtime.ImportModuleError: Error: Cannot find module.

JavaScript ES6 でモジュールが見つからない場合、次のエラーが表示されます。 Error [ERR_MODULE_NOT_FOUND]: Cannot find package.

解決策

これらのエラーを解決するには、Node.js コードで使用するライブラリを含めたデプロイパッケージまたは Lambda レイヤーを作成します。

Node.js ランタイム 16 以前では、Lambda は階層化された JavaScript ES モジュールの依存関係をサポートしていません。デプロイには依存関係を含める必要があります。Lambda は、Node.js 20 用の JavaScript ES モジュールの依存関係をサポートしています。

デプロイパッケージではなく Lambda レイヤーを作成すると、そのレイヤーを複数の Lambda 関数で再利用できます。各 Lambda ランタイムは、特定の /opt ディレクトリフォルダを PATH 変数に追加します。レイヤーが同じフォルダ構造を使用している場合、Lambda 関数のコードはパスを指定せずにそのレイヤーのコンテンツにアクセスできます。

重要: Node.js 用にインポートするライブラリは、nodejs/node_modules というフォルダ構造内にある必要があります。

Lambda がサポートするランタイムの基盤であるオペレーティングシステム (OS) と同じ OS に Lambda レイヤーを作成することをおすすめします。たとえば、最新バージョンの Node.js は Amazon Linux 2023 Amazon マシンイメージ (AMI) を基盤とします。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Node.js ライブラリ用の Lambda レイヤーを作成するには、次の手順を実行します。

  1. Amazon Linux 2 AMI から Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成します

  2. publish-layer-version API を呼び出すアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを作成します

  3. IAM ロールを Amazon EC2 インスタンスにアタッチします
    注: 完了すると、EC2 インスタンスに、publish-layer-version API コールで Lambda レイヤーをアップロードするアクセス許可が付与されます。

  4. SSH を使用して EC2 インスタンスに接続します

  5. Node.js をインストールします。

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash$ . ~/.nvm/nvm.sh
    nvm install node
    
  6. nodejs フォルダを作成します。

    mkdir nodejs
    
  7. aws-xray-sdk ライブラリを nodejs フォルダにインストールします。

    cd nodejs$ npm init  ***answer all queries for initialization that create a package.json file***
    npm install --save aws-xray-sdk
    

    注: aws-xray-sdk というライブラリ例は、インポートする実際の Node.js ライブラリに置き換えます。

  8. aws-xray-sdk ライブラリ用の zip アーカイブを作成します。

    zip -r layer.zip nodejs
    

    注: aws-xray-sdk ライブラリは、Node.js レイヤーに必要なフォルダ形式 (nodejs/node_modules) になっています。

  9. Lambda レイヤーを発行するには、次の publish-layer-version コマンドを実行します。

    aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region your-region
    

    注: your-region は、お使いの AWS リージョンに置き換えます。

コードに ECMAScript 6 (ES6) モジュールまたは CommonJS モジュールを追加する方法については、「JavaScript ES6/CommonJS 構文」を参照してください。

関連情報

Lambda デプロイパッケージをアップロードする際、「permission denied」または「unable to import module」エラーが発生する場合の解決方法を教えてください

Node.js 用の Lambda デプロイパッケージを作成する方法を教えてください

AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ