AWSで基本的なサーバー環境を構築してみました。~その2~


はじめに

前回作成したサーバー環境をもう少し障害性、冗長性をアップさせた構成に変更したいと思います。構成図は以下のようになります。

構成図

変更内容

  • EC2を2つ作成し、ロードバランサーの設置による冗長化
  • RDSのMultiAZ構成(マスター、スレーブ)による自動フェイルオーバー

作成手順

リソース名 備考
VPC
サブネット パブリックサブネット2つ、プライベートサブネット2つ作成。
インターネットゲートウェイ
ルートテーブル
EC2 ※ AZを分けて2つ作成。
RDS ※ エンジンはMySQL。MultiAZ構成。
ELB ※ ALBを使用。作成したEC2をロードバランシング。

※ 作成後、接続確認を行う。

VPCの作成

CIDRブロックの数値は構成図で示している範囲とします。

サブネットの作成

パブリックサブネットとプライベートサブネットそれぞれ2つずつ作成します。

1.パブリックサブネット

EC2インスタンスを設置するパブリックサブネットを作成します。

CIDRブロックの数値はこちらも構成図の範囲とします。AZをap-northeast-1aap-northeast-1cに分けて作成します。

2.プライベートサブネット

RDSを設置するプライベートサブネットを作成します。

インターネットゲートウェイの作成

作成したVPC内のサーバがインターネットと接続するための出入口を設定します。

インターネットゲートウェイの名称を入力します。

作成したVPCに紐付けます。

ルートテーブルの作成

デフォルトでは同じ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

デフォルトのまま次へ進みます。

EC2の名称を設定します。

新しいセキュリティグループを作成し、SSHとHTTPのポートを許可します。

入力内容に誤りがないか確認し、EC2を起動します。

新しいキーペアを作成しダウンロードすればEC2インスタンスの作成は完了です。

もう一つap-northeast-1c側に作成するEC2を作成します。

こちらのEC2をパブリックサブネットの1c側に設置します。

先程作成したセキュリティグループを選択します。

確認して、起動します。

キーペアも同様のものを選択します。

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と紐付けます。

作成したプライベートサブネット2つを紐付けます。

セキュリティグループの作成

データベースの作成

MySQLを選択します。

MultiAZ構成としますので、次の部分をチェックします。

設定欄を入力します。

作成したVPC、サブネットグループ、セキュリティグループを紐づけます。

今回は初期MySQLデータベースは不要なのでデータベース名は空白にし、その他の設定についてはデフォルトのままで作成します。

EC2からRDSへの接続確認

作成した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の作成

ALBを選択します。

ロードバランサーの名称を入力し、今回は外部接続用のためインターネット向けを選択しておきます。

作成したVPCを選択し、2つのEC2が設置してあるパブリックサブネットを紐付けます。

EC2と同様のセキュリティグループを選択します。

ルーティングについてはデフォルトのまま進めます。

ターゲットを作成した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への読み込み負荷を分散