LoginSignup
8
5

More than 3 years have passed since last update.

EC2を冗長化し、AutoScaleにも対応してみた

Last updated at Posted at 2021-02-02

はじめに

EC2は障害対策のため、複数のアベイラビリティゾーンに配置し冗長化すると思います。
また、大量アクセス等のサーバーへの負荷にも備えて、自動でEC2を増加させる(AutoScaling)させることも重要です。
本記事では、ハンズオン形式で、以上の内容(+冗長化したRDS)をまとめていきます。
またVPCの作成から始めるので、初心者の方もぜひ参考にしてください!

よかったら最後まで読んでください!

概要

本記事では、以下の構成を目指します。
※ EC2にはapacheをインストールします。

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

大まかには、以下の手順で構築していきます。

  • VPCの作成
  • 冗長化したEC2の作成
  • ALBの作成
  • AutoScalingの設定
  • 冗長化したRDSの作成

VPCの作成

0.概要

この章では以下の構成まで行います。

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

大まかな手順は以下の通りです。
1. VPCを作成
2. サブネットの作成
3. インターネットゲートウェイの作成とアタッチ
4. ルートテーブルの設定

1.VPCの作成

まずは、VPCを作成していきます。

  • VPCの画面から「VPCを作成」をクリック
    スクリーンショット 2021-01-30 12.29.40.png

  • 名前タグとCIDRブロックを指定し、VPCを作成
    スクリーンショット 2021-01-30 12.31.28.png

今回のCIDRブロックは10.0.0.0/21で進めます。
こうすることで、10.0.0.0/24〜10.0.7.0/24のIPアドレスをサブネットに割り当てることができます。

2. サブネットの作成

今回はEC2, RDSの冗長化を行うため、4つのサブネットを作成します。
それぞれ2つのアベイラビリティゾーン(以下AZと記載)に割り振ります。

  • VPCのサブネットページに行き、「サブネットを作成」をクリック
    スクリーンショット 2021-01-30 12.33.20.png

  • サブネットを作成するVPCを指定(先ほど作成したVPCを指定しましょう)
    スクリーンショット 2021-02-02 14.16.12.png

  • サブネットを設定
    privateサブネット、publicサブネットをそれぞれ2つずつ、合計4つのサブネットを作成します。
    「新しくサブネットを追加」を押すと、一度に複数のサブネットを作成することができます。
    今回は以下の4つのサブネットを作成します。

Name IPv4 CIDR ブロック  AZ
test-subnet-public1 10.0.0.0/24 ap-northeast-1a
test-subnet-public2 10.0.1.0/24 ap-northeast-1c
test-subnet-private1 10.0.2.0/24 ap-northeast-1a
test-subnet-private2 10.0.3.0/24 ap-northeast-1c

スクリーンショット 2021-01-30 12.48.25.png

全てのサブネットの設定が終わったら「サブネットを作成」を押します。

3. インターネットゲートウェイの作成とアタッチ

次にインターネットゲートウェイを作成します。
また作成したらアタッチをして、インターネットゲートウェイを通してVPCにアクセスできるようにします。

  • 「インターネットゲートウェイの作成」をクリック
    スクリーンショット 2021-01-30 13.20.23.png

  • 名前を記入し、「インターネットゲートウェイの作成」ボタンをクリック
    スクリーンショット 2021-01-30 12.51.36.png

  • VPCにアタッチする。
    作成したインターネットゲートウェイのページにいき、アタッチをしていきます。
    アクションから「VPCにアタッチ」を選択します。
    スクリーンショット 2021-01-30 12.51.57.png

  • 作成したVPCを指定して、アタッチしましょう!
    スクリーンショット 2021-01-30 12.52.07.png

4. ルートテーブルの編集

通信の設定を行うためにルートテーブルを編集します。

  • 対象のルートテーブルを選択し、「ルートを編集」をクリック!
    スクリーンショット 2021-01-30 12.58.52.png

  • デフォルトのルートテーブルにインターネットゲートウェイへの通信を追加していきます。
    「0.0.0.0/0」のターゲットは、先ほど作成したインターネットゲートウェイを選択していきます。
    スクリーンショット 2021-01-30 12.59.20.png

VPCの作成は以上です。続いてEC2を作成していきます。

冗長化したEC2の作成

0.概要

この章では以下の構成まで行います。

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

EC2は複数のAZに作成していきます。
また、EC2にはapacheをインストールしていきます。

大まかな手順は以下の通りです。

  1. EC2の作成(1つ目、ap-northeast-1a)
  2. apacheのインストール
  3. 仮ファイルの作成
  4. EC2の作成(2つ目、ap-northeast-1c)

仮ファイルはALBの通信チェックのために作成します。
※ALBにおいてヘルスチェックというEC2へリクエストを送ってリスポンスが返ってくるかチェックをするのですが、その時のためにファイルを用意しておきます。

1. EC2の起動(1つ目、ap-northeast-1aにて起動)

まずは、1つ目のEC2をap-northeast-1aにて作成していきます。

  • まずは、「インスタンスを起動」をクリック
    スクリーンショット 2021-01-30 14.20.16.png

  • 一番上のAmazon Linux2を選択しましょう!
    スクリーンショット 2021-01-30 14.20.29.png

  • インスタンスはt2.microを選択します(無料)。
    選択したら「次のステップ:インスタンス詳細の設定」をクリック
    スクリーンショット 2021-01-30 14.20.39.png

  • VPCとサブネットを選択します。
    作成したVPCとtest-subnet-public1を選択しましょう!
    また、「自動割り当てパブリック」は「有効」にしましょう!
    他はデフォルトのまま、「次のステップ:ストレージの追加」をクリック
    スクリーンショット 2021-01-30 14.21.21.png

  • ストレージはデフォルトのまま、「次のステップ:タグの追加」をクリック
    スクリーンショット 2021-01-30 14.21.31.png

  • Nameタグを追加します。今回はTest-server1とします。
    追加できたら、「次のステップ:セキュリティグループの設定」をクリックします。
    スクリーンショット 2021-01-30 14.21.56.png

  • 新しいセキュリティグループを作成するを選択し、セキュリティグループを「Test-WebSG1」をします。
    後ほどALBの設定で変更しますが、一旦SSHとHTTPの2つのタイプを設定しましょう!
    ※タイプを設定すると、プロトコルとポート範囲は自動で設定されます。
    設定が終わったら「確認と作成」をクリック
    スクリーンショット 2021-02-01 14.48.25.png

  • 次にキーペアを作成します。
    キーペアはEC2インスタンスにログインするための鍵のことです。

    キーペアを既に作成していれば、既存のキーペアを利用することができます。今回は「test」という名前で新しくキーペアを作成します。

    ダウンロードが完了したらキーペアをダウンロードのフォルダから移動させます。(今回はデスクトップに移動させました)。
    全て終わったら「起動」をクリックしましょう
    スクリーンショット 2021-02-01 14.53.12.png

2. apacheのインストール

それではapacheをインストールしていきます。

  • まずは、ローカルからEC2にログインします。 ログインの際は先ほど、取得したキーペアを用います。 まずは、キーペアがあるフォルダ(今回はデスクトップ)に移動します。 その後、キーペアの権限を変更し、読み取り専用にしEC2にログインします。
ローカル環境のターミナル
$ cd desktop
$ chmod 400 test.pem
# 以下の「XX.XX.XX.XX」には、作成したEC2インスタンスのパブリックIPを入力してください
$ ssh -i test.pem ec2-user@XX.XX.XX.XX
  • それではapacheをインストールしていきます。
サーバー環境のターミナル
$ sudo su -
$ yum -y install httpd
  • apacheを起動します。またEC2の起動と同時にapacheも起動するよう設定します。
サーバー環境のターミナル
$ systemctl start httpd.service
$ systemctl enable httpd.service
  • apacheが起動しているか確認してみましょう! 以下の様にactive(ruunning)になっていれば大丈夫です。
サーバー環境のターミナル
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-01-30 05:32:27 UTC; 2s ago

# 中略

Jan 30 05:32:27 ip-10-0-0-165.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server...

3. 仮ファイルの作成

ロードバランサーでヘルスチェックをする際に、ファイルがないと「unhealty」表示になってしまうため、表示ファイルを作成します。

EC2にログインした後に、htmlディレクトリまで移動します。

EC2のターミナル
# rootユーザーに変更しておきます。
$ sudo su -
$ cd /var/www/html
$ touch index.html

これで、OKです。何も記載しなくても問題はないのですが、今回は以下のような表示で進めます。

index.html
<h1>Test-server1</h1>

4. EC2の作成(2つ目、ap-northeast-1c)

それでは、apacheをインストールしたEC2インスタンス(Name:Test-server1)のAMIイメージを作成して2つ目のEC2インスタンスを作成していきます。

  • まずは1つ目のインスタンスをコピーしましょう!
    1つ目のインスタンスを選択し、アクション> イメージとテンプレート>イメージを作成をしていきます。
    スクリーンショット 2021-01-30 14.38.10.png

  • 今回はTest-Server-imageという名前で作成します。
    記入できたら「イメージを作成」をクリックしましょう。
    スクリーンショット 2021-02-01 15.04.43.png

  • イメージの作成状況はAMIから見ることができます。
    ステータスがavailableになっていればOKです。
    スクリーンショット 2021-02-01 15.08.10.png

  • それでは2つ目のインスタンスを作成してきます。
    「インスタンスを起動」をクリックした後、マイAMIをクリックしましょう。
    先ほど、作成した「Test-Server-image」があるので、こちらを選択しましょう。
    スクリーンショット 2021-02-01 15.12.59.png

  • インスタンスタイプは先ほどと同様「t2.micro」で進めます。

  • ネットワークは作成したVPCを選択します。
    サブネットは「test-subnet-public2」を選択しましょう。
    自動割り当てパブリックは有効にします。
    スクリーンショット 2021-01-30 14.46.43.png

  • ストレージはデフォルトのままで進めます。

  • タグはNameタグを追加しましょう。
    今回は「Test-server2」とします。
     スクリーンショット 2021-01-30 14.49.54.png

  • セキュリティグループは先ほど作成した「Test-WebSG1」を選択しましょう。
    スクリーンショット 2021-01-30 14.47.13.png

  • 確認と作成を押し、先ほど作成したキーペアを選択したのち、インスタンスを起動しましょう!

以上でEC2の起動は終了となります。
次に、ALBを作成していきましょう

ALBの作成

0.概要

この章では以下の構成まで行います。

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

大まかな手順は以下の通りです。

  1. ALBの作成
  2. EC2のセキュリティグループの変更

まずはALBを作成し、その後はEC2へのアクセスをALBからできるようにセキュリティグループを変更していきます。

1. ALBの作成

  • まずは「ロードバランサーを作成」 をクリック
    スクリーンショット 2021-01-30 21.57.11.png

  • ロードバランサーの種類を選択します。今回は「Application Load Balancer」を選択します(HTTP, HTTPSと書いてある方です)。
    スクリーンショット 2021-01-30 21.57.21.png

  • ロードバランサーの設定をしていきます。
    名前を「Test-LB」にしました。
    対象となるVPCは「TestVPC」、サブネットは「test-subnet-public-1」「test-subnet-public-2」を指定します。
    スクリーンショット 2021-01-30 22.00.06.png
    スクリーンショット 2021-01-30 22.00.23.png

  • セキュリティ設定の構成は特に何もせずに、「次の手順:セキュリティグループの設定」をクリックしましょう
    スクリーンショット 2021-01-30 22.00.40.png

  • 新しいセキュリティグループを作成していきます。今回は「Test-LB-SG」としました。
    タイプは「HTTP」、ソースは「0.0.0.0/0, ::/0」を指定します。
    スクリーンショット 2021-02-01 15.34.31.png

  • ルーティングの設定をしていきます。
    名前を「Test-TG」、プロトコルは「HTTP」を選択します。
    スクリーンショット 2021-01-31 10.16.41.png

  • ヘルスチェックの項目については、プロトコルが「HTTP」、パスは「/」を記入します。
    ヘルスチェックの詳細は、デフォルトから正常のしきい値を「2」、感覚を「10」に変更します。
    スクリーンショット 2021-02-01 15.39.39.png

  • ターゲットを登録していきます。下の2つのインスタンスにチェックをつけて、「登録済みに追加」をクリックします。
    追加されたら、「次の手順:確認」をクリックし、ALBの作成を完了しましょう

2. EC2のセキュリティグループの変更

EC2をALB経由でインターネットに接続されるように、EC2のセキュリティグループを変更しましょう。

  • セキュリティグループのページからEC2で用いているセキュリティグループを選択し、「インバウンドルールを編集」をクリック。
    スクリーンショット 2021-02-01 15.55.35.png

  • HTTPのソースを「0.0.0.0/0」から先ほど作成したALBのセキュリティグループ「Test-LB-SG」に変更します。
    ルールを保存したら、完了です!
    スクリーンショット 2021-02-01 15.57.43.png

ALBの作成は以上となります。
次にAutoAcalingの設定をしていきます。

AutoScalingの設定

0.概要

この章では以下の構成まで行います。

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

大まかな手順は以下の通りです。
1. 起動テンプレートの作成
2. AutoScalingグループの作成
3. cloudWatchで監視の設定
4. AutoScalingのポリシーの追加

デフォルトで2つのEC2インスタンスを設定し、最大4つまでEC2インスタンスを増やす設定にします。

1. 起動テンプレートの作成

まずはAutoScalingで複製するEC2のテンプレートを作成します。

  • テンプレート起動ページの「起動テンプレートを作成」をクリック
    スクリーンショット 2021-02-01 16.18.32.png

  • 起動テンプレートの設定をしていきます。
    今回は、起動テンプレート名は「Test-LT」、テンプレートバージョンは「1.0.0」 にしました。
    スクリーンショット 2021-01-31 13.56.23.png

  • AMIは「Test-Server-image」、インスタンスタイプは「t2.micro」、キーペアは「test.pem」を用います。
    その他の設定はデフォルトで、起動テンプレートを作成していきます。

2. AutoScalingグループの作成

先ほど作成した起動テンプレートを元にAutoScalingグループを作成します。

  • AutoScalingグループの作成をクリックします。
    スクリーンショット 2021-01-31 13.37.51.png

  • 名前を「Test-AS」に設定し、起動テンプレートは先ほど作成した「Test-LT」を選択した後「次へ」をクリックします。
    スクリーンショット 2021-01-31 14.20.32.png

  • 「起動テンプレートに準拠する」を選択し、サブネットは「test-subnet-public-1」「test-subnet-public-2」を選択します(VPCは「TestVPC」です)。
    スクリーンショット 2021-01-31 14.22.15.png
    スクリーンショット 2021-01-31 14.22.23.png

  • 次に「既存のロードバランサーにアタッチ」「アプリケーションまたはNetwork Load Balanceerターゲットグループから選択」を選択します。
    スクリーンショット 2021-01-31 14.23.44.png

  • ターゲットグループには「Test-LB-TG」を選択します。
    ヘルスチェックは「ELB」にもチェックを入れます。ヘルスチェックの猶予期間は300秒で進めます。
    スクリーンショット 2021-01-31 14.24.00.png

  • グループサイズについて希望する容量は「2」、最小キャパシティは「2」、最大キャパシティは「4」で進めます。
    ※既存のEC2インスタンスと合わせてデフォルトで4つのEC2インスタンスが立ち上がり、最大で6つとなります。
    スクリーンショット 2021-01-31 14.25.28.png

  • 通知については、何も設定せず「次へ」をクリックします。

  • タグについても何も設定せずに「次へ」をクリックします。

  • その後のページで「AutoScalingグループを作成」をクリックして、作成していきましょう

3. CloudWatchで監視の設定

次にCloudWatchにて、EC2の負荷状況を監視するための設定をしていきます。
今回は、「CPU稼働が70%より大きい」「CPU稼働が30%より小さい」という基準を設けます。
これらの基準に満ちた場合は、アラームを発生させる設定を組みます。

  • CloudWatchのページにいき、「アラームを作成」をクリックします。
    スクリーンショット 2021-02-01 16.50.55.png

  • 「メトリックスを選択」から以下の順番で最終的にTest-ASのCPUUtilizationを選択します。
    メトリクスを選択> EC2 > Auto Scaling グループ別 >Test-ASのCPUUtilization
    スクリーンショット 2021-02-01 16.51.46.png

  • 画像のように、70よりも大きいという設定をしていきます。
    ※今回は、メトリクスの設定は特に変更しません
    スクリーンショット 2021-02-01 17.40.05.png

  • アクションの設定は今回は設定しないこととします。
    「次へ」をクリックします。

  • アラーム名を「Test-CPU-High」と設定します。
    「次へ」をクリックし、次のページで「アラームを作成」をクリックしましょう
    スクリーンショット 2021-02-01 17.43.17.png

  • 同様に30%未満のアラームを作成していきます。
    アラーム名を「Test-CPU-Low」と設定していきます。

現在では、CPU稼働率が30%よりも低いため、Test-CPU-Lowがアラーム状態になっております。
スクリーンショット 2021-02-01 17.45.45.png

次に「Test-CPU-High」「Test-CPU-Low」をAutoScalingと対応させます。

4. AutoScalingのポリシーの追加

  • AutoScalingのページから自動スケーリングを選択し、「ポリシーを追加」をクリック
    スクリーンショット 2021-02-01 17.54.15.png

  • まずは、「Test-CPU-High」の設定からしていきます。
    ポリシータイプは「シンプルなポリシー」、アラームは「Test-CPU-High」、アクションは「追加、1、キャパシティユニット」、待機は「30秒」で設定していきます。
    全て設定できたら作成を押します。
    スクリーンショット 2021-02-01 17.48.41.png

  • 「Test-CPU-Low」も同様に作成します。

AutoScalingの設定は以上となります。
最後にデータベース作成のために、RDSを作成していきます。

RDSの作成

0.概要

この章では以下の構成まで行います。

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

大まかな手順は以下の通りです。

  1. サブネットグループの作成
  2. RDSの作成
  3. セキュリティグループの編集

1. サブネットグループの作成

まずはDBサブネットグループを作成していきます。

  • RDSのページから、サブネットを開き、「サブネットグループを作成」をクリックします。
    スクリーンショット 2021-02-01 18.13.59.png

  • 今回は「Test-subnetG」という名前で作成します。VPCは「TestVPC」を、サブネットは作成したプライベートサブネット2つを選択します。選択が終わったら「作成」をクリックします。
    スクリーンショット 2021-02-01 18.14.22.png
    スクリーンショット 2021-02-01 18.14.49.png

2. RDSの作成

  • RDSのデータベースページから「データベースの作成」をクリック
    スクリーンショット 2021-02-01 23.47.41.png

  • データベースを作成していきます。
    画像で示したいのですが、かなり長くなってしまうためこちらは表で記載いたします。
    ※以下の表に記載がないものはデフォルトの設定で進めます。
    全ての記入が終わったら「データベースの作成」をクリック

項目 選択
データベース作成を選択 標準作成
エンジンのオプション MySQL
テンプレート 開発/テスト
DBインスタンス識別子 test-database-1
パスワード 各自設定をしてください
DBインスタンスサイズ db.t2.micro(以前の世代のクラスを含める)
マルチAZ配置 スタンバイインスタンスを作成する
VPC TestVPC
サブネットグループ test-subnetg
VPCセキュリティグループ 新規作成(名前:Test-RDS-SG)
追加設定>最初のデータベース設定 Test_db

3. セキュリティグループの編集

最後にセキュリティグループのインバウンドルールをEC2からのみに設定します。

  • VPCのセキュリティグループのTest-RDS-SGのページを開きます。
    その後インバウンドルールの編集をクリックします。
    スクリーンショット 2021-02-02 0.00.13.png

  • ソースの部分にTest-WebSG1(EC2のセキュリティグループ)を選択し、ルールを保存します。
    スクリーンショット 2021-02-02 0.01.40.png

以上で終了となります。
大変長くなってしまいましたが、これで冗長化されたEC2とRDSを構築し、さらにAutoScalingも設定することができました。
最後まで読んでいただきありがとうございました。

8
5
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
8
5