負荷分散および耐障害性の向上などに利用される AWS ELB (Elastic Load Balancing) の設定例を記載します。リージョンは Tokyo です。
こちらを参考に以下のように設定します。EIP の設定は今回は不要です。ELB 経由でアクセスするためです。
myinstance-000[1-2] に対するアクセスを振り分ける ELB を用意します。EC2メニューの Load Balancers にある Create Load Balancer から作成します。以下のように設定します。
今回の例では、VPC 外から ELB の TCP 2222 番へのアクセスを EC2 インスタンス TCP 22 番に割り振るように設定しています。
外部から TCP 2222 へのアクセスが可能なものを選択します。必要であれば既存のものを編集または新規作成します。
EC2 インスタンス TCP 22 への Ping が実行される設定にします。自動入力された内容のままで問題ありません。
myinstance-000[1-2] を登録します。更に以下のようにタグ付けして完了です。
ELB に割り当てられた DNS Name に対して VPC 外部から SSH 接続します。
$ ssh ec2-user@myelb-2137309337.ap-northeast-1.elb.amazonaws.com -i mykeypair.pem -p 2222 \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
数回繰り返すと 192.168.1.4 および 192.168.2.4 の両ホストにバランシングされていることが確認できます。ヘルスチェックが通らないと ELB はインスタンスを OutOfService と判断してパケットの転送を行わないことに注意します。今回の場合 22 番ポートで待ち受けている sshd を停止するとヘルスチェックに通らなくなり ELB はインスタンスを InService でないと判断して切り離します。
ELB に視認性のよいドメインを与えるためには myelb-2137309337.ap-northeast-1.elb.amazonaws.com に対する CNAME を Route53 などの DNS に登録します。
「VPC 外部からのアクセスを振り分ける ELB」の手順で以下の項目にチェックを入れると内部 ELB が作成できます。
Create an internal load balancer: いいえ
Listener Configuration の Load Balancer Protocol で HTTPS または SSL を選択すると証明書および秘密鍵のアップロードを求められます。ELB が SSL 通信に対応して証明書の配布や通信の暗号化/復号化を行える必要があるためです。バックエンドサーバに対して復号化した内容を HTTP で転送する場合は ELB が SSL アクセラレータとして機能することになります。バックエンドサーバは暗号化および復号化の処理を行う必要がなくなり負荷が軽減します。そうではなく、バックエンドサーバに対して HTTPS で転送することもできます。この場合、暗号化は ELB にアップロードされた秘密鍵で行うのではなくバックエンドサーバの証明書から取り出した公開鍵で行います。クライアントから ELB への通信を一旦復号化して、更にバックエンドサーバの証明書で暗号化するため低速になります。また、ELB で一旦復号化するためクライアントが ELB との通信で使用している証明書に対応した秘密鍵をバックエンドサーバにインストールする必要がない点にも注意します。バックエンドサーバー認証を行わない場合はバックエンドサーバはいわゆるオレオレ証明書でもよいということになります。
ELB に接続されたインスタンスを再起動すると、自動的には ELB に再接続されません。明示的に再度接続する必要があります。