ものすごくはずかしい話ではあるのですが、同じミスを繰り返さないようにメモを残しておきます。
久しぶりに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のメニューを使っているのですが、
フォルダを圧縮するのでは無く、

フォルダの中身をすべて選択して圧縮。

これで、うまくいきました。すっかり忘れてました。