ec2内にローカルサーバーを立ち上げる
まずはnode.jsとnpmをインストールします。
公式の手順を参照してさくっと完了。
一応コマンドで確認しておきます。
node -v
npm -v
適当なディレクトリを作成し、expressをインストール。サーバ用jsファイルも作成します。
mkdir sample
npm i express
vi index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello');
});
app.listen(3000, () => console.log("Server started on port 3000"));
ポート3000番でリクエストを受け付けてHelloと返すだけのめちゃくちゃシンプルなAPサーバが出来上がりました。これでEc2内のサーバ準備は完了です。
ターゲットグループの準備
EC2の用意が出来たらターゲットグループを用意します。
ターゲットグループの作成画面から以下のように設定して次へボタンを押します。
- ターゲットタイプ:インスタンス
- ターゲットグループ名:任意
- プロトコル:HTTP、ポート3000(EC2の3000ポートでサーバーを立てているため)
- その他:デフォルトのまま
次のページでは公開したいEC2を選択し、ポートを指定して保留として以下を含めるボタンを押下、ターゲットを確認欄にインスタンスが追加されたのを確認してターゲットグループを作成ボタンを押します。
ロードバランサ―の準備
さて、次はいよいよロードバランサ―ですが、そもそもロードバランサ―ってなんだよという人はこの辺りを是非ご参照ください。
ロードバランサ―タイプ
早速ロードバランサ―の設定をしましょう。
EC2ダッシュボードからロードバランサ―を選択して新規作成します。今回はHTTP(S)で接続するのでApplication Load Balancer(ALB)を選択。
ネットワークマッピング
ロードバランサ―の名前(なんでもいい)を決めたらネットワークマッピングを設定。
VPCはEC2と同じものを、マッピングは適当に2つ選んでおきます。
リスナーとルーティング
次はリスナーとルーティングの設定です。
ALBに対してHTTPリクエストが来た時のアクションを設定します。デフォルトアクションには先ほど登録したターゲットグループを設定しておきます。
SSL証明書を用意しておけば簡単にHTTPSでの接続設定もできます。(この記事を参照)
セキュリティグループ設定
EC2のセキュリティグループ設定
まずはEC2のセキュリティグループを設定します。
インバウンドルールはポート3000へのリクエストと、ヘルスチェック用のHTTPリクエストのみを受け付ければいいので、以下のようになります。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
カスタムTCP | TCP | 3000 | ALPのセキュリティグループ |
HTTP | TCP | 80 | ALPのセキュリティグループ |
EC2へアクセスするのはALPだけになるので接続元(ソース)もロードバランサ―のみに絞って他から接続されないようにしています。
アウトバウンドルールは無しで大丈夫です。
ALPのセキュリティグループ設定
続いてALPのセキュリティグループの設定もしていきます。
インバウンドルールは以下の通り。クライアントからのHTTP(S)でのリクエストを受けるので全てのソース元からのHTTP(S)通信を許可します。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
HTTP(S) | TCP | 80(443) | 0.0.0.0/0 |
アウトバウンドルールはEC2内のサーバに対するリクエスト、ヘルスチェックでのHTTPリクエストを行うため、下記のように設定します。
タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|
カスタムTCP | TCP | 3000 | EC2のセキュリティグループ |
HTTP | TCP | 80 | EC2のセキュリティグループ |
これでセキュリティグループの設定は完了です。
ここまで設定したらEC2内のWebサーバへALPを介してHTTPS接続が可能になっているはずです。
あとがき
ロードバランサ―?ターゲットグループ?何それ美味しいの?状態だった私ですが意外と簡単に設定できるもんなんだなぁという所感であります。