みかづきブログ・カスタム

基本的にはちょちょいのほいです。

関数をzipファイルにまとめてLambdaにデプロイする 📂

ものすごくはずかしい話ではあるのですが、同じミスを繰り返さないようにメモを残しておきます。

久しぶりにAlexaスキルを更新しようと思った時の話です。
かつては、Lambdaへの関数のデプロイは Apex を使っていたのですが、いまとなってはリポジトリがアーカイブされているので、別の手段で更新しようと思いました。
順当に考えれば、 AWS CLI 一択なのですが、いつも使っているパソコンではなかったので、環境に依存しない方法として、関数を zipにまとめてデプロイ してしまうことにしました。

docs.aws.amazon.com

いざ、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のメニューを使っているのですが、
フォルダを圧縮するのでは無く、

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

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