Help us understand the problem. What is going on with this article?

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

はじめに

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

構成図

スクリーンショット 2020-03-24 15.31.26.png

変更内容

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

作成手順

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

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

VPCの作成

VPC作成①.png

CIDRブロックの数値は構成図で示している範囲とします。
スクリーンショット 2020-03-18 12.39.40.png

サブネットの作成

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

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

EC2インスタンスを設置するパブリックサブネットを作成します。
サブネット作成①外部用.png

CIDRブロックの数値はこちらも構成図の範囲とします。AZをap-northeast-1aap-northeast-1cに分けて作成します。
スクリーンショット 2020-03-18 12.48.21.png

スクリーンショット 2020-03-18 12.50.51.png

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

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

スクリーンショット 2020-03-18 12.52.44.png

スクリーンショット 2020-03-18 12.53.26.png

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

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

インターネットゲートウェイの名称を入力します。
スクリーンショット 2020-03-18 13.38.08.png

作成したVPCに紐付けます。
スクリーンショット 2020-03-18 13.39.42.png

スクリーンショット 2020-03-18 13.40.27.png

ルートテーブルの作成

デフォルトでは同じVPC内のものしかアクセスできないため、ルート編集で設定したゲートウェイに紐づいているアクセスの通信を可能にします。
ルートテーブル作成①.png

こちらも作成したVPCに紐付けます。
スクリーンショット 2020-03-18 14.20.58.png

ルートの編集を行います。
スクリーンショット 2020-03-18 14.22.45.png

作成したインターネットゲートウェイをターゲットとして設定します。
スクリーンショット 2020-03-18 14.24.13.png

このルートテーブルに2つのパブリックサブネットを紐付けます。
スクリーンショット 2020-03-18 14.25.08.png

スクリーンショット 2020-03-18 14.26.27.png

EC2の作成

WEBサーバーが2つ必要なので、EC2を2つ作成します。
EC2作成①.png

テスト用なのでAMI及びインスタンスタイプは無料利用枠を選択しています。
EC2作成②.png
EC2作成③.png

ネットワーク及びサブネットには作成したVPC及びパブリックサブネットを紐付けます。また、パブリックIPの自動割り当てを有効に変更します。
スクリーンショット 2020-03-18 16.05.07.png

高度な詳細のユーザーデータ欄に以下を追記します。それによりEC2起動後に、webサーバーを起動させておくことができます。

#!/bin/bash
sudo yum update -y
sudo yum install httpd mysql update -y
sudo service httpd start
sudo chkconfig httpd on

デフォルトのまま次へ進みます。
EC2作成⑤.png

EC2の名称を設定します。
スクリーンショット 2020-03-18 16.06.45.png

新しいセキュリティグループを作成し、SSHとHTTPのポートを許可します。
スクリーンショット 2020-03-18 19.26.03.png

入力内容に誤りがないか確認し、EC2を起動します。
スクリーンショット 2020-03-18 19.29.01.png

新しいキーペアを作成しダウンロードすればEC2インスタンスの作成は完了です。
スクリーンショット 2020-03-18 16.09.50.png

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

スクリーンショット 2020-03-28 14.07.16.png

こちらのEC2をパブリックサブネットの1c側に設置します。
スクリーンショット 2020-03-18 16.19.51.png

スクリーンショット 2020-03-18 16.22.28.png

先程作成したセキュリティグループを選択します。
スクリーンショット 2020-03-18 19.41.38.png

確認して、起動します。
スクリーンショット 2020-03-18 19.42.05.png

キーペアも同様のものを選択します。
スクリーンショット 2020-03-18 19.42.30.png

EC2へのSSH接続の確認

EC2インスタンスの状態がrunningに変わったら起動成功なので、それぞれのEC2のIPv4パブリックIPを確認しておきます。

スクリーンショット 2020-03-19 14.07.11.png

続いて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サブネットグループの作成

DBサブネットグループ作成①.png

名称を入力し、作成したVPCと紐付けます。
スクリーンショット 2020-03-21 12.42.12.png

作成したプライベートサブネット2つを紐付けます。
スクリーンショット 2020-03-21 12.42.26.png

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

セキュリティグループ(RDS用)①.png

スクリーンショット 2020-03-21 12.45.41.png

スクリーンショット 2020-03-21 12.47.14.png

セキュリティグループ(RDS用)④.png

データベースの作成

RDS作成①.png

MySQLを選択します。
RDS作成②.png

スクリーンショット 2020-03-21 13.00.59.png

MultiAZ構成としますので、次の部分をチェックします。
スクリーンショット 2020-03-21 13.03.26.png

設定欄を入力します。
スクリーンショット 2020-03-21 13.06.08.png

作成したVPC、サブネットグループ、セキュリティグループを紐づけます。
スクリーンショット 2020-03-21 13.15.27.png

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

EC2からRDSへの接続確認

作成したRDSのエンドポイントをコピーします。
スクリーンショット 2020-03-21 13.41.16.png

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

スクリーンショット 2020-03-19 14.44.10.png

ALBを選択します。
スクリーンショット 2020-03-19 14.44.27.png

ロードバランサーの名称を入力し、今回は外部接続用のためインターネット向けを選択しておきます。
スクリーンショット 2020-03-19 14.51.09.png

作成したVPCを選択し、2つのEC2が設置してあるパブリックサブネットを紐付けます。
スクリーンショット 2020-03-19 14.52.50.png

EC2と同様のセキュリティグループを選択します。
スクリーンショット 2020-03-19 14.55.31.png

ルーティングについてはデフォルトのまま進めます。
スクリーンショット 2020-03-19 16.40.26.png

スクリーンショット 2020-03-19 16.40.37.png

ターゲットを作成した2つのEC2に指定します。
スクリーンショット 2020-03-19 16.42.09.png

スクリーンショット 2020-03-19 16.44.18.png

ELB機能確認

実際にロードバランサーが機能しているか確認をします。まず、htmlファイルを2つのEC2インスタンスに作成します。

ターミナル画面
$ sudo vi /var/www/html/index.html
<html>
Hello EC2!AZ-1a    #別のEC2はAZ-1cにする。
</html>

次に、ELBのDNS名を確認し、そこからEC2にアクセスします。
スクリーンショット 2020-03-21 13.53.00.png

表示された画面のリロードを繰り返すと、アクセスされるEC2が変更されます。そのため、次のように表示されるhtmlファイルが異なります。
スクリーンショット 2020-03-21 13.56.32.png

スクリーンショット 2020-03-21 13.56.27.png

以上で、今回の構成図が完成となります。

その他

今回の構成以外の対策としては次の内容が考えられます。

セキュリティ対策

・セキュリティグループの設定

通信を許可する送信元IPアドレスやプロトコルを必要なものだけに限定

・CloudTrailの利用

ユーザーの行動ログを取得する等の監視

・CloudWatchの利用

利用するリソースに対してメトリクスやログの収集、追跡

可用性対策

・Auto-Scalingの利用

EC2に高負荷がかかった場合、新たなEC2が自動的に作成されるよう設定

・Route53を利用したフェイルオーバー

同じ構成のスタンバイを別リージョンに設置

・リードレプリカの利用

RDSへの読み込み負荷を分散

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした