LoginSignup
10
12

More than 3 years have passed since last update.

Elastic Beanstalkで、Node.js+expressアプリを動かそう [ハマりポイント説明]

Last updated at Posted at 2019-12-25

注意

本内容は、Beanstalkのプラットフォームが。「Amazon Linux AMI Node.js プラットフォームバージョン」以前向けの内容です。
2020/05以降は、「Amazon Linux 2 のプラットフォームバージョン」になりますので、本内容は対象外になります。

🔶 はじめに

Lambdaの方が使い勝手がいいので、あまり使わないElastic Beanstalkですが、いざ使おうと思うと、いくつか躓くポイントがあるので、その点も含めて、Node.js+expressで作ったサンプルアプリを動かすまでの手順を紹介します。

🔷 Elastic Beanstalk

https://aws.amazon.com/jp/elasticbeanstalk/
Java、.NET、PHP、Node.js、Python、Ruby、Go、Dockerなどで作られたプログラムをデプロイ、実行する環境。
実態としては、EC2の上にApacheやNginx等のサーバーを立てて提供してくれる。

🔶 作業手順

大きくは以下の手順になります。

  1. Node.js+expressでアプリを用意する。
  2. ソースコード+node.jsモジュールをZIPファイルにまとめる。
  3. Elastic Beanstalk実行環境構築、デプロイ。
  4. 実行。

🔷 Node.js+expressでアプリを用意する

今回は、express myappコマンド作成される、サンプルアプリを使います。
ゴールとしては、Elastic Beanstalkにデプロイして、以下の画面が表示する事です。

スクリーンショット 2019-12-25 2.34.24.png

アプリの生成手順の詳細は以下を参照してください。

参考:Node.js + ExpressでREST API開発を体験しよう for Windows[準備編]

✅ ポイント1 : アプリ起動時のポート番号の変更

myappプロジェクトを生成したら、binフォルダ配下のwwwファイルを開き、以下のようにアプリ実行時のポート番号を、デフォルトの3000番から8081番に修正する。

bin/www
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('myapp:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

// var port = normalizePort(process.env.PORT || '3000'); ←3000ポートは使えない
var port = normalizePort(process.env.PORT || '8081'); // 起動時のポートを8081に変更
app.set('port', port);

Beanstalk環境のnginxは、デフォルトでアプリケーションの8081ポートへリクエストを転送するので、上記のように変更する必要があります。

参考:プロキシサーバーを設定する

🔷 ソースコード+Node.jsモジュールをZIPファイルにまとめる

Beanstalkのデプロイパッケージは、ソースコードに必要なNode.jsモジュールをインポートして、ZIPファイルにまとめて作成します。

✅ ポイント2 : Linux環境でnpm installを実行する

まず、Lambdaのトピックですが、以下のように紹介されています。

注意: ほとんどの Node.js モジュールはプラットフォームに依存しませんが、一部のモジュールは特定のオペレーティングシステム環境に対してコンパイルされます。Lambda は、Linux 環境で動作します。npm でモジュールをインストールする場合、zip ファイルを Linux 環境で構築して、正しいプラットフォームに対する依存関係が必ず含まれるようにすることをお勧めします。

参考:Node.js の Lambda デプロイパッケージを作成するには、どうすればよいですか?

Beanstalkも、実態はEC2(Amazon Linux)インスタンスなので、Linux環境でnpm installを実行する方が無難です。
やり方はいくつかありますが、おすすめはmyappプロジェクトをCloud9にアップロードして、そこでnpm installを実行して、再度ローカルにダウンロードするやり方です。
詳しくは以下を参照。

参考:Lambda関数にNode.jsモジュールを入れるなら、Cloud9が簡単でおすすめ

✅ ポイント3 : ZIPファイルはファイル指定して圧縮する

デプロイパッケージを作る際、生成したmyappプロジェクトフォルダ自体をZIPで圧縮すると、デプロイ時にエラーになります。
必ず、myappプロジェクトフォルダ配下のファイルを指定して、ZIPで圧縮してください。

スクリーンショット 2019-12-25 18.15.08.png

🔶 Elastic Beanstalk実行環境構築、デプロイ

Elastic Beanstalk
https://console.aws.amazon.com/elasticbeanstalk/

上記サイトを開き、[今すぐ始める]をクリック。
スクリーンショット 2019-12-25 19.27.59.png

ウェブアプリケーションの作成画面で、
1. アプリケーション名に、任意の名前をセットする。(今回は'test')
2. プラットフォームは、「Node.js」を選択する。
3. コードのアップロードで、myappプロジェクトのファイル一式をZIPで圧縮したものを選択する。
4. [アプリケーションの作成]ボタンをクリックする。
スクリーンショット 2019-12-25 19.22.25.png

以下の画面に遷移する。
暫く待つと実行環境が構築され、画面右上のURLリンクから、アプリにアクセスできるようになるが、この時点では設定が終わってないのでアプリに接続できません。
スクリーンショット 2019-12-25 19.25.24.png

✅ ポイント4 : Node.jsの起動コマンドを設定する

今回のNode.js製のアプリは、npm startコマンドで実行するようにpackage.jsonに設定されています。しかし、Elastic Beanstalkは指定が無ければ、app.jsserver.jsnpm startの順に実行する事になります。

参考:Node.js 環境の設定

そこで、最初にnpm startを実行するように設定します。

画面上部の「すべてのアプリケーション > test > Test-env...」の、testリンクをクリックする。

Test-envリンクをクリックする。
スクリーンショット 2019-12-25 19.50.37.png

画面左メニューの設定リンクをクリックして、ソフトウェアのカテゴリで[変更]ボタンをクリックする。
スクリーンショット 2019-12-25 19.51.38.png

ソフトウェアの変更画面のノードコマンドに、npm startをセットして、画面下部の[適用]ボタンをクリックする。
スクリーンショット 2019-12-25 19.55.54.png

🔶 実行

変更設定が適用されると、以下の画面が表示されるので、再度画面右上にあるURLのリンクをクリクする。
スクリーンショット 2019-12-25 20.00.10.png

expressのサンプルアプリが表示されたら成功です。
スクリーンショット 2019-12-25 20.10.28.png

🔶 まとめ

このように、Elastic BeanstalkでNode.js+expressアプリを動かそうとすると、ローカルで実行する時と違って、いくつか詰まるポイントがあります。
しかし、この部分をうまく対応したら、後は開発に専念できるので、ぜひ使ってみてください。

🔶 参考

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12