アプリケーションサーバの負荷が増大したため増台したいが、コスト的に普段は停止しておきたい。
しかし手動で操作していては人的コストが増加してしまう。
こういった経験は無いでしょうか。
もしかしたらその悩み、AWS AutoScaling でサーバ環境を構築することで解決できるかもしれません。
そもそもAWS Auto Scalingとは?
AWS Auto Scaling は、複数のサービスにまたがる複数の AWS リソースを簡単かつ安全なパフォーマンスを維持できるようアプリケーションを監視し、自動で容量の増減(スケーリング)をするサービスです。AWS Auto Scaling を使えば可能な限りコストを削減しつつ、アプリケーションのパフォーマンスの最適化を図れます。
AWS Auto Scaling は、主に次のようなリソースのスケーリングプランを構築します。
- Amazon EC2におけるインスタンスとスポットフリート (スポットインスタンスのセット)
- Amazon ECS タスク (AWS上でDockerを使うためのサービス)
- Amazon DynamoDB (NoSQLデータベース) におけるテーブルとインデックス
- Amazon Aurora (Amazon RDSのデータベースエンジンの一つ) におけるレプリカ
AWS Auto Scalingでできること
アクセスや需要に対する容量を常に最大値に設定していると、余分なコストやパフォーマンスが発生してしまいます。しかし、毎回、人間が容量の増減を予測し、適切な判断をするのは困難ですし、予測が外れてしまうこともあるでしょう。
こんな場合、AWS Auto Scaling を活用すれば、必要に応じて容量を増減でき、コストやパフォーマンスを最適化できます。
AWS Auto Scalingの料金
AWS Auto Scaling 自体の利用は無料ですが、アプリケーションを実行するのに必要なリソースの料金と Amazon CloudWatch モニタリングには料金がかかります。どちらも使用量に応じて価格が変動する従量課金制なので、過度な支出を抑えられます。
この記事の対象者
- 既存のサーバ環境の運用で悩んでたり、新しくサーバを作るにあたって AWS AutoScaling を使いたいと思っている方。
- Web サーバの構築手順自体は割愛するため Linux を用いた Apache や Nginx での Web サービス構築経験を有する方。
本設定手順の想定作業時間
30 分 ~ 1時間
技術ドキュメント視点でのAWS AutoScaling
AWS の技術ドキュメント的概要で言えば「Auto Scalingグループと呼ばれる EC2 インスタンスの集合体」となります。
それでは分かりにくいので要約して説明すると構成自体は gw から app 間での負荷分散環境ですが、AutoScaling を導入すると app サーバの台数をいつでも増減できるようになります。
設定によっては負荷状況に応じた自動増減も可能となるでしょう。
便利ですね!
導入手順
導入には以下の作業が必要です。
- サーバ増築時、Template とする EC2 Instance の構築
- EC2 Instance の AMI Image の作成
- ELB(gw) に適用する target group の作成
- ELB(gw) の作成
- AutoScaling 起動設定の作成 ( Launch Configrations )
- AutoScalingGroup の作成
- 実際の動作を確認する
それでは早速やっていきましょう!
各ステップの解説を進めていきます。
手順1. サーバ増築時、Template とする EC2 Instance の構築
まずは AWS Management Console にログインし、EC2 Instance を立ち上げましょう。
EC2 Instance の作成手順に関しては本記事の主題ではないため、簡単な手順を記載しておきます。
- AWS Management Console に接続する。
- EC2 サービスの管理画面を開く。
- インスタンスの一覧画面を開く。
- 「インスタンスを起動」ボタンで EC2 Instance の作成ウィザードを開く。
- 「AMI の選択」で、特段指定がなければ「Amazon Linux 2 AMI 」を選択する。
- 「インスタンスタイプの選択」では無料プラン対象である「t2.micro」を選択し、「次のステップ」
- 「インスタンスの詳細の設定」では設定変更なしで「次のステップ」
- 「ストレージの追加」では必要なストレージ容量を入力し、「次のステップ」
- 「タグの追加」では Management Console 上での表示名を設定するため、キー「Name」の value を追加、値にはサーバ名を入力する。Auto Scaling の template を作るためのインスタンスとなるため、<ServerName>_base といった名称だと管理しやすい。
- 「セキュリティグループの設定」では「新しいセキュリティグループを作成する」を選択した状態でセキュリティグループ名、開放したいポートを追加し、「確認と作成」
- 「インスタンス作成の確認」で設定内容を確認し、問題なければ「起動」
これにてインスタンスが作成されます。
インスタンス作成時に pem ファイルを作成するか確認が入るため、既存の pem がなければ新規作成、ダウンロードしておくことで ssh 接続が可能となります。
本記事では web サービスを前提としているため apache か nginx をインストールし、web サービスを立ち上げていることを前提に移行の手順は説明していきます。
展開するサービスに合わせて適切なミドルウェアのインストール、及びセキュリティグループ設定をしておいてください。
手順2. EC2 Instance の AMI Image の作成

展開元となる EC2 Instance の構築が完了したら、次は AMI Image の作成です。
ここで作成する AMI Image が AutoScaling でサーバを展開する際の土台となります。
では EC2 インスタンスの一覧画面を開き、サーバを選択した状態で「アクション」-「イメージとテンプレート」-「イメージの作成」を選択します。
「イメージを作成」画面では取得する AMI Image の名前、設定、タグを設定し、画面右下の「イメージを作成」ボタンをクリックします。
名前は後から変更できないため、いつ作ったのか一目で分かり且つ混乱しないよう以下の設定例のように末尾に日付時刻を入れておくと便利です。
設定例 : ServerName_base_202104081136
fix や last といった曖昧な表現は将来的に管理が難しくなるため使わないようにしましょう。
手順3. ELB(gw) に適用する target group の作成
EC2 サービスの管理画面で ELB も作成できます。
まずはターゲットグループから作っていきましょう。
左セクションの「ロードバランシング」の「ターゲットグループ」を選択します。

ターゲットグループ一覧画面が表示されるため、「Create target group」から新規作成画面を開きます。

「Specify group details」では設定例を参考に入力し、次の画面へ進みます。

– 設定例 –
Basic configuration
Choose a target type : Instances
Target group name : <target group name>
Protocol : http
Port : 80
VPC : 自作しているものがなければ変更不要
Protocol version : HTTP1
Health checks
Health check protocol : HTTP
Health check path : /
Advanced health check settings : 任意
Tags
AddTag : Key「Name」 - Value「<target group name>」
「Specify group details」画面での入力完了後表示される「Register targets」画面では設定変更せず、画面右下の「Create target group」を選択します。

これにて target group の設定は完了です。
手順4. ELB(gw) の作成
左セクションの「ロードバランシング」における「ロードバランサー」を選択します。

「ロードバランサーの作成」をクリックします。

「ロードバランサーの種類の選択」では一番左の「Application Load Balancer」を選択します。

「ロードバランサーの設定」画面の設定例は以下の通りです。
名前 : ロードバランサーのサーバ名。任意
リスナー : ssl 通信を構築する場合、「HTTPS」プロトコルを追加
アベイラビリティーゾーン : 特段指定がなければ全てチェック
アドオンサービス : 設定不要
タグ : 設定不要
設定が完了したら画面右下の「次の手順」ボタンをクリックします。

「セキュリティ設定の構成」画面では HTTPS プロトコルを追加している場合に証明書の設定画面が表示されます。
HTTP Only の場合は以下の画面が表示されます。

HTTPS を使用する場合は証明書の選択を行ってから「次の手順」ボタンをクリックしましょう。
※証明書の登録に関しては ACM と呼ばれるサービスを用いるため、そちらは別記事にて紹介する予定です。
「セキュリティグループの設定」画面が表示されたら「新しいセキュリティグループを作成する」を選択します。
セキュリティグループの名前と説明は任意のものを設定しましょう。
必要なインバウンドルールを追加したら、「次の手順」ボタンをクリックします。

ボタンクリック後表示される「ルーティングの設定」では「ターゲットグループ」で「既存のターゲットグループ」を選択します。
対象は手順3で作成したターゲットグループとなります。
「次の手順」を押すと新規にターゲットグループを登録する場合は Instance の設定画面が表示されますが、既存のターゲットグループを指定しているため設定画面は表示されません。
最後にここまでの設定画面が表示されるため、内容を確認し ELB(gw) を作成しましょう。
以上で ELB (gw) の設定は完了です。
AWS|ELBとは?ロードバランサーの種類や特徴、実例で負荷分散させる方法を解説
手順5. AutoScaling 起動設定の作成
※ 本項目は起動テンプレートの作成で代用しても問題ありません。
左セクションの「Auto Scaling」における「起動設定」をクリックします。

起動設定の一覧画面が表示された「起動設定の作成」ボタンをクリックします。

「起動設定の作成」画面では以下の設定を行います。

・起動設定名 : 任意
・Amazon マシンイメージ : 手順2で作成した AMI Image
・インスタンスタイプ : 設定したいスペックを設定(後から変更不可)
・追加設定(基本は初期設定のままで問題なし)
購入のオプション:任意
IAM インスタンスプロファイル : 任意
モニタリング : 任意
高度な設定 : 任意
※高度な設定に含まれる「ユーザーデータ」について、固定 IP を振りたい場合はここに EC2 インスタンス起動時に実行するshell を組み込みましょう。
・ストレージ : AMI から自動設定されたままで問題なし。増築は任意
・セキュリティグループ : 「既存のセキュリティグループを選択する」を選択し手順1で作成した EC2 インスタンスと同じものを設定
・キーペア : 既存のでも新規でもどちらでも。保存を忘れないこと。
設定が完了したら「起動設定の作成」ボタンをクリックします。

これにて起動設定の作成は完了です。
手順6. AutoScalingGroup の作成
左セクションにおける「AUTO SCALING」の「Auto Scaling Group」を選択します。

「Auto Scaling Group を作成する」をクリックします。

「起動テンプレートまたは起動設定を選択する」画面で、「名前」には作成する auto scaling group の名称を入力します。後から変更できないため適切な名前を設定しましょう。
次に起動テンプレートを選択します。手順5で作成したのが起動テンプレートならばそのまま「起動テンプレート」の項目で選択、起動設定で作成している場合は「起動設定に切り替える」をクリックしてから設定を適用しましょう。
設定が完了したら「次へ」ボタンをクリックします。

次に「ネットワーク」の設定です。
「VPC」はデフォルトのままで問題なし、「サブネット」は選択に出てくるものを全て登録しておけば問題ありません。

「詳細オプションを設定」画面では、まず最初の選択項目で「既存のロードバランサーにアタッチ」を選択します。

選択が完了すると以下のような設定画面が表示されるため、「既存のロードバランサーターゲットグループ」に手順3で作成していた target group を選択します。
「ヘルスチェック」「その他の設定」は監視やヘルスチェックの指定があれば適宜入力してください。
デフォルト設定のままでも問題ありません。

「グループサイズとスケーリングポリシーを設定する」画面が表示されたら「グループサイズ 」は全て 1 で設定しましょう。
この設定の場合サーバ台数は 1 台で固定になります。
数字を全て 2 にすれば 2 台、 3 にすれば 3 台と挙動となります。
台数固定の場合は全て同一の数値にしますが、EC2 Instance の台数を自動調整したい場合はアクセス想定に応じて適宜調整が必要です。

「スケーリングポリシー」ではグループサイズの範囲内で、負荷状況に応じた EC2 Instance の自動増減を自動で動作させる場合の設定になります。
「平均 CPU 使用率」や「アクセスリクエスト数」でも設定できるため、要件に合わせて設定しましょう。
「インスタンスのスケールイン保護」に関しては負荷が安定した際のリソース調整で Instance を自動で削除するか決められます。
ログ等の確認をしたい場合はチェックしておくと便利と言えるでしょう。

「通知の設定」に関して、こちらでは AutoScaling により Instance が立ち上がった、スケールアウトしたといった情報をメールで受け取れることができる機能です。
通知が欲しい場合は「通知の追加」から設定しましょう。

最後に「タグを追加」の画面です。
自動起動した EC2 インスタンスに管理画面上の名前を設定することが可能で、運用管理上とても便利なので最低限 Name キーは登録しましょう。
以下の画像のように設定したら「次へ」ボタンをクリックします。

以上で設定は完了です!
設定の確認画面が表示されるため、内容に問題なければスクロール最下部の「Auto Scaling グループを作成」で作成を完了しましょう!

作成が完了すると自動で EC2 Instance が起動されるため、EC2 Instance の一覧画面を開いておいてください。
手順7. 実際の動作を確認する
ここまできたら後は確認するだけです。
ELB の DNS 名からアクセスが可能なため、対象サーバの機能に応じたアクセスを検証してみてください。

アクセスに成功すれば全ての手順が完了です。
あとはサーバの負荷状況や一時的に高負荷が見込まれる場合に適宜台数を調整してください。
お疲れ様でした!