AWS入門ブログリレー2024 〜Amazon EC2 Auto Scaling編〜

2024.04.17

はじめに

おのやんです。

当エントリは弊社AWS事業本部による『AWS 入門ブログリレー 2024』の24日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2024 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。今回のテーマはAmazon EC2 Auto Scalingです。

Amazon EC2 Auto Scalingとは?

Amazon EC2 Auto Scaling(以下、EC2 Auto Scaling)とは、あらかじめ設定したテンプレートなどに合わせて、EC2インスタンスを増減することができるAWSの機能になります。

例えばWebサーバーに対してアクセスが急増した時など、何らかの理由でEC2インスタンスへの負荷が高まった場合に、EC2インスタンスそのものの数を増やすことでサーバー負荷を減らすことができます。サーバーのスペックそのものを上げる「垂直スケーリング」と対比させて、「水平スケーリング」と呼ぶこともあります。

Auto Scaling グループ

EC2 Auto Scalingを設定するという作業は、突き詰めると「EC2 Auto Scalingグループを作成する」という作業になります。EC2 Auto Scalingグループを作成する中で、EC2インスタンスの起動設定やスケーリングの条件などを細かく指定していきます。

EC2 Auto Scalingグループが作成された時に、そこに設定されていたEC2インスタンス希望数に合わせて、サブネット内でECインスタンスが自動で起動します。この状態でEC2 Auto Scalingグループ内のインスタンス数を設定したり、CloudWatchメトリクスなどを設定して一定の状態を保ったりします。

EC2 Auto Scaligの設定

それでは、実際にEC2 Auto Scalingグループを作成して、EC2インスタンスの作成・簡単なスケールインまでAWSコンソール上で確認してみたいと思います。

AWS環境上で、あらかじめVPCを作成しておきます。今回は2つのプライベートサブネットを作って、その上にEC2 Auto Scalingグループ経由でEC2インスタンスを作成します。

EC2のコンソール画面左側のナビゲーションバーに、「Auto Scaling」の項目があるので、こちらからEC2 Auto Scalingを画面に移動します。

こちらのコンソール画面から、「Auto Scalingグループを作成する」のボタンを押下します

ここから、作成したいEC2 Auto Scalingグループの設定に移っていきます。適当にEC2 Auto Scalingグループ名を入力し、起動テンプレートを選択します。本ブログで使用している起動テンプレートは過去2回更新しているため。「バージョン」の項目についてはデフォルトの(1)ではなく3を選択しておきます。

なお、ここではあらかじめEC2の起動テンプレートを作成しておく必要があります。EC2コンソールのナビゲーションバーからも起動テンプレートのコンソールに飛べますので、こちらから作成しておくようにしてください。

次の画面に移動すると、ネットワークの設定項目が出てきます。こちらで、EC2 Auto Scalingグループを適用するVPC、サブネットを設定していきます。

こちらの次は、EC2 Auto Scalingグループ内で作成できるEC2インスタンスの数の設定を行なっていきます。

「希望するキャパシティ」とは、EC2 Auto Scalingグループ作成時に最初に作成されるEC2インスタンスの個数になります。今回は2つに設定しておきましょう。

また、「最小の希望する容量」「最大の希望する容量」は、それぞれEC2 Auto Scalingグループ内で作成できるEC2インスタンスの個数の最小値・最大値です。希望するキャパシティの値を2に設定しているため、今回は最小を1、最大を3に設定しておきます。

なお、今回はスケーリングポリシーについては設定なしで進めます。

残りの設定は全てデフォルトで進めます。こうしてEC2 Auto Scalingグループの作成が完了すると、コンソール画面から確認できるようになります。

EC2 Auto Scalingグループ作成直後は、このように各サブネットにEC2 Auto Scalingグループがまたがっているだけの状態になります。

ここで、希望するキャパシティを2に設定しているため、EC2 Auto Scalingグループの作成が完了すると、EC2インスタンスの起動も開始します。数分経てば、こちらのようにコンソール画面からEC2インスタンスが起動していることが確認できます。

構成図から見ると、こちらのようにEC2インスタンス2台が起動しています

EC2 Auto Scalingグループ2台が作成されていることが確認できましたので、ここから手動でキャパシティを変更したいと思います。

Auto Scaling グループコンソール画面の詳細タブより、「編集」のボタンがありますのでこちらを押下します。

先ほど作成したEC2 Auto Scalingグループの設定では、希望キャパシティが2、最大キャパシティが3になっていましたので、ここを共に1に設定してみます。

こちらを設定した後に数分待機すると、ターゲットとなっていたEC2インスタンスのうち1台が削除されます。最大数が1になったので、その数に合わせてEC2インスタンスの台数を自動で合わせてくれます。

自動スケーリングポリシーの設定

ここまで、ごく単純な構成でEC2 Auto Scalingを設定してきたと思います。ここで、もう少し詳しい設定を整理していきたいと思います。

さきほどのやってみた手順では飛ばしましたが、EC2 Auto Scalingを設定する際にはスケーリングポリシーを設定できます。

設定できるスケーリングポリシーとしては、具体的に以下が挙げられます。

スケーリングポリシー 概要 設定の例
ターゲット追跡スケーリング 追跡したいCloudWatchメトリクス(CPU使用率、リクエスト数など)の特定の目標値を維持するように、自動的にインスタンス数を調整します。 「CPU使用率60%」をターゲットとすると、CPUの使用率が60%にとどまるようにEC2インスタンス数を自動で調整する
ステップスケーリング 監視したいCloudWatchメトリクス(CPU使用率な、リクエスト数など)の閾値を段階的に設定できますあらかじめ設定したインスタンス数を増減させます。 EC2インスタンスに関して、CPU使用率が50%以上70%未満で1個追加・70%以上90%未満で3個追加する
スケジュールドされたスケーリング 特定の時間にインスタンス数を増減させます 毎週日曜23時以降はアクセスが増えるため、この時間帯にEC2インスタンスを3個追加する

ライフサイクルフック

EC2 Auto Scalingでは、スケールインやスケールアウトによって、インスタンスの起動や終了などのイベント(ライフサイクルイベント)が発生します。このライフサイクルイベント時にユーザー定義の操作を実行できる機能が、ライフサイクルフックです。

例えばEC2インスタンス起動時にインスタンスの起動前にアプリケーションの初期設定などを設定したり、EC2インスタンス終了時にインスタンスの終了前にログの退避やデータのバックアップ処理などを設定できます。

ライフサイクルフックは、EC2 Auto Scalingグループのインスタンス管理のタブから設定できます。ユーザーデータなどカスタム処理が設定されている状態でこちらを設定することで、インスタンスの起動・終了時に一定時間待機し、その間にユーザーデータなどで設定した処理を実行する運用が可能になります。

ウォームプール

ウォームプールは、起動に⻑い時間のかかるインスタンスを事前起動できる仕組みです。

EC2 Auto Scalingにおいて、EC2インスタンスの起動時間が遅いと、それだけスケールの速度も遅くなります。この状態はパフォーマンスに影響する可能性があるため、ウォームプールを使って停止状態のEC2インスタンスを待機させます。実際にEC2インスタンスのスケールアウトが実行される際には、待機状態のEC2インスタンスを移動することで迅速に対応可能となります。

終わりに

以上、『AWS 入門ブログリレー 2024』の24日目のエントリ『(サービス名)』編でした。 次回、4/18は弊社とーちによる「Amazon EKS編」の予定です!