NLB (Network Load Balancer)の作成メモ


概要

NLB(Network Load Balancer)の作り方を確認した時のメモです。
確認用としてApacheを実行するEC2インスタンスを4つ作成(ap-northeast-1aに2つ、ap-northeast-1cに2つ)し、NLBでリクエストを分散させるようにします。

参考

最終的な構成

図のようにApacheをインストールしたEC2インスタンス(AP1 ~ AP4)はPrivateサブネットに配置して、直接インターネットからアクセスできないようにし、アクセスするにはロードバランサー(NLB)を介するようにします。
Publicサブネットに配置するEC2インスタンス(Bastion)は踏み台サーバとして利用し、ssh接続のみを許可します。

VPC

Elastic IPの割り当て

Privateサブネットに配置するEC2インスタンスがインターネットにアクセスできるようにNAT Gatewayを利用するので、事前にNAT Gateway用にEIPを1つ割り当てます。

スコープに”VPC”を選択します。

VPCの作成

VPCのダッシュボード上の[VPCの作成]ボタンをクリックします。
ここから作成を始めるとウィザード形式でVPCを作成することができます。

VPCのタイプを選択します。
今回はPublicとPrivateにサブネットを作成したいので2番目を選びます。

この画面でap-northeast-1aにPublicとPrivateのサブネットを作成しました。(VPC作成後にap-northeast-1cにPublicとPrivateのサブネットを追加します。)
また、NATゲートウェイには先に割り当てたEIPを設定します。

EC2の作成

踏み台サーバ

ローカルPCからssh接続するためのEC2インスタンスを、Publicサブネットのap-northeast-1aに作成します。
このEC2インスタンスからPrivateサブネットに作成するApache用のEC2インスタンスにssh接続します。

セキュリティグループ

自PCからのみssh接続できる設定にします。

httpサーバ

Privateサブネットのap-northeast-1a、ap-northeast-1cにそれぞれ1つずつEC2インスタンスを作成します。(最終的には2つずつ)
このEC2インスタンスは、Public DNS/IPを持たないので、インターネット側からは直接アクセスできません。

セキュリティグループ

踏み台サーバからのみssh接続、ロードバランサーからhttp接続できる設定にします。

踏み台サーバからssh接続し、httpサーバをインストール、起動します。

$ sudo yum update -y
$ sudo yum install -y httpd
$ sudo systemctl start httpd

確認用のページとして/var/www/html/index.htmlを作成します。
{privat ip}には、そのインスタンスのprivate ipを記述しました。

<html>
<head><title>{privat ip}</title></head>
<body>
<div>{privat ip}</div>
</body>
</html>

インスタンス内からcurlでアクセスしindex.htmlの内容が取得できることを確認します。

> curl http://localhost

NLB

ロードバランサーにはNLB(Network Load Balancer)を使用します。


ロードバランサーのアベイラビリティーゾーンは、Publicサブネットのap-northeast-1a、ap-northeast-1cを指定します。

Target Groupの作成

ターゲットの種類は”ip”を選択します。

ターゲット先にApacheをインストールしたEC2インスタンスのprivate ipを設定します。

ロードバランサーとターゲットグループの作成直後はステータスが"initial"ですが、

暫く(5,6分くらい)待つと設定が正しければ"healthy"に変わります。

NLBのDNS

ブラウザからロードバランサーのDNS名でアクセスできることを確認します。
DNS名はロードバランサーの説明欄で確認できます。

一度アクセスするとDNSがキャッシュされるので、その後はキャッシュが切れるまで同じサーバへアクセスが続きます。
キャッシュをクリアするには、Firefoxの場合Ctrl + Shift + Delを押します。

httpサーバの追加

Privateサブネットのap-northeast-1aとap-northeast-1cに、それぞれ1つずつEC2インスタンスを作成しhttpdをインストール、起動します。
追加したEC2インスタンスをターゲットグループに登録します。

Route 53

仮にRoute 53でxxxyyyzzz.comというドメイン名を登録し、www.xxxyyyzzz.comでアクセスできるようにするには、ドメインのAレコードにNLBのDNS名を登録します。

NLBのDNSをAレコードで登録

  • nameにwwwを入力
  • TypeはA - IPv4 addressのまま
  • Aliasにyesを選択
  • Alias TargetにNLBのDNSを選択

この内容で登録します。

登録が完了すると、すぐにwwww.xxxyyyzzz.comでアクセスすることができます。

補足

セッションマネージャー

この記事ではPublicサブネットに踏み台サーバを用意しましたが、AWS Systems Managerのセッションマネージャーを利用すると、ブラウザからPrivateサブネットのインスタンスにログインすることができます。

ログインしたいインスタンスを選択し[セッションの開始]ボタンをクリックします。

ssm-userというユーザーで開始されますが、ec2-userへスイッチすることもできます。

sh-4.2$ whoami
ssm-user
sh-4.2$ sudo su - ec2-user
Last login: Mon Sep 24 08:48:46 UTC 2018 on pts/0
Last failed login: Mon Sep 24 08:52:28 UTC 2018 on pts/0
There was 1 failed login attempt since the last successful login.
[ec2-user@ip-10-0-1-201 ~]$