Auto Scalingを使用しEC2を1台で運用する

Auto Scalingを使用しEC2を1台で運用する:


概要

ネットワーク構成などの相談に乗っていると、下記のパターンで以下の相談を受けることが多々あります。

  • お金はできるだけかけたくない。(1台で運用したい)
  • 落ちている時間があってもいいので自動的に復旧(新たなインスタンスを立てる)してほしい。
よくある相談構成図(route53を忘れてた。。。)


スクリーンショット 2018-12-19 9.02.06.png


そんな時にお手軽にできる1つの方法を紹介しようと思います。

比較的簡単に構成できるようコア部分だけの構成にしてあるので、実際の運用の際には紹介する構成に肉付けしていくのがいいと思います。

また、以下の構成を自分で理解し組み立てることは、ソリューションアーキテクトアソシエイトなどの試験勉強にもなると思います。ぜひご活用ください。

もっとこうした方がいいんじゃない?という方はコメントでご指摘よろしくお願いします。


この記事を読んで幸せになれる方

  • AWS初心者(VPC、サブネット、EC2のなんとなくな理解)で、手を動かしたい人。
  • 安くスモールなアプリケーションを自分の手で運用したいとお思いの方。


最終構成図イメージ



スクリーンショット 2018-12-19 9.06.22.png



事前準備

  • AWSアカウントの取得


注意事項

以下の作業、私はシドニーリージョンで作業します。(東京リージョンはプライベートなVPCが多くあるため。)

リージョンによる違いはほぼないので手を動かす方はお好きなリージョンで作業してください。

AWSリソースにつける名前は各自変更してしまっても大丈夫です。

なお、サブネットって?CIDRって?といった基本事項は解説しないので都度ご自分で調べてお進みください。


Hands on


Auto Scalingを設定するネットワーク構築


VPCの作成

左上のサービスタブからVPCと検索し、VPC設定画面へ


1_VPC.png


サイドバーのVPCをクリックし、CreateVPCボタンをクリック
2_VPCButton.png


以下の情報を入力し、右下のCreateボタンからVPCを作成。

Name tag: Qiita_VPC 
IPv4 CIDR block: 10.0.0.0/16 


3_VPC_CIDR.png

4_VPC_Created.png



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

VPC内のEC2インスタンスがインターネットと通信できるよう、インターネットゲートウェイ(IGW)を作成します。

サイドバーのインターネットゲートウェイを選択し、インターネットゲートウェイの作成ボタンをクリック。


5_IGW_BUTTON.png


以下を入力し作成ボタンをクリック。

Name タグ: Qiita_IGW 


6_IGW_CREATE.png


作成したIGWを選択肢、アクションボタンのVPCにアタッチを選択。


7_IGW_Attach_Btn.png


先ほど作成した Qiita_VPCを選択し、アタッチボタンをクリック。


8_IGW_Attach.png


状態が attached になり、IGWがVPCにアタッチされました。


9_IGW_Attached.png



サブネットの作成&自動パブリックIP割り当ての設定

最終構成図イメージであげたような2つのAZ(アベイラビリティゾーン)にまたがる構成にしたいので、2つのサブネット(今回はパブリックなサブネット)を作成します。まず1つ目のサブネットを作成していくので下記手順を参照してください。

サイドバーのサブネットを選択し、サブネットの作成を選択。

遷移先画面にて以下の情報を入力し、作成ボタンをクリック。

名前タグ:Qiita_PUB_SUB_a 
VPC:Qiita_VPC 
アベイラビリティゾーン:ap-southeast-2a (東京リージョンならap-northeast-1a) 
IPv4 CIDR ブロック: 10.0.10.0/24 


10_PUB_SUB.png


同様にして2つ目のサブネットを作成する。

2つ目のサブネット作成の際に入力する情報例は以下。


名前タグ:Qiita_PUB_SUB_c

VPC:Qiita_VPC

アベイラビリティゾーン:ap-southeast-2c (東京リージョンならap-northeast-1c)

IPv4 CIDR ブロック: 10.0.11.0/24



11_2_Subs.png


作成した1つのサブネットを選択し、アクションから自動割り当てIP設定の変更を選択。


12_Auto_IP.png


IPv4の自動割り当てを有効にして保存。

もう1つのサブネットにも同様の設定をする。


13_Auto_IP_ENABLE.png



サブネットルートテーブル更新

サブネットのルーティングを変更する。

作成したサブネットの1つを選択肢、ルートテーブルタブからルートテーブルID(画像上のrtb-0b26e981cc9fe8d9d部分)をクリック。


14_RT_ID.png


Routesタブを選択し、EditRouteボタンをクリック。


15_Edit_R.png


Add routeボタンをクリックし、以下の情報を入力しSave Routeボタンをクリック。

Destination:0.0.0.0/0 (デフォルトルート、外の世界へ通じるIPアドレスです) 
Target: Internet GateWayからQiita_IGWを選択 


16_Edit_route.png


変更後のRoutesタブ。


17_After_routeEdit.png



セキュリティグループの作成(EC2用)

インスタンスに対するファイアウォールの役割を果たすセキュリティグループ(SG)を作成します。

今回、オートスケーリングの対象EC2インスタンスはパブリックなサブネットに配置されるます。そのことを踏まえ作成しましょう。

左上のサービスからEC2を検索し、選択。


18_EC2.png


サイドバーのセキュリティグループを選択し、セキュリティグループの作成ボタンをクリック。

クリック後に現れるモーダルに以下の情報を入力し、作成ボタンをクリック。

セキュリティグループ名:Qiita_WEB_server_SG 
説明:Qiita_WEB_server_SG 
VPC:Qiita_VPC 
セキュリティグループのルールにはHTTPとSSHを追加し、画像のように設定してください。


19_SG.png


これでWEBサーバ用のSGが作成できました。区別しやすいようにName欄にグループ名と同じ値を設定しておきます。


20_setting.png



セキュリティグループの作成(ELB用)

次はロードバランサー用のセキュリティグループ(SG)を作成します。

先ほどのセキュリティグループを作った手順と同様、セキュリティグループの作成ボタンをクリックし、以下の情報を入力して作成してください。

セキュリティグループ名:Qiita_ELB_SG 
説明:Qiita_ELB_SG 
VPC:Qiita_VPC 
ELBはHTTPのみ受け付けるよう、インバウンドのルールにHTTPを画像のように追加してください。


21_ELB_SG.png


こちらもわかりやすくするためにNameにグループ名と同じ値を設定します。


22.png



ターゲットグループの作成

ターゲットグループとは、ロードバランサーが受け付けたリクエストの振り分け先のことです。

サイドバーのターゲットグループを選択し、ターゲットグループの作成ボタンをクリック。

モーダルに表示された項目のうち以下の4つの情報を入力&変更しターゲットグループを作成します。

ターゲットグループ名: Qiita-TG 
VPC: Qiita_VPC 
(ヘルスチェックの詳細設定) 
正常のしきい値:2 
間隔:10 


23.png



ロードバランサーの作成

ターゲットグループの作成が完了したので、ロードバランサーを作成します。

サイドバーのロードバランサーを選択し、ロードバランサーの作成ボタンをクリックしてください。

今回はWEBサーバが対象なので、遷移した画面で一番左のApplication Load Balancerを選択します。


24.png


ステップ 1: ロードバランサーの設定画面では、以下の項目を入力&編集してください。

名前:Qiita-ALB 


25.png


また、アベイラビリティーゾーンの項目では、VPCとしてQiita_VPCを選択し、作成した2つのサブネットを全て選択してください。

最後に区別しやすいよう、タグ項目でName、Qiita-ALBと入力します。


26.png


以上のように入力したら、セキュリティグループの設定画面まで何もせずに手順を進めます。

セキュリティグループの設定画面では、既存のセキュリティグループから先ほど作成したQiita_ALB_SGを選択し次の手順へと進みます。


27.png


ルーティングの設定画面で、以下の入力&修正をし、何もせずに最後の確認画面へと進みます。

ターゲットグループ:既存のターゲットグループ 
名前:Qiita-TG 


28.png


最後の確認画面で入力が間違っていないかどうか確認し、一覧でQiita-ALBが作成されているかどうか確認しましょう。一覧画面で状態がavailableになったら完了です。


29_Available.png


ここまででAuto Scalingを実施する前段階の構成が完了しました。

構成図は以下のようになります。



スクリーンショット 2018-12-19 9.07.59.png



Auto Scalingの設定

では、本題であるAuto Scalingの設定をしていきます。


起動設定の作成

起動設定はAuto ScalingでどのようなEC2インスタンスを起動していくのかという設定をします。

サイドバーの起動設定を選択し、起動設定の作成をクリックしてください。

遷移先でEC2テンプレートが選択できるので、今回は上から2番目のAmazon Linux AMIを選択して次の手順へ進んでください。


30.png


インスタンスタイプは無料枠対象のt2.microを選択し、次の手順へ。


31.png


起動設定の作成画面では以下の項目を入力&編集して次の手順へ進みましょう。

高度な詳細項目でユーザーデータを入力しています。これはインスタンスが立ち上がる際にシェルスクリプトを実行してくれます。今回はWEBサーバを立てたいので最低限の機能が揃うシェルスクリプトを記載しました。

userData.sh
#!/bin/bash 
sudo yum update -y  
# apacheをインストール 
sudo yum install httpd -y 
# apacheの起動 
sudo service httpd start 
# /var/www/html/ ディレクトリ以下にI'm healthyと記入されたindex.htmlを作成 
sudo echo "I'm healthy" > /var/www/html/index.html 


32.png


セキュリティグループの設定では既存のセキュリティグループからQiita_WEB_server_SGを選択。


33.png


確認画面で誤りがないことを確かめ、起動設定を作成します。

最後にキーペアの作成に関して尋ねられるので、作成してなければ下記の画面のように新しくキーペアを作成します。

キーペアはダウンロードし、大切に保管しましょう。


34.png



Auto Scalingグループの作成

本題のAuto Scalingグループを作成します。Qiita_VPCのVPCIDが必要になるので、あらかじめVPCコンソールへいき、Qiita_VPCのIDを控えておきます。

サイドバーのAuto Scalingグループを選択し、Auto Scalingグループの作成ボタンをクリック。

遷移先画面で起動設定を選択し、既存の起動設定からQiita_LCを選択。次のステップへ進みます。


35.png


遷移先画面の項目で以下のように入力&編集しましょう。

グループ名:Qiita_ASG 
ネットワーク:Qiita_VPCのIDを選択 
サブネット:作成した2つのパブリックなサブネットを選択 
高度な詳細 
ロードバランシング:チェックを入れる 
ターゲットグループ:Qiita-TG 
ヘルスチェックのタイプ:ELBにチェック 


36.png

37.png


上記の設定をし、ELBに配下のインスタンスの状態をチェックさせ、Auto Scalingの判断をさせます。

次の画面では このグループを初期のサイズに維持する にチェックします。これと前画面の設定により、最低1つ最大1つのインスタンスを立てるAuto Scalingポリシーを設定することができます。


38.png


タグの設定画面まで進みます。こちらで設定するタグはAuto Scalingで立ち上げたインスタンスに付与することができます。今回は以下の画像のようなタグを設定しましたが、各自わかりやすいタグをつけてあげるとインスタンス管理が便利になります。


39.png


確認画面までいったらAuto Scalingグループを作成しましょう。しばらくすると設定したサブネットにインスタンスが立ち上がります。EC2コンソールへ移動し、確認しましょう。(EC2コンソールへは左上のServicesから移動できます。)

インスタンスが以下の画面のように完全に立ち上がり、(先ほど指定したタグがしっかり付与されています)


40.png


ターゲットグループのターゲットタブに目的のインスタンスがステータスhealthyで立ち上がっていたらうまく設定ができています。


41.png


最終確認として、ロードバランサーの説明タブにあるDNS名をブラウザに入力し、WEBサーバとして立ち上げたインスタンスにアクセスできるかどうか確認しましょう。I'm healthyの文字が表示されていれば成功です。


42.png

43.png



擬似障害を起こそう

落ちている時間があってもいいので自動的に復旧(新たなインスタンスを立てる)してほしい。
最初に述べた以上の要求を満たすために擬似的な障害を起こしてみましょう。様々な再現方法がありますが、今回はシンプルにインスタンスを手動で停止しましょう。手順は以下の通りです。

1. Auto Scalingで立ち上がったインスタンスを停止。

2. ロードバランサーのDNS名にアクセスし、サーバが落ちているか確認。

3. インスタンス一覧に戻り、新たなインスタンスが作成されるかを確認。

4. しばらくしてからロードバランサーのDNS名にアクセスし、障害発生前と変わりなく I'm healthyが確認できるか確認。

以下、画像を確認しながら手順を辿っていきます。

  1. Auto Scalingで立ち上がったインスタンスを停止。


    44.png
  2. ロードバランサーのDNS名にアクセスし、サーバが落ちているか確認。(503)


    45.png
この時ターゲットグループをチェックすると、停止したインスタンスはdraining(簡単に言うとターゲットから切り離し準備中)状態になっています。


46.png


  1. インスタンス一覧に戻り、新たなインスタンスが作成されるかを確認。
    新しいインスタンスが準備されています。
    48.png

ターゲットグループは以下のような感じです。


47.png


  1. しばらくしてからロードバランサーのDNS名にアクセスし、障害発生前と変わりなく I'm healthyが確認できるか確認。
    ターゲットグループが以下のように変わります。
    49.png

DNS名にアクセスするとI'm healthyです。


50.png


インスタンスの状態は以下のようになっています。


51.png


ダウンタイムは少しあったものの、最初の要件が満たせたのではないのでしょうか。


後片付け

  • Auto Scalingグループの削除
  • ELBの削除
  • VPCの削除
以上で今回準備したリソースは全て消えてくれます。


最後に

思った以上に盛りだくさんになってしまいました。

もし最後まで読んでくれた方いましたらありがとうございます。

ですが、自分もAWSをさわり始めた頃は先輩や知り合いに聞いてドキュメントを読み、とにかく最初は写経のような心境でネットワークを構成し感覚を掴みました。これから以上のようなAuto Scaling環境を整えたい人、AWSを勉強していこうと思っている方はぜひ復習してみてくださいね。

何か不都合あればコメントでご指摘お願いします。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)