0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】ELBについてまとめてみた

Posted at

前提として

RDSは、「エンドポイント通信」という機能で、
AZ(1a)のRDSに障害が起きた場合は、
自動的にAZ(1c)のRDSに繋ぐことができます。

しかし、EC2はダウンした時にサポートできるものがないため、
こちらがダウンしたらRDSも使えなくなります。

これを単一障害点と言います。
AWS_VPC – 2.png

**「じゃあ、RDSみたいにEC2もAZ(1c)に複製すればいいじゃん」**と考えるのですがこちらはNGです。
なぜダメなのかというと以下の3点の理由からです。

①アクセスポイントが複数になってしまう。
→上記の例で言うと、10.0.0.0/24と10.0.1.0/24の2つです。

②サーバーが正常かどうかチェックしないといけない。
→AZ(1a)がエラーのときは、AZ(1c)に転送したり、通信自体をキャンセルできるようにしないといけない。

③セキュリティの問題
→直接WEBサーバーにアクセスできるというのはセキュリティ面から見て不安であり、負荷がかかってしまう。

上記の問題を解決するために使われるのがELB

ELBとは?

ELBは、Elastic Load Balancingという名前です。
主な機能としては3つです。
①ELBにはDNSのアクセスポイントが付与されます。
つまり、アクセスポイントを1つにして負荷を分散させることができます。

②ヘルスチェック機能がある
異常なインスタンスを発見したら通信をキャンセルしてくれます。

③ELBに証明書を付与することでSSL通信の終端になってくれる
HTTPS通信を復号する処理を担当してくれる。
つまり、internet gatewayの段階ではHTTPSだが、サブネット内ではHTTP通信となる。

構成図

AWS_VPC – 3.png

よく使われる構成図

①ELBのみパブリックサブネットに配置する

AWS_VPC – 4.png

②FrontendとAPIを分けて3層で構築する

Privateサブネット内にELBを配置します(=内部ロードバランサーと言います)
AWS_VPC – 5.png

では実際に作ってみましょう!

AWS_VPC – 4.png

1. AWSへログイン

2. 東京リージョンになっていることを確認

スクリーンショット 2021-05-01 14.21.09.png

3. VPCを作成(IP:10.0.0.0/21)

■ルート
コンソールで「VPC」と検索→左ペイン内の「VPC」を選択→「VPCを作成」を選択

スクリーンショット 2021-05-01 14.24.26.png

4. サブネットを作成(IP:10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24)

■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「サブネットを作成」を選択

Public Subnetを作成

WordPressに使うサブネットを作成します。

スクリーンショット 2021-05-01 14.27.32.png

Private Subnetを作成

RDB(MySQL)に使うサブネットを作成します。

スクリーンショット 2021-05-01 14.29.17.png

5. Publicサブネット内にEC2を構築

■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択

■ステップの流れ
STEP1 Amazon Linux 2 AMI
STEP2 t2.micro
STEP3 「ネットワーク」、「サブネット」、「パブリックIP」を変更
スクリーンショット 2021-05-01 14.35.10.png
STEP4 そのままでOK
STEP5 Name=WEBSERVER1で設定
STEP6 セキュリティグループを変更
スクリーンショット 2021-05-01 14.37.57.png
STEP7 キーペアの作成
スクリーンショット 2021-05-01 14.38.49.png

AMIの作成

作成したWEBSERVER1を停止してAMIを作成します。
■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスの状態」から停止を選択
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「アクション」から「イメージを作成」を選択

スクリーンショット 2021-05-02 21.35.47.png

では作成したAMIを使ってインスタンスを作成しましょう。
ステップ5のタグは、Name=WEBSERVER2とします。
スクリーンショット 2021-05-02 21.40.44.png
スクリーンショット 2021-05-02 21.42.09.png

6. Publicサブネットをインターネットに接続するためにInternet Gatewayを作成

■ルート
コンソールで「VPC」と検索→左ペイン内の「インターネットゲートウェイ」を選択→「インターネットゲートウェイの作成」を選択

スクリーンショット 2021-05-01 14.43.36.png

これではVPCとアタッチできていないので、インターネットへ接続できません。
なのでアタッチさせましょう!
スクリーンショット 2021-05-01 14.44.44.png
これでアタッチしました。

7. EC2がインターネット接続するためにルートテーブルを作成

■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「Public-Subnet1」を選択→「ルートテーブル」を選択→「ルート」へ移動→「ルートを編集」を選択

スクリーンショット 2021-05-01 14.49.14.png

8. SSH接続でログイン

ターミナル
// ①キーペアがあるところへ移動
$ cd desktop

// ②キーペア発見
$ ls -l keypair.pem
-rw-r--r--@ 1 ryo  staff  1704  5  1 14:38 keypair.pem

// ③権限を400に変更
$ chmod 400 keypair.pem

// ④SSH接続
$ ssh -i keypair.pem ec2-user@(パブリックIPアドレス)

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

9. PrivateサブネットにRDSを構築

RDSには、エンドポイント通信という機能がありました。
もし通信障害などが発生して、親のRDSが使えなくなった時子のRDSに接続してくれる機能です。
つまり、このことから異なるAZにサブネットがないとRDSは使えません

ということで複数のサブネットにまたがる形でRDSは構築されるので、
サブネットグループというものが必要になります。

■ルート
コンソールで「RDS」と検索→左ペイン内の「サブネットグループ」を選択→「DB サブネットグループを作成」を選択

スクリーンショット 2021-05-01 15.04.11.png

それでは次に、DBを作成していきましょう。
■ルート
コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「データベースの作成」を選択

スクリーンショット 2021-05-01 15.10.34.png
スクリーンショット 2021-05-01 15.10.53.png
スクリーンショット 2021-05-01 15.11.08.png
スクリーンショット 2021-05-01 15.11.23.png
スクリーンショット 2021-05-01 15.11.39.png

次にRDSで作ったセキュリティグループを修正します。
■ルート
コンソールで「VPC」と検索→左ペイン内の「セキュリティグループ」を選択→「RDS-SG-1」を選択

DBは重要な情報が入っているため誰でも彼でもアクセスできると困ります。
なので、PublicサブネットのEC2(セキュリティグループ→WEB-SG-1)からしか触れないように修正します。

スクリーンショット 2021-05-01 15.23.11.png

10. EC2にWordPressを導入

ターミナル
// 権限が足りないので権限をrootに移動
$ sudo su -

// EC2のパッケージを最新の状態にアップデート
$ yum -y update

// WordPressが動くために必要なツールをダウンロード(PHP, Apache, MySQL)
$ amazon-linux-extras install php7.2 -y
$ yum -y install mysql httpd php-mbstring php-xml gd php-gd

// Apacheが再起動後も自動的に動くようにする
$ systemctl enable httpd.service

// Apacheをスタート状態に
$ systemctl start httpd.service

// カレントディレクトリにWordPressの最新パッケージを入れる
$ wget http://ja.wordpress.org/latest-ja.tar.gz ~/

// あるか確認する
$ ls -l
total 16076
-rw-r--r-- 1 root root 16458939 Apr 21 00:00 latest-ja.tar.gz(あった)

// 拡張子がgzなので展開しましょう
$ tar zxvf ~/latest-ja.tar.gz

// ディレクトリごと/var/www/htmlへコピーする
$ cp -r ~/wordpress/* /var/www/html/

// /var/www/htmlをapacheのユーザーに権限変更
$ chown apache:apache -R /var/www/html

11. ロードバランサーを導入

■ルート
コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「ロードバランサーの作成」を選択

スクリーンショット 2021-05-02 21.52.13.png
スクリーンショット 2021-05-02 21.53.03.png
スクリーンショット 2021-05-02 21.54.08.png
スクリーンショット 2021-05-02 21.54.41.png

12. RDSのサイトアドレスをロードバランサーのDNSに書き換え

ターミナル
// ①RDSへログイン
$ mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u wordpress -p

// ②WordPressのテーブルを使用
MySQL [(none)]> USE wordpress

// ③指定のカラム
MySQL [(none)]> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
+-----------+-------------+-----------------------+----------+
| option_id | option_name | option_value          | autoload |
+-----------+-------------+-----------------------+----------+
|         2 | home        | http://13.231.153.132 | yes      |
|         1 | siteurl     | http://13.231.153.132 | yes      |
+-----------+-------------+-----------------------+----------+

// ④ロードバランサーのDNS名に置き換える
MySQL [(none)]> UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home');

13. EC2のセキュリティグループのアクセス許可をロードバランサーからに変更する

■ルート
コンソールで「EC2」と検索→左ペイン内の「セキュリティグループ」を選択→「WEB-SG-1」を選択

スクリーンショット 2021-05-02 22.07.17.png

14. RDSも冗長化構成へ変更

■ルート
コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「database-1」を選択
スクリーンショット 2021-05-02 22.10.04.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?