#はじめに
前回作成したサーバー環境をもう少し障害性、冗長性をアップさせた構成に変更したいと思います。構成図は以下のようになります。
#構成図
#変更内容
- EC2を2つ作成し、ロードバランサーの設置による冗長化
- RDSのMultiAZ構成(マスター、スレーブ)による自動フェイルオーバー
#作成手順
リソース名 | 備考 |
---|---|
VPC | |
サブネット | パブリックサブネット2つ、プライベートサブネット2つ作成。 |
インターネットゲートウェイ | |
ルートテーブル | |
EC2 ※ | AZを分けて2つ作成。 |
RDS ※ | エンジンはMySQL。MultiAZ構成。 |
ELB ※ | ALBを使用。作成したEC2をロードバランシング。 |
※ 作成後、接続確認を行う。 |
##サブネットの作成
パブリックサブネットとプライベートサブネットそれぞれ2つずつ作成します。
###1.パブリックサブネット
EC2インスタンスを設置するパブリックサブネットを作成します。
CIDRブロックの数値はこちらも構成図の範囲とします。AZをap-northeast-1a
とap-northeast-1c
に分けて作成します。
###2.プライベートサブネット
RDSを設置するプライベートサブネットを作成します。
##インターネットゲートウェイの作成
作成したVPC内のサーバがインターネットと接続するための出入口を設定します。
##ルートテーブルの作成
デフォルトでは同じVPC内のものしかアクセスできないため、ルート編集で設定したゲートウェイに紐づいているアクセスの通信を可能にします。
作成したインターネットゲートウェイをターゲットとして設定します。
このルートテーブルに2つのパブリックサブネットを紐付けます。
##EC2の作成
WEBサーバーが2つ必要なので、EC2を2つ作成します。
テスト用なのでAMI及びインスタンスタイプは無料利用枠を選択しています。
ネットワーク及びサブネットには作成したVPC及びパブリックサブネットを紐付けます。また、パブリックIPの自動割り当てを有効に変更します。
高度な詳細のユーザーデータ欄に以下を追記します。それによりEC2起動後に、webサーバーを起動させておくことができます。
#!/bin/bash
sudo yum update -y
sudo yum install httpd mysql update -y
sudo service httpd start
sudo chkconfig httpd on
新しいセキュリティグループを作成し、SSHとHTTPのポートを許可します。
新しいキーペアを作成しダウンロードすればEC2インスタンスの作成は完了です。
もう一つap-northeast-1c
側に作成するEC2を作成します。
##EC2へのSSH接続の確認
EC2インスタンスの状態がrunning
に変わったら起動成功なので、それぞれのEC2のIPv4パブリックIPを確認しておきます。
続いてEC2からSSHへの接続確認を行います。ターミナル画面を開き、先ほど作成したpemキーを.sshフォルダ
に移動させます。2つのEC2インスタンス、それぞれをSSH接続可能か確認します。
$ cp Downloads/test.pem .ssh/ #pemキーを.sshフォルダに移動
$ sudo chmod 600 ~/.ssh/test.pem #指定している鍵の権限が広すぎるため変更
Password:〇〇〇〇〇〇〇〇 #自身のPCのパスワード
$ ssh -i ~/.ssh/test.pem ec2-user@[IPアドレス] #SSH接続の実行
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 17 available
Run "sudo yum update" to apply all updates.
RDSの作成
DBサブネットグループの作成
セキュリティグループの作成
データベースの作成
作成したVPC、サブネットグループ、セキュリティグループを紐づけます。
今回は初期MySQLデータベースは不要なのでデータベース名は空白にし、その他の設定についてはデフォルトのままで作成します。
##EC2からRDSへの接続確認
EC2からRDSへの接続確認を行います。
$ mysql -h test-rds.cl0w7wsj1gla.ap-northeast-1.rds.amazonaws.com -u test -p #RDSのエンドポイントとRDS作成時のマスターユーザ名(test)を使用
Enter password:testpass #RDS作成時のパスワード
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.22-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> #exitで抜けます
以上の画面が表示されれば、接続完了です。
ELBの作成
ロードバランサーの名称を入力し、今回は外部接続用のためインターネット向け
を選択しておきます。
作成したVPCを選択し、2つのEC2が設置してあるパブリックサブネットを紐付けます。
ELB機能確認
実際にロードバランサーが機能しているか確認をします。まず、htmlファイルを2つのEC2インスタンスに作成します。
$ sudo vi /var/www/html/index.html
<html>
Hello EC2!AZ-1a #別のEC2はAZ-1cにする。
</html>
次に、ELBのDNS名を確認し、そこからEC2にアクセスします。
表示された画面のリロードを繰り返すと、アクセスされるEC2が変更されます。そのため、次のように表示されるhtmlファイルが異なります。
以上で、今回の構成図が完成となります。
##その他
今回の構成以外の対策としては次の内容が考えられます。
セキュリティ対策
######・セキュリティグループの設定
通信を許可する送信元IPアドレスやプロトコルを必要なものだけに限定
######・CloudTrailの利用
ユーザーの行動ログを取得する等の監視
######・CloudWatchの利用
利用するリソースに対してメトリクスやログの収集、追跡
可用性対策
######・Auto-Scalingの利用
EC2に高負荷がかかった場合、新たなEC2が自動的に作成されるよう設定
######・Route53を利用したフェイルオーバー
同じ構成のスタンバイを別リージョンに設置
######・リードレプリカの利用
RDSへの読み込み負荷を分散