AWS Elastic Beanstalk
開発者ガイド

Express アプリケーションを Elastic Beanstalk にデプロイする

このセクションでは、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) と Git を使用して Elastic Beanstalk にサンプルアプリケーションをデプロイした後、Express フレームワークを使用するようにアプリケーションを更新する手順を説明します。

前提条件

このチュートリアルでは、Node.js 言語とそのパッケージマネージャである npm、Express ウェブアプリケーションフレームワークが必要です。これらのコンポーネントをインストールし、ローカル開発環境を設定するための詳細については、「Node.js 開発環境をセットアップする」を参照してください。

注記

このチュートリアルでは、AWS SDK for Node.js をインストールする必要はありません。これは「Node.js 開発環境をセットアップする」でも説明されています。

また、このチュートリアルでは、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) も必要です。EB CLI をインストールおよび設定する詳しい手順については、セットアップスクリプトを使用した EB CLI のインストール および EB CLI の設定 を参照してください。

Git の初期化

前提条件となる開発環境の設定は、node-express フォルダーの Express プロジェクト構造にあります。Express プロジェクトを生成していない場合は、次のコマンドを実行します。詳細については、「Express のインストール」を参照してください。

~/node-express$ express && npm install

次に、このフォルダに Git リポジトリを設定します。

Git リポジトリを設定するには

  1. Git リポジトリを初期化します。Git がインストールされていない場合は、Git ダウンロードサイトからダウンロードします。

    ~/node-express$ git init
  2. .gitignore という名前のファイルを作成し、次のファイルとディレクトリを追加します。これらのファイルはリポジトリへの追加から除外されます。このステップは必須ではありませんが、行うことをお勧めします。

    node-express/.gitignore

    node_modules/ .gitignore .elasticbeanstalk/

Elastic Beanstalk 環境の作成

アプリケーションの EB CLI リポジトリを設定し、Node.js プラットフォームを実行する Elastic Beanstalk 環境を作成します。

  1. eb init コマンドを使用してリポジトリを作成します。

    ~/node-express$ eb init --platform node.js --region us-east-2 Application node-express has been created.

    このコマンドは、.elasticbeanstalk という名前のフォルダに、アプリケーションの環境作成用の設定ファイルを作成し、現在のフォルダに基づいた名前で Elastic Beanstalk アプリケーションを作成します。

  2. eb create コマンドを使用して、サンプルアプリケーションを実行する環境を作成します。

    ~/node-express$ eb create --sample node-express-env

    このコマンドは、Node.js プラットフォームと以下のリソース用にデフォルト設定で負荷分散環境を作成します。

    • EC2 インスタンス – 選択したプラットフォームでウェブアプリケーションを実行するように設定された Amazon Elastic Compute Cloud (Amazon EC2) 仮想マシン。

      各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、特定のソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、Apache または nginx のいずれかをウェブアプリケーションの前にリバースプロキシとして配置します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供し、アクセスログとエラーログを生成します。

    • インスタンスセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するように設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブアプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

    • ロードバランサー – アプリケーションを実行するインスタンスにリクエストを分散するように設定された Elastic Load Balancing ロードバランサー。ロードバランサーにより、インスタンスを直接インターネットに公開する必要もなくなります。

    • ロードバランサーセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するように設定された Amazon EC2 セキュリティグループ。このリソースでは、インターネットからの HTTP トラフィックが、ロードバランサーに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

    • Auto Scaling グループ – インスタンスが終了されたか利用不可になった場合にそのインスタンスを置き換えるように設定された Auto Scaling グループ。

    • Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。

    • Amazon CloudWatch アラーム – 環境内のインスタンスの負荷をモニタリングし、負荷が高すぎたり低すぎたりするとトリガーする 2 つの CloudWatch アラーム。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

    • AWS CloudFormation スタック – Elastic Beanstalk はAWS CloudFormation を使用して環境内のリソースを起動し、設定の変更を伝達します。リソースは、AWS CloudFormation コンソールに表示できるテンプレートで定義されます。

    • ドメイン名 – ウェブアプリケーションまでのルートとなるドメイン名であり、subdomain.region.elasticbeanstalk.com の形式です。

  3. 環境の作成が完了したら、eb open コマンドを使用して、デフォルトのブラウザーでその環境の URL を開きます。

    ~/node-express$ eb open

アプリケーションの更新

サンプルアプリケーションの環境を作成したら、その環境を使用するようにアプリケーションを更新できます。このステップでは、Express フレームワークを使用するようサンプルアプリケーションを更新します。

Express を使用するようアプリケーションを更新するには

  1. ローカルコンピュータで、ソースバンドルの最上位ディレクトリに .ebextensions ディレクトリを作成します。この例では、node-express/.ebextensions を使用します。

  2. ノードコマンドを "npm start" に設定する設定ファイルを追加します。

    node-express/.ebextensions/nodecommand.config

    option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: "npm start"

    詳細については、「設定ファイル (.ebextensions) による高度な環境のカスタマイズ」を参照してください。

  3. ファイルをステージします。

    ~/node-express$ git add . ~/node-express$ git commit -m "First express app"
  4. 変更をデプロイします。

    ~/node-express$ eb deploy
  5. 環境が緑色で示されていて準備完了したら、URL を再表示して正しく動作することを確認します。ウェブページに "[Welcome to Express]" が表示されます。

次に、静的ファイルを処理し、新しいページを追加するように Express アプリケーションを更新します。

静的ファイルを設定し、新しいページを Express アプリケーションに追加します。

  1. 以下の内容の 2 番目の設定ファイルを追加します。

    node-express/.ebextensions/staticfiles.config

    option_settings: aws:elasticbeanstalk:container:nodejs:staticfiles: /public: /public

    この設定では、プロキシサーバーに public フォルダのファイルを、アプリケーションの /public のパスで提供するように設定します。プロキシから静的にファイルを提供すると、アプリケーションへの負荷を減らすことができます。

  2. node-express/app.js で静的マッピングをコメントアウトします。このステップは必須ではありませんが、静的マッピングが正しく設定されていることを確認するのに適したテストです。

    // app.use(express.static(path.join(__dirname, 'public')));
  3. 更新したファイルをローカルリポジトリに追加し、変更をコミットします。

    ~/node-express$ git add .ebextensions/ app.js ~/node-express$ git commit -m "Serve stylesheets statically with nginx."
  4. 追加 node-express/routes/hike.js.次の内容を入力します。

    exports.index = function(req, res) { res.render('hike', {title: 'My Hiking Log'}); }; exports.add_hike = function(req, res) { };
  5. node-express/app.js を更新して新しく 3 つの行を含めます。

    まず、次の行を追加して、このルートに require を追加します。

    hike = require('./routes/hike');

    ファイルは次のスニペットのようになります。

    var express = require('express'); var path = require('path'); var hike = require('./routes/hike');

    その後、次の 2 つの行を node-express/app.jsvar app = express(); の後に追加します。

    app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);

    ファイルは次のスニペットのようになります。

    var app = express(); app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);
  6. node-express/views/index.jadenode-express/views/hike.jade にコピーします。

    ~/node-express$ cp views/index.jade views/hike.jade
  7. ファイルをローカルリポジトリに追加し、変更をコミットし、更新したアプリケーションをデプロイします。

    ~/node-express$ git add . ~/node-express$ git commit -m "Add hikes route and template." ~/node-express$ eb deploy
  8. 数分後、環境が更新されます。環境が緑色で示されていて準備が完了したら、ブラウザを再表示し、URL の最後に hikes を追加して (http://node-express-env-syypntcz2q.elasticbeanstalk.com/hikes など)、正しく動作することを確認します。

    タイトルが [My Hiking Log] のウェブページが表示されます。

クリーンアップ

Elastic Beanstalk での作業が完了したら、 環境を終了できます。

eb terminate コマンドを使用して、お客様の環境とその環境に含まれるすべてのリソースを終了します。

~/node-express$ eb terminate The environment "node-express-env" and all associated instances will be terminated. To confirm, type the environment name: node-express-env INFO: terminateEnvironment is starting. ...