【やろうとしていること】
ローカルでnode.jsアプリを作り、それをzip化してlambdaにアップロードして実行させようとしています。
アプリにはtypeormをインストールをし、RDSと接続しています。
【現在の状況】
ローカルではマイグレーションやCRUDは問題なくできたので、次のステップで、そのアプリをLambdaにアップロードしました。(zipファイルで)
GUIにてテストを実行したところ、下記のエラーメッセージがでました。
{ "errorType": "Error", "errorMessage": "Must use import to load ES Module: /var/task/index.js\nrequire() of ES modules is not supported.\nrequire() of /var/task/index.js from /var/runtime/UserFunction.js is an ES module file as it is a .js file whose nearest parent package.json contains \"type\": \"module\" which defines all .js files in that package scope as ES modules.\nInstead rename index.js to end in .cjs, change the requiring code to use import(), or remove \"type\": \"module\" from /var/task/package.json.\n", "trace": [ "Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /var/task/index.js", "require() of ES modules is not supported.", "require() of /var/task/index.js from /var/runtime/UserFunction.js is an ES module file as it is a .js file whose nearest parent package.json contains \"type\": \"module\" which defines all .js files in that package scope as ES modules.", "Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove \"type\": \"module\" from /var/task/package.json.", "", " at Object.Module._extensions..js (internal/modules/cjs/loader.js:1089:13)", " at Module.load (internal/modules/cjs/loader.js:937:32)", " at Function.Module._load (internal/modules/cjs/loader.js:778:12)", " at Module.require (internal/modules/cjs/loader.js:961:19)", " at require (internal/modules/cjs/helpers.js:92:18)", " at _tryRequire (/var/runtime/UserFunction.js:75:12)", " at _loadUserApp (/var/runtime/UserFunction.js:95:12)", " at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)", " at Object.<anonymous> (/var/runtime/index.js:43:30)", " at Module._compile (internal/modules/cjs/loader.js:1072:14)" ] }
わかないこと、実現したいこと
どのあたりに原因があるのかわからない。
テストでエラーの発生なく、DBの値を表示させたい。
【コード】
内容としては、id=1のデータを取得するだけのものです。
js
1// 実行されるファイルとしては、./index.js 2import { createConnection, getRepository, getConnection } from "typeorm"; 3import { User } from "./entity/User"; 4 5exports.handler = async (event) => { 6 createConnection({ 7 type: "mysql", 8 host: "*******************", 9 port: 3306, 10 username: "admin", 11 password: "password", 12 database: "DBNAME", 13 entities: [User], 14 synchronize: true, 15 logging: false, 16 }) 17 .then((connection) => { 18 const userRepository = getRepository(User); 19 const userA = userRepository.findOne(1); 20 return userA; 21 }) 22 .catch((error) => console.log(error)); 23}; 24
json
1// package.json 2{ 3 "name": "new-typeorm-project", 4 "version": "0.0.1", 5 "description": "Awesome project developed with TypeORM.", 6 "devDependencies": { 7 "ts-node": "3.3.0", 8 "@types/node": "^8.0.29", 9 "typescript": "3.3.3333" 10 }, 11 "dependencies": { 12 "typeorm": "0.2.37", 13 "reflect-metadata": "^0.1.10", 14 "mysql": "^2.14.1" 15 }, 16 "type": "module", 17 "scripts": { 18 "start": "ts-node src/index.ts" 19 } 20} 21
【やってみたこと】
エラーメッセージ等調べて下記のことを試してみました。
・ファイル名をjs⇨tsに変えてみた。
⇨変化なし。
・package.json
の"type": "module"
を"type": "commonjs"
に変更すると、下記のようにエラーメッセージが変わりました。
{ "errorType": "Runtime.UserCodeSyntaxError", "errorMessage": "SyntaxError: Cannot use import statement outside a module", "trace": [ "Runtime.UserCodeSyntaxError: SyntaxError: Cannot use import statement outside a module", " at _loadUserApp (/var/runtime/UserFunction.js:98:13)", " at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)", " at Object.<anonymous> (/var/runtime/index.js:43:30)", " at Module._compile (internal/modules/cjs/loader.js:1072:14)", " at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)", " at Module.load (internal/modules/cjs/loader.js:937:32)", " at Function.Module._load (internal/modules/cjs/loader.js:778:12)", " at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)", " at internal/main/run_main_module.js:17:47" ] }
あなたの回答
tips
プレビュー