Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What is going on with this article?
@c9mau1

AWS AutoScaling 試してみた

More than 3 years have passed since last update.

はじめに

2017年にArchitecting on AWSのトレーニングを受けて、やっと先日AWS認定ソリューションアーキテクト-アソシエイトに合格しました。
勉強した内容をメモとして残しておくことを目的とします。
今回は、ちょっと苦労したAutoScaling。

AutoScalingとは

EC2(ECSも対応しているらしい)を負荷やインスタンスの状態に応じて
自動でサーバを追加したり、削除したりしてくれる便利機能です。
【公式マニュアル】
https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html

構成

一般的なAutoScalingの構成を作成したいと思います。
ELBを立てて、その下にEC2をマルチAZ構成でぶら下げます。
そして、負荷をかけて、自動でEC2が作成され、ELB配下に登録するとこまでを確認したいと思います。

スクリーンショット 2018-02-16 1.14.24.png

前提条件

  • 起動させたいEC2(apacheがインストールされている)インスタンスがあること
  • Subnetが各AZ毎に1つあること

構築順序

以下、5Stepで完成です。まぁ簡単。
1. ELB->ターゲットグループを作成する
2. ELB->ロードバランサー(ALB)を作成する
3. 起動する元となるAMIを準備する
4. AutoScaling->起動設定を作成する
5. AutoScaling->Auto Scaling グループを作成する

1. ELB->ターゲットグループを作成する

ELB配下に登録するインスタンスの情報を定義します。
マネジメントコンソール画面より[EC2ダッシュボード]画面を開きます。
左ペインより[ロードバランシング]->[ターゲットグループ]を選択します。

[ターゲットグループの作成]を選択します。

EC2でHTTPサイトを立てて負荷分散させるのでHTTPを選択します。
ターゲットグループ名に任意の名前を入力します。
ターゲットの種類はEC2なので、[instance]となります。
VPCは適切なものを選択します。

項目 memo
ターゲットグループ名 as-target-grp01
プロトコル HTTP
ポート 80
ターゲットの種類 instance
VPC vpc-xxxxx 任意のvpcを選択

ヘルスチェックの設定ではELBの監視プロトコルおよびパスを設定します。

項目 memo
プロトコル HTTP
パス /

ヘルスチェックの詳細設定では監視閾値を設定します。
ここで設定した閾値を超過するとELBの振り分け対象から除外されます。
AutoScalingとは監視設定が別ですので設計する際は検討が必要です。
※デフォルト設定とします。

項目 memo
ポート トラフィックポート
正常のしきい値 5
非正常のしきい値 2
タイムアウト 5秒
間隔 30秒
成功コード 200

デフォルトでは、
30秒間隔でインスタンスへポーリングを行い、
5秒応答がなかった場合、ヘルスチェクを失敗とみなす。
ヘルスチェックに2回連続して失敗した場合インスタンスを非正常とみなし
ELBの振り分け対象から除外するということになります。

入力が完了したら、[作成]を選択します。

そうするとターゲットグループが作成されます。

2. ELB->ロードバランサー(ALB)を作成する

左ペインより[ロードバランシング]->[ロードバランサー]を選択します。
[ロードバランサーの作成]を選択します。

[Application Load Balancer]の[作成]を選択します。
HTTPを振り分けるのであればALBを使うのがAWS推奨?のようです。
[Classic Load Balancer]で作成することは可能です。
若干料金が変わるようです。
スクリーンショット 2018-02-16 8.26.31.png

ロードバランサーの名前に任意の名前を入力します。
インターネットへ公開するのでスキーマは[インターネット向け]を選択します。

項目 memo
名前 as-elb-01
スキーマ インターネット向け
IPアドレスタイプ ipv4

HTTPを振り分けるのでリスナーにHTTPが登録されていることを確認することを忘れず。

ロードバランサーのプロトコル ロードバランサーのポート
HTTP 80

VPCは任意のものに変更します。
アベイライリティゾーン毎にSubnetを1つ選択してください。
タグは任意です。
スクリーンショット 2018-02-16 8.30.14.png

[次の手順: セキュリティ設定の構成]を選択します。

次の画面で警告が出ます。セキュアなプロトロルではないですよという優しさです。
[次の手順: セキュリティグループの設定]を選択します。

インバウンドHTTPを許可しているセキュリティグループを選択してください。
※なければここで作成することも可能です。
[次の手順: ルーティングの設定]を選択します。

ターゲットグループは[既存のターゲットグループ]を選択し、
先ほど作ったターゲットグループ[as-target-grp01]を選択します。
[次の手順: ターゲットの登録]を選択します。

登録済みのターゲットにインスタンスがなくてokです。
むしろあったらダメです。
AutoScaling側でインスタンス数を管理しているので
初期は0でないと意図したインスタンス数になりません。
[次の手順: 確認]を選択します。

ここで設定内容を確認し、[作成]を選択します。

これでELBの設定は完了です。やっとAuto Scalingの設定です。

3. 起動する元となるAMIを準備する

左ペインより[インスタンス]->[インスタンス]を選択します。
元となるインスタンスにチェックを入れて、
[アクション]->[イメージ]->[イメージの作成]を選択します。

項目 memo
イメージ名 as-ami-01
スキーマ ami for auto scaling
再起動しない チェックなし インスタンスが再起動する

インスタンスボリュームはそのままにします。

[イメージの作成]を選択します。

[イメージ]->[AMI]を選択します。
作成直後は[pending]となってますので[available]になるまで数分待ちます。

4. AutoScaling->起動設定を作成する

左ペインより[AUTO SCALING]->[起動設定]を選択します。
[Auto Scaling グループの作成]を選択します。
右下の[起動設定の作成]を選択します。

左ペインより[マイ AMI]を選択し、先ほど作成したAMI[as-ami-01]を選択します。

インスタンスタイプを選択します。
[t2.micro]で良いかと思います。
[次の手順: 詳細設定]選択します。

起動設定の名前を設定します。

項目 memo
名前 as-startup-setting-01
購入オプション チェックなし
IAMロール なし インスタンスが再起動する
モニタリング チェックなし インスタンスが再起動する

高度な詳細設定は任意で設定してください。
特に[ユーザデータ]は起動時にサーバ設定ができるので
サーバ毎の設定が必要な場合はここから設定ができます。
今回は、ウェブページを表示した際にどこのサーバに接続したかわかるように
起動時に[index.html]にホスト名を出力させたいと思います。

[●テキストで]を選択して以下を貼り付けます。
#!/bin/bash
hostname > /var/www/html/index.html

[次の手順: ストレージの追加]選択します。

ストレージはそのままで[次の手順: セキュリティグループの設定]選択します。
インバウンドHTTPとSSHを許可しているセキュリティグループを指定します。

[確認]選択します。

設定を確認し、[起動設定の作成]を選択します。

5. AutoScaling->Auto Scaling グループを作成する

続いて[Auto Scaling グループの作成]にやっと着手します。

項目 memo
起動設定 as-startup-setting-01
グループ名 as-autoscaling-grp01
グループサイズ 開始時 2 インスタンス
ネットワーク vpc-xxxxx 任意のvpcを選択
サブネット subnet-xxxxx 2つのsubnetを選択

高度な詳細を以下のとおり設定します。

項目 memo
ロードバランシング チェックあり
Classic ロードバランサー -
ターゲットグループ as-target-grp01
ヘルスチェックのタイプ EC2
ヘルスチェックの猶予期間 300秒
モニタリング -
インスタンスの保護 -
サービスにリンクされたロール AWSServiceRoleForAutoScaling

[次の手順: スケーリングポリシーの設定]選択します。

次の画面で[スケーリングポリシーを使用して、このグループのキャパシティを調整する]を選択します。
すると、スケーリング範囲が選択できるようになります。
スケーリング範囲は、2および4インスタンス。としました。

その下のスケールグループサイズにてEC2の負荷状況に応じて
スケールアップさせる設定があります。
EC2のCPU使用率を監視して、50%以上になった場合、
スケールアップするという設定です。
50%より下回った場合、スケールイン(インスタンスが終了)されます。

項目 memo
名前 Scale Group Size デフォルト値
メトリクスタイプ CPUの平均使用率
ターゲット値 50
インスタンスは 300 スケーリング後にウォームアップする秒数
スケールインの無効化 チェックなし

[次の手順: 通知の設定]選択します。

通知の設定は必要に応じて設定してください。
[次の手順: タグを設定]選択します。

タグの設定も必要に応じて設定してください。
[確認]選択します。

設定を確認し、[Auto Scaling グループの作成]を選択します。

以上で設定は完了です。

作成完了後からAuto Scalingが動作します。
[AUTO SCALING]->[Auto Scaling グループ]で
[as-autoscaling-grp01]を選択し、[インスタンス]タブにて
インスタンスの状態が確認できます。
インスタンスが[Healthy]となったらインスタンス作成完了です。

左ペインより[ロードバランシング]->[ターゲットグループ]を選択し、
[ターゲット]タブにてインスタンスのリッスン状態を確認できます。
インスタンスの状態が[healthy]となったら接続可能です。

Let's Connect!

左ペインより[ロードバランシング]->[ロードバランサー]を選択します。
[as-elb-01]を選択し、[DNS名]をコピーします。
ブラウザに貼り付けて、EC2のホスト名が表示されたらokです。

まとめ

ぽちぽちとやればすぐにAuto Scalingできちゃいます。
簡単ですね。
かなり長文となってしまいました。
もっとスマートに書けるよう、何回かに分けたりした方がいいですね。

28
Help us understand the problem. What is going on with this article?
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
c9mau1
人生 Try & Error

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
28
Help us understand the problem. What is going on with this article?