ものすごくはずかしい話ではあるのですが、同じミスを繰り返さないようにメモを残しておきます。
久しぶりにAlexaスキルを更新しようと思った時の話です。
かつては、Lambdaへの関数のデプロイは Apex を使っていたのですが、いまとなってはリポジトリがアーカイブされているので、別の手段で更新しようと思いました。
順当に考えれば、 AWS CLI 一択なのですが、いつも使っているパソコンではなかったので、環境に依存しない方法として、関数を zipにまとめてデプロイ してしまうことにしました。
いざ、zipファイルを作成し、デプロイ。
alexa-skills-kit-start-sessionでテストを実行してみると、
{ "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:996:17)", " at async Object.UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1031:21)", " at async start (file:///var/runtime/index.mjs:1194:23)", " at async file:///var/runtime/index.mjs:1200:1" ] }
コケました。
index.mjsが見つからないようです。
「あれ、Node.jsのバージョンは16.xだし、index.jsで良いはずだけどな」と思ってみたり、一応、index.jsをindex.mjsにリネームしてあげなおしてみたり、色々調査をしていたのですが、原因は至極単純で、ディレクトリをzipファイルにしていたことでした。
zipファイルを作成する際、Macのメニューを使っているのですが、
フォルダを圧縮するのでは無く、
フォルダの中身をすべて選択して圧縮。
これで、うまくいきました。すっかり忘れてました。