Amazon Elastic Beanstalkで「Failed to find package.json」エラーに苦しめられる


今日はAmazon Elastic Beanstalk(アマゾン エラスティック ビーンスターク)のエラーの話です。最近これに手を出し始めて色々試行錯誤しています。

Elastic Beanstalkですが、自分で適当に作ったサンプルアプリ(今回の場合Node.js)をZipでUploadする機能があります。

Elastic Beanstalk Management Console

真ん中のUpload and DeployでZipをUploadすると勝手にアプリが走り出します。しかしなぜか正常に起動しない、という事態に陥り、結構ハマってしまいました。

以下が表示されるエラーです。

Failed to find package.json. Node.js may have issues starting. Verify package.json is valid or place code in a file named server.js or app.js.

package.jsonが無いって言っていますが、ちゃんと置いたし、package.jsonのValidatorでもちゃんと検証OKだし、server.jsもあるし、なぜだ・・・と悩みに悩みました。

原因はZipの作り方が悪いという単純なオチでした。デプロイでよくあるミスですね。仕事含めて過去に2回くらい遭遇したことがあります・・・。

言い訳させてもらうと、Mac標準の圧縮に慣れてなくて、複数選択 -> 圧縮しても上位フォルダが作成されてしまうことを知らなかったためです!

Mac標準でZip圧縮した場合、以下のような構成になります。hogeフォルダができてしまうのがダメなようです。

hoge.zip
 └hoge
  ├package.json
  ├server.js
  └etc ...

Win Archiver Liteという圧縮アプリをインストールして圧縮。今度は以下のような構成になりました。

hoge.zip
 ├package.json
 ├server.js
 └etc ...

これをアップロードしたところ、正しく起動することを確認しました。