1
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編】

Last updated at Posted at 2021-09-27

はじめに

このアカウントで初めてのQiita投稿になります。2021年2月から株式会社MIERUNEに参画しています。ここ最近、弊社の社員教育の一環としてAWSとGC(旧GCP)について学ばせてもらえる機会がありました。ずっと興味のあったAWSとGCでのスケーラブルな仮想サーバー構築のノウハウを学ぶことができたので、双方の構築方法を備忘も兼ねてアウトプットとさせていただきます。こちらの記事ではAWSについて記載します。GCについての記事はこちら

対象

  • AWSとGCでスケーラブルなサービスを構築したい方
  • クラウドサービスにあまり触れたことのない方

自分自身クラウドは初心者に近いので、そういった目線から結構細かめに書いてみようと思います。

スケーラブルとは

その前にスケーラビリティとは・・・(以下 IT用語辞典 - スケーラビリティ を参照)

機器やソフトウェア、システムなどの拡張性、拡張可能性のこと。スケーラビリティの高いことを「スケーラブルな」(scalable)と表現することもある。

この記事においてスケーラブルとは、リソースを拡張/縮小できるという意味で使っています。利用状況に応じて自由にリソースをスケーリングできるのは、クラウドサービスの強みの1つでもあります。

前提

この記事ではキャプチャを交えてオートスケーリングの設定方法を書いていきます。現在は2021年8月時点の情報です。UIやサービスの名称がちょくちょく変わっちゃうので注意が必要です。(そもそもGCP→GCに名称が変わっちゃったぐらいなので・・)

記事の中で設定している値は適当なので任意に変更していただいて構いません。

構成図

以下のような構成にします。異なるAvailability Zoneにインスタンスを配置し、ロードバランサで負荷分散を行います。またインスタンスをグループで括ってオートスケーリングの設定を行います。

aws1.png

方法

以下からキャプチャを交えて設定の方法を書いていきますが、UIやサービスの名称がちょくちょく変わっちゃうので注意が必要です。(そもそもGCP→GCに名称が変わっちゃったぐらいなので・・)この記事は2021年8月時点の情報です。

ネットワーク構築

まずは、土台となるVPC作成とサブネット切り分け、インターネットゲートウェイの引き込みを行います。

ログイン後に右上のメニューからリージョンを設定します。今回はアジアパシフィック(東京)ap-northeast-1を指定しました。

VPC

その後サービスから「VPC」を選択し、左メニュー「VPC」 > 右上の「VPCを作成」を押下します。
名前とIPv4 CIDRを設定して、その他はデフォルトにします。今回は以下のようにしました。

名前 IPv4 CIDRブロック
AutoScalingTestVPC 10.0.0.0/16

サブネット

続いてサブネットを切っていきます。サービス「VPC」の左メニュー 「サブネット」 > 右上の 「サブネットを作成」 を押下します。VPCは先ほど作成したAutoScalingTestVPCを選択し、サブネットの設定ではサブネット名、アベイラビリティーゾーン(AZ)、IPv4 CIDRを設定します。今回は2つのEC2を異なるAZに配置するので、サブネットを2つ切ります。以下のようにしました。

サブネット名 アベイラビリティーゾーン IPv4 CIDR ブロック
AutoScalingTestPublicSubnet1 アジアパシフィック (東京) / ap-northeast-1a 10.0.1.0/24
AutoScalingTestPublicSubnet2 アジアパシフィック (東京) / ap-northeast-1c 10.0.2.0/24

インターネットゲートウェイ

続いて、VPCにインターネットゲートウェイを設定します。サービス「VPC」の左メニュー 「インターネットゲートウェイ」 > 右上の「インターネットゲートウェイの作成」に進みます。名前タグを設定し、「インターネットゲートウェイの作成」を押下します。今回はAutoScalingTestIGという名称にしました。
作成後、インターネットゲートウェイ一覧画面から、作成したAutoScalingTestIGの左にチェックを入れ、「アクション」 > 「VPCにアタッチ」を押下します。

1.png

ここでVPCにアタッチすることができるので、先ほど選択したAutoScalingTestVPCを選択して「インターネット」ゲートウェイのアタッチ」を押下します。これで、VPCにインターネットゲートウェイが設定されました。

ルーティング

最後に、ルーティングの設定をします。サービス「VPC」の左メニュー 「ルートテーブル」> 右上の「ルートテーブルを作成」に進みます。名前とVPCを設定しますが、今回はAutoScalingTestRouteTable、VPCは先ほど作成したAutoScalingTestVPCを選択し、「ルートテーブルを作成」を押下します。
その後、作成したルートテーブルを選択し、下部メニューの「サブネットの関連付け」> 右側の「サブネットの関連付けを編集」をクリックします。

2.png

そうするとサブネットの選択画面に遷移するので、先ほど作成したAutoScalingTestPublicSubnet1AutoScalingTestPublicSubnet2にチェックを入れます。

その後、インターネットゲートウェイの設定をします。下部メニューの「ルート」> 右側の「ルートを編集」をクリックします。

3.png

するとルート編集画面に進むので、「ルートを追加」を押下します。ここでは以下のように設定しました。

送信先 ターゲット
0.0.0.0/0 作成したインターネットゲートウェイ(AutoScalingTestIG)

ここまでで、以下のネットワークの構築は完了です。以下の部分を設定したことになります。

aws2.png

インスタンス

仮装サーバーのインスタンスを作成していきます。

セキュリティグループ

インスタンス作成の前にセキュリティグループを設定します。
サービスから「EC2」を選択し、その後左メニュー 「セキュリティグループ」> 右上の「セキュリティグループを作成」に進みます。セキュリティグループを設定する画面に遷移するので、セキュリティグループ名、説明、VPCを入力します。今回は以下のようにしました。

セキュリティグループ名 説明 VPC
AutoScalingTestSG for auto scaling test 作成したVPC(AutoScalingTestVPC)

その後インバウンドルールを設定します。今回はSSHとHTTPを許可します。ソースはAnywhere-IPv4にします。

4.png

アウトバウンドルールはデフォルトのままにして、「セキュリティグループの作成」をクリックします。これでセキュリティグループの作成は完了です。

EC2インスタンス作成

仮装サーバーのインスタンス作成と設定に入っていきます。サービス「EC2」の左メニュー 「インスタンス」 > 右上の「インスタンスを起動」を押下します。

マシンイメージ選択画面に進むので、Amazon Linux 2 AMI (HVM), SSD Volume Typeを選択します。次画面でインスタンスタイプをt2.microにし、「インスタンスの詳細の設定」に進みます。

詳細設定画面では、VPC、サブネット、自動割り当てパブリックIPを設定します。今回は以下のようにしました。

VPC サブネット 自動割り当てパブリックIP CloudWatch 詳細モニタリングを有効化
作成したVPC
(AutoScalingTestVPC)
作成したサブネット1
(AutoScalingTestPublicSubnet1)
有効 チェックを入れる

また、インスタンス起動時にApacheを起動し、任意のページを表示しておきたいので、「高度な詳細」> 「ユーザーデータ」に以下を記載します。

#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
chown -R $USER:$USER /var/www
echo Hello,AutoScalingTest > /var/www/html/index.html

その他の項目はデフォルトのままにして、次に「次のステップ:ストレージの追加」(ここはデフォルトのまま次に進む)、「次のステップ:タグの追加」と進み、「タグの追加」からキーと値を設定します。今回はキーにName、値にAutoScalingTestServer1と設定しました。「次のステップ:セキュリティグループの設定」に進みます。

セキュリティグループの設定画面では、「セキュリティグループの割り当て」を「既存のセキュリティグループを選択する」にし、先ほど作成したAutoScalingTestServer1にチェックを入れます。

ここまで終わったら、「確認と作成」 > 「起動」と進みます。キーペアを選択する画面になるので、「新しいキーペアの作成」を選び、キーペア名を入力します。今回はAutoScalingKeyとしました。

5.png

「キーペアのダウンロード」からダウンロードし(キーは公開しないよう大事に保管しておいてください)、「インスタンスの作成」をクリックすると、インスタンスの作成が始まります。「インスタンスの表示」からインスタンス一覧画面に進むと、作成したEC2が表示されています。「ステータスチェック」に2/2 のチェックに合格しましたと表示されるようになると、仮想サーバーが起動されています。

正しく実行されているか確認してみます。インスタンス一覧から作成したインスタンスにチェックを入れ、下部メニューの「詳細」から「パブリックIPv4アドレス」を確認します。このIPをブラウザからアクセスすると、Hello,AutoScalingTestと表示されているはずです。
6.png

AMI作成

このApacheインストール済みのインスタンスを、AMI(Amazon マシンイメージ)として作成することで、他でも使いまわせるようになります。インスタンス一覧から作成したインスタンスを右クリックし、「イメージとテンプレート」 > 「イメージを作成」の順に選択します。

イメージ作成画面に進むので、イメージ名とイメージの説明を設定します。今回は以下のようにしました。

イメージ名 イメージの説明
AutoScalingTestAMI Installed Apache

「イメージの作成」をクリックし、インスタンスの画面に戻った後に、左メニューの「AMI」に進みます。ここで作成したAMIが確認できます。ステータス」がavailableになれば完了です。

2台目のインスタンス作成

今作成したAMIから、もう一台インスタンスを作成します。サービス「EC2」の左メニュー 「インスタンス」 > 右上の 「インスタンスを起動」 を押下します。

AMI選択画面で、左メニューから「マイAMI」を選びます。すると先ほど作成したAutoScalingTestAMIがあるので、これを選択します。そのあとは先ほどと同じように作成を進めますが、以下は変えます。

サブネット 高度な設定のユーザーデータ タグ追加のName キー ペア
AutoScalingTestPublicSubnet2 何も書かない AutoScalingTestServer2 既存のキー ペアからAutoScalingKeyを選択

作成が終わったら、起動の確認をします。先ほどと同じようにAutoScalingTestServer2のパブリックIPv4アドレスを確認し、ブラウザからアクセスした際にHello,AutoScalingTestの画面が見えたら成功です。

ロードバランサ

インスタンスが作成できたので、負荷分散のためのロードバランサを設定します。

サービス「EC2」の左メニュー 「ロードバランサ」 > 左上の「ロードバランサーの作成」に進みます。するとロードバランサーの種類の選択画面に遷移するので、Application Load Balancerの「作成」をクリックします。

基本設定画面に進むので、名前とVPC、AZを設定します。今回は以下にしています。それ以外はデフォルトです。

名前 VPC アベリラビリティーゾーン
AutoScalingTestLB 設定したVPC(AutoScalingTestVPC) ap-northeast-1a と ap-northeast-1a にチェック

そのまま「次の手順: セキュリティ設定の構成」 > 「次の手順: セキュリティグループの設定」まで進みます。ここでは先ほど作成したAutoScalingTestSGのみ選択します。

「次の手順: ルーティングの設定」をクリックし、ターゲットグループを作成します。名前をAutoScalingTestTargetとしました。また「ヘルスチェック」 > 「ヘルスチェックの詳細設定」で「間隔」を10にします。

「次の手順: ターゲットの登録」をクリックし、作成したAutoScalingTestServer1AutoScalingTestServer2をチェックして「登録済みに追加」を押下します。

「確認」> 「作成」でロードバランサが作成されます。左メニュー「ロードバランサー」から作成したロードバランサの状態がActiveになるまで待ち、チェックを入れて下メニューから「DNS名」を確認します。
この「DNS名」の値をコピーして、ブラウザからそのままアクセスすると、同じくHello,AutoScalingTestの画面が起動されているはずです。

ここまでで、以下のようにインスタンスをAZごとに作成し、かつロードバランサで負荷分散を行うまでを構築したことになります。

aws3.png

負荷分散の確認

実際に負荷分散が行われているか確認してみます。いったん、ヘルスチェックが正しく動作しているか確認するために、左メニューの「ターゲットグループ」をクリックします。 作成したAutoScalingTestTargetにチェックを入れ、下メニューの「Detail」の中の「Healthy」の値が2、「Unhealthy」の値が0になっていることを確認します。

7.png

その後、ロードバランサからのリクエストがインスタンスに均等に届いていることを確認します。まずは、先ほどダウンロードしたキーペアを用いてAutoScalingTestServer1にsshでログインします。キーが~/Downloadsにあると仮定して、PCのコンソールから以下のコマンドを実行します。

sudo chmod 400 ~/Downloads/AutoScalingKey.pem
ssh -i ~/Downloads/AutoScalingKey.pem ec2-user@AutoScalingTestServer1のパブリックIPv4アドレス

「yes」を入力するとインスタンスにログインできます。Apacheのリクエストに対してのログは/var/log/httpd/access_logの中にあるので、以下で確認します。

sudo cat /var/log/httpd/access_log

すると、HealthCheckerからのリクエストのログがたくさん作成されているはずです。これは、ターゲットグループが10秒ごとにヘルスチェックを行なっているからです。

ここで、先ほどアクセスした、ロードバランサの「DNS名」に対して、再度ブラウザからアクセスし、ブラウザのリロードを10回行ってみます。その後に、再度コンソールからsudo cat /var/log/httpd/access_logを実行してログを確認すると、先ほどとは違いHealthChecker以外からのリクエストのログが5行分確認できるはずです。

いったんコンソールの別タブを立ち上げて、AutoScalingTestServer2にも同様にログインしてみます。

ssh -i ~/Downloads/AutoScalingKey.pem ec2-user@AutoScalingTestServer2のパブリックIPv4アドレス

同じようにして/var/log/httpd/access_logを確認すると、こちらにもHealthChecker以外からのリクエストのログが5行分確認できます。(もし先程のリロードから時間が経っていたら少しログを遡る必要があります)

このことから、ロードバランサによってリクエストがAutoScalingTestServer1AutoScalingTestServer2に均等に分けられていることがわかります。

オートスケーリング

最後に、この記事のテーマであるオートスケーリングの設定に入ります。設定が多く、かなりテキストベースの内容になってしまいますがすみません。

起動テンプレート作成

サービスから「EC2」を選択し、左メニュー 「テンプレートの起動」> 「起動テンプレートを作成」に進みます。ここの「起動テンプレート名と説明」において、起動テンプレート名、テンプレートバージョンの説明を入力し、AutoScalingのガイダンスにチェックを入れます。今回は以下のように入力しました。

起動テンプレート名 テンプレートバージョンの説明 AutoScalingのガイダンス
AutoScalingTestTemplate for AutoScalingTest チェック

それ以下の項目は以下のように設定します。この他の項目はデフォルトにしました。

Amazon マシンイメージ (AMI) インスタンスタイプ キーペア(ログイン) ネットワーク設定のセキュリティグループ 高度な設定
AutoScalingTestAMI t2.micro AutoScalingKey AutoScalingTestSG 「CloudWatch モニタリングの詳細」を有効化

ここまで設定したら「起動テンプレートの作成」をクリックします。
起動テンプレート作成成功の画面に遷移するので、「テンプレートから Auto Scaling グループを作成」の「Auto Scalingグループを作成」をクリックします。

Auto Scalingグループ作成

ここまでで、AutoScalingグループ作成画面に遷移しているはずです。最初の画面では、「Auto Scaling グループ名」を設定します。今回はAutoScalingTestGroupとしました。起動テンプレートは先ほど作成したAutoScalingTestTemplateが選択されていることを確認し、「次へ」をクリックします。

次の「設定の構成」画面では、以下のようにします。

インスタンスの購入オプション VPC サブネット
起動テンプレートに準拠する AutoScalingTestVPC AutoScalingTestSubnet1とAutoScalingTestSubnet2

「次へ」をクリックします。

「詳細オプションを設定」画面に遷移するので、そこでは以下のようにします。

ロードバランシング 既存のロードバランサーにアタッチ 既存のロードバランサーターゲットグループ ヘルスチェック その他の設定
既存のロードバランサーにアタッチ ロードバランサーのターゲットグループから選択 AutoScalingTestTarget 「ヘルスチェックの猶予期間」を120秒 モニタリングにチェック

「次へ」をクリックします。

「グループサイズとスケーリングポリシーを設定する」画面に遷移するので、「グループサイズ」を以下のようにします。それ以外はデフォルトにします。

希望する容量 最小キャパシティ 最大キャパシティ
4 2 4

「次へ」 > 「通知の設定」の「次へ」 > 「タグを追加」の「次へ」と進み、「Auto Scaling グループを作成」をクリックします。

この時点でAutoScalingグループが作成され、それと同時に2つのインスタンスが起動します。左メニューの「インスタンス」をクリックすると、新たに2つのインスタンスが一覧に表示されていることがわかります。

既存のインスタンス削除

AutoScalingでインスタンスを作成したので、既存のインスタンスを削除します。インスタンスの中から、AutoScalingTestServer1AutoScalingTestServer2にチェックを入れ、右上の「インスタンスの状態」 > 「インスタンスを終了」> 「終了」を押下します。

)8.png

これによって、ロードバランサ配下のインスタンスはAutoScalingTestTemplateによって作成されたインスタンスのみになりました。

先ほどアクセスしたロードバランサのDNS名に対してブラウザからアクセスすると、今までと同様にHello,AutoScalingTestが表示されているはずです。

オートスケーリングの確認

インスタンスが自動で作成されるかを確認してみます。先ほどAutoScalingTestGroupを作成したときに、「最小キャパシティ」を2にしました。これが正しく動作しているかを確認してみます。インスタンスの一覧を確認すると、現在AutoScalingTestTemplateによって起動されたインスタンスは2つあるはずなので、このうち1つを停止してみます。
どちらかのインスタンスにチェックを入れ、「インスタンスの状態」 > 「インスタンスの停止」 > 「停止」をクリックします。

9.png

この状態で少し待ち、再度上部の更新マークをクリックしてみます。そうすると、もう1台インスタンスが新しく立ち上がる様子が確認できます。

10.png
また、停止したインスタンスはしばらく待ったら勝手に「終了済み」になります。

おわりに

今回は基本的な設定について書きましたが、CloudWatchと組み合わせたり、ポリシーを設定したりすることでスケーリングを独自で設定することができます。これらの実践的な設定についてもさらに細かく学んでいきたいです。

1
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
1
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?