けっこうハマったので忘備録として記事にしておきます。
AWSのテュートリアルはところどころ不親切な箇所があり、肝心な箇所での重要な説明が無かったり、うまくいかないときの対処方については書いていません。
AIアシスタントの「Amazon Q」との禅問答と、過去の経験から解決策が見出されました。
何にハマったのか
「AWS Elastic Beanstalk Developer Guide」にある
「Step 3: Deploy a new version of your application」
に記載してある通りに、アプリのサンプルコードをダウンロードし、
ローカルで修正して「ZIPしなおし」て、手順通りにアップロードしたわけです。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note01.png)
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note02.png)
新しいコードのデプロイが開始されたのでワクワクして進捗を見ていたわけです。
下のイベント画像は下から上に向かって時系列が積み上がります。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note03.png)
何?このエラーは?(下から4番目の)
Instance deployment failed to generate a ‘Procfile’ for Node.js. Provide one of these files: ‘package.json’, ‘server.js’, or ‘app.js’. The deployment failed.
いやいや待って、「package.json」も「app.js」もあるけど?
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note04.png)
Amazon Qに訊いてみた
AWSのAIアシスタント「Amazon Q」が画面右横に控えていますが、現時点では英語しか通じません。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note06-2.png)
訊いた内容:「Elastic Beanstalkのデプロイでこんなエラー起きたんだけど、どうしたらいいの?」
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note07.png)
Qの回答「package.json, server.js, app.jsのいずれかがないとダメだお」
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note08.png)
訊いた内容「package.jsonもapp.jsもあるけど、何がいけないの?」
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note09.png)
Qの回答「package.jsonとapp.jsがZIPのルート階層にあることを確認してください。」
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note10.png)
訊いた内容「やりかた教えて」
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note11.png)
Qの回答「GGRKS」「オマイラのコンテンツのルートでzip -r myapp zip *」
ああ、思い出しました。去年、AWS CDKでElastic Beanstalkにコンテンツデプロイのテュートリアルやったときにやってましたよ、このZIPの仕方。
何がダメだったのか
更新したアプリのZIPの仕方がダメだったんです。
例えば、作業用ディレクトリ「work」内に、アプリのプロジェクトフォルダ「nodejs」があったとします。
筆者は、workディレクトリ上で、フォルダ「nodejs」をZIPして「nodejs.zip」なるファイルを作成してデプロイしようとしていました。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note12.png)
これがダメだったんです。
Elastic Beanstalk用の正しいZIPの仕方
アプリのプロジェクトフォルダ内で、いちいちサブフォルダやファイルを指定してZIPしましょう。
zip -r ../nodejs-v2.zip .
こんな感じでコマンド実行すれば、ドットで始まる隠しフォルダや隠しファイルも含まれます。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note13-1.png)
筆者的には、違和感だらけで何だかな~という感じです。趣味の問題なんでしょうかね?
というか、テュートリアルにちゃんと書いといてくださいよ。
Windowsのエクスプローラでやるならこんな感じ↓↓↓
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note05.png)
この場合には、プロジェクトフォルダ内にZIPファイルが生成されます。
これで作成したZIPをデプロイすれば成功します。
![](https://macocci7.net/blog/wp-content/uploads/2024/01/aws_eb_deploy_note14.png)
以上、おつかれさまでした。
コメント