質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

2回答

1498閲覧

Lambda上でnode.js + expressを動かしたい

tarotarotarotar

総合スコア43

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2023/06/22 06:04

実現したいこと

  • Lambda上でnode.js + expressを動かしたい(API gatewayを使って関数を実行する想定です)

前提

Lambda上でnode.js + expressを動かしたいのですが、Runtime.ImportModuleErrorというLambda上でテストをするとエラーが発生してしまい、動かすことができません。
アプリケーションの機能としては"Hello World"と出力するシンプルなものです。

発生している問題・エラーメッセージ

Lambda上でテスト実行時

{ "errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 'index'\nRequire stack:\n- /var/runtime/index.mjs", "trace": [ "Runtime.ImportModuleError: Error: Cannot find module 'index'", "Require stack:", "- /var/runtime/index.mjs", " at _loadUserApp (file:///var/runtime/index.mjs:997:17)", " at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1032:21)", " at async start (file:///var/runtime/index.mjs:1195:23)", " at async file:///var/runtime/index.mjs:1201:1" ] }

該当のソースコード

index.js

js

1const express = require("express"); 2const app = express(); 3 4app.get("/", (req, res) => { 5 res.send("Hello World"); 6}); 7 8exports.handler = (event, context, callback) => { 9 const server = app.listen(3000, () => { 10 console.log("Server started"); 11 }); 12}; 13

ローカルで作成したアプリケーションをzipにしてアップロードする形式を取っています。
ローカルで行ったことは以下です。

  • 作業ディレクトリを作成
  • npm init -y
  • npm install express
  • node_modules ディレクトリを含めて全てzip化

これをLambdaコンソールから上記のzipを取り込み、テストを実行しています。(テストはデフォルトのままです)

試したこと

node_modulesを外したりしましたが、同様にエラーでした。

補足情報(FW/ツールのバージョンなど)

node v16.17.1
express ^4.18.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

zipファイルの生成方法が誤っていたようでした。以下のコマンドで生成したところ、Lambda上で動くようになりました。
zip -r archive.zip .

macのfinder上でzipファイルを作成したのが誤っていたようです。

投稿2023/06/22 06:58

tarotarotarotar

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この回答はGPT-4による自動生成回答です

LambdaでExpressアプリケーションを実行する場合、aws-serverless-express パッケージを使用することをお勧めします。これにより、LambdaとAPI Gatewayとの間で適切なリクエストとレスポンスの変換が行われます。

まず、aws-serverless-express をインストールしてください。

bash

1npm install aws-serverless-express

次に、以下のように index.js を変更してください。

js

1const express = require("express"); 2const app = express(); 3const awsServerlessExpress = require("aws-serverless-express"); 4const server = awsServerlessExpress.createServer(app); 5 6app.get("/", (req, res) => { 7 res.send("Hello World"); 8}); 9 10exports.handler = (event, context) => { 11 awsServerlessExpress.proxy(server, event, context); 12};

これで、Lambda関数が正常に実行されるはずです。ただし、API Gatewayとの統合を設定する必要があります。API Gatewayで新しいAPIを作成し、Lambda関数をトリガーとして設定してください。その後、API Gatewayのエンドポイントを使用して、Expressアプリケーションにアクセスできます。

投稿2023/06/22 06:05

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarotarotarotar

2023/06/22 06:19

上記の通り実行しましたが結果は同じでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問