この記事の目次
AWSにおけるNode.jsの活用
AWSなどのクラウド開発でWEBサービスを構築する場合、サービスの一部にインタラクティブな機能を盛り込むことは、珍しいことではなくなってきました。
この記事では、インタラクティブなWEBサービスと不可分であるリアルタイム処理を実現するための手段として、Node.jsを活用する方法についてお伝えしていきます。
Node.jsとは?
Node.jsは一言で言うと、JavaScriptをサーバサイドで動作させるための実行環境です。
ご存知の通り、JavaScriptは現在HTMLやCSSと並んで、WEBサイトを構築する上では欠かすことのできない言語(CSSは言語ではありませんが)となっています。
以前のJavaScriptは、ブラウザ上で動作するプログラム即ちクライアントサイドの言語でした。しかし、Node.jsの登場によりクライアントサイドとサーバサイドで同じ言語を使って開発することが可能となりました。
更にはWEBサーバとしての機能を備えており、同時に大量トラフィックを処理できることから、リアルタイムWEBサービスに大いに活用されています。
AWS EC2インスタンスへのインストール
AWSでNode.jsを利用する方法はいくつかありますが、代表的なのがEC2インスタンスを作成して、その中にNode.jsをインストールする方法です。以下で順を追って見ていきましょう。
EC2インスタンスへの接続
今回は、AWSのLinuxサーバに作成したEC2インスタンスの中にインストールしていきます。まずは、EC2インスタンスに接続します。
EC2に指定したキーペアを使ってec2-userユーザにてEC2インスタンスにSSH接続します。ec2-userは、LinuxのEC2インスタンス作成時にデフォルトで作成されるユーザです。
ssh -i {KeyPairのファイルパス} ec2-user@{EC2インスタンスのパブリックIPアドレス}
初回ログインの場合は「Are you sure you want to continue connecting (yes/no)?」という確認メッセージが表示されるので、「yes」と入力すれば接続が確立されます。
事前準備
Node.jsのインストールに際して、いくつか事前準備が必要です。
Linuxのパッケージ管理ツールyumをupdateして、ライブラリ環境を最新化します。
sudo yum update
Nodeモジュールのコンパイルに使用するg++コンパイラと、バージョン管理システムGitをインストールします。
sudo yum -y install git gcc-c++
nvm(ノードバージョンマネージャー)をインストールします。
git clone https://github.com/creationix/nvm.git ~/.nvm
シェルスクリプトを実行して、nvmを有効にします。
source ~/.nvm/nvm.sh
Node.jsのインストール
nvmを使用してNode.jsをインストールします。次のコマンドを実行すると、インストール可能なバージョンが一覧表示されます。
nvm ls -remote
インストールには、次のコマンドを実行します。なお、バージョン番号(「7.0.0」など)の代わりに「node」と入力すると、最新バージョンがインストールされます。
nvm install {インストールしたいバージョン番号}
以下のコマンドを実行し、バージョン情報が表示されればインストール成功です。
node -v
作成したプログラムは、「node {プログラム名}」で実行できます。
EC2インスタンスの管理
簡単な動作例として、EC2インスタンスの詳細説明を取得してみます。
任意の名前でNode.jsモジュールを作成し、コーディングします。まず、requireメソッドでAWS SDKモジュールを読み込んで、リージョンを設定します。
var AWS = require('aws-sdk');
AWS.config.update({region: 'REGION'});
AWS.EC2サービスオブジェクトを作成します。
var ec2 = new AWS.EC2({apiVersion: 'XXXX-XX-XX'});
インスタンスを起動させないためパラメータに「DryRun: true」を指定して、describeInstancesメソッドよりインスタンス情報を取得します。
var params = {
DryRun: true
};
ec2.describeInstances(params, function(err, data) {
if (err) {
console.log("Error", err.stack);
} else {
console.log("Success", JSON.stringify(data));
}
});
Lambda関数として実行する
AWSでNode.jsを利用するもう1つの方法として、AWS Lambdaを使用し、Node.jsをLambda関数として実行する方法について解説します。以下で手順に沿って進めていきます。
実行ロールの作成
AWS Lambdaは、AWS上でサーバレスな実行環境を提供するサービスです。つまり、何かしらの処理を実行したいプログラムを開発すれば、WEBサーバやアプリケーションサーバ無しで実行できるということです。
Lambda関数は、 AWS Identity and Access Management(IAM)ロールの実行ロールを使用するので、まずはこちらは作成します。なお、既に関数開発用の実行ロールを持っている場合は、この工程は飛ばしてください。
AWSのサービスよりIAMを選択し、左側のダッシュボードメニューより[ロール]をクリックします。
[ロールの作成]をクリックし、[信頼されたエンティティ]より「AWSサービス」を選択、[ユースケースの選択]より「Lambda」を選択します。
[アクセス許可]で「AWSLambdaBasicExecutionRole」を選択し、任意のロール名を入力してロールを作成します。
Lambda関数の作成
Node.jsのランタイムを呼び出すLambda関数を作成します。Lambdaマネジメントコンソールより[関数の作成]をクリックします。
[名前]に任意の関数名を入力、[ランタイム]はNode.jsのランタイムを選択し、[実行ロール]は「既存のロール」より先ほど作成した実行ロールを選択します。
[Designer]セクション及び[関数コード]セクションはデフォルトのままで次に進み、[関数の作成]をクリックすれば「index.js」というファイルが作成されます。
テストイベントの設定
テストイベントを使って、関数のテストが実行できます。
コンソール上部の[テスト]をクリックして、[イベント名]に任意の名前を入力、テキストエリアにイベント内容を入力して[作成]をクリックします。
[テスト]をクリックすると関数が呼び出され、実行結果が表示されます。
ハンドラ関数について
上記のindex.jsからエクスポートされるハンドラ関数について、説明を加えておきます。
ハンドラ関数には、event(オブジェクト型)、context(オブジェクト型)、callback(ファンクション型)という3つの引数が渡されます。
eventは、呼び出し元の情報を含むオブジェクトで、呼び出すサービスに応じた構造のパラメータなどを保持します。
contextは、実行時の環境などを保持するオブジェクトです。
callbackは、エラーとレスポンスの2つの引数を持つコールバック関数で、第二引数の内容がLambdaの戻り値となります。
Node.jsを使ってみよう
今やWEBアプリケーション開発に欠かせないJavaScriptですが、リアルタイム処理が得意なNode.jsを使うことで、インタラクティブなWEBサービスがより簡単に構築できます。
今回ご紹介したように、AWSへの導入も短いステップで可能ですので、興味のある方は是非試してみてください。