概要
NLB(Network Load Balancer)の作り方を確認した時のメモです。
確認用としてApacheを実行するEC2インスタンスを4つ作成(ap-northeast-1aに2つ、ap-northeast-1cに2つ)し、NLBでリクエストを分散させるようにします。
参考
- [AWS ドキュメント » Elastic Load Balancing » Network Load Balancers » Network Load Balancer とは] (https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/introduction.html)
- [AWS ドキュメント » Elastic Load Balancing » Network Load Balancers » Network Load Balancers » Network Load Balancer を作成する] (https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/create-network-load-balancer.html)
最終的な構成
図のように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接続します。
セキュリティグループ
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 ~]$