ウェブサイトまたはアプリケーションを運営するには高額な費用がかかる必要はありません。実際、ユーザーに優れた体験を提供しながら、リソースの節約方法があります。その一つの例がAWS EC2 Autoscalingです。
EC2 Auto Scalingは、定義した条件に応じてAmazon EC2の容量を自動的にスケールアップまたはスケールダウンするのに役立つサービスです。このチュートリアルでは、AWS上で基本的なEC2 Auto Scaling構成を設定してアプリケーションに適用する方法を学びます。
読み進めて、必要以上に支払うことなく常にアプリケーションにリソースがあるようにしましょう!
前提条件
このチュートリアルは実践的なデモンストレーションで構成されています。実際に進めるためには、AWSアカウントと無料利用枠のアカウントが必要です。
起動テンプレートの作成
AWS EC2 Auto Scalingに取り組む前に、EC2インスタンスを起動するための方法が必要です。それが起動テンプレート(起動構成と同様)です。起動テンプレートには、インスタンスタイプ、サブネット、セキュリティグループなど、EC2インスタンスを起動するために必要なすべての情報が含まれています。
AWSは、起動テンプレートの使用を推奨しており、起動構成よりも柔軟性と高度な機能を提供しています。EC2 Auto Scalingでは、スケールアップ時に新しいインスタンスを起動するために起動テンプレートが使用されます。
ランチテンプレートを作成するには:
1. お気に入りのウェブブラウザを開き、AWS Management Consoleにサインインします。
2. 検索バーでEC2ランチテンプレートを検索し、機能の結果からランチテンプレートを選択します。これにより、EC2ランチテンプレートページが開きます。

3. 次に、ドロップダウンリスト(右上)からリージョンを選択し、ランチテンプレートの作成を開始するために「ランチテンプレートの作成」をクリックします。
EC2 Auto Scalingをサポートする任意のリージョンでオートスケーリングを使用できますが、このチュートリアルでは米国東部(北バージニア)を使用しています。

4. 新しいランチテンプレートの名前と説明を以下のように構成します:
- ランチテンプレート名 – 必須 – ランチテンプレートの名前(ec2-autoscaling-template-demo)を指定します。名前はリージョン内で一意であり、128文字を超えないようにし、ハイフン(-)、アンダースコア(_)、ピリオド(.)以外の特殊文字を含まないようにします。
- テンプレートバージョンの説明 – ランチテンプレートの説明(ec2 autoscaling template demo)を入力します。255文字を超えないようにします。
- Auto Scaling ガイダンス – EC2 Auto Scaling で使用できるテンプレートを設定するのに役立つガイダンスを提供するために、テンプレートの設定を支援 オプションをオンにしてください。このオプションにより、EC2 Auto Scaling と互換性のある起動テンプレートを作成することが簡単になります。

5. 起動テンプレートの内容 セクションにスクロールし、以下を使用してテンプレートのアプリケーションおよびOSイメージを選択してください:
- アプリケーションおよびOSイメージ(Amazon Machine Image) – テンプレートの起動イメージを選択しますが、このチュートリアルでは Amazon Linux 2 AMI を使用しています。選択したブートイメージに基づいてEC2インスタンスが起動されます。
好みのブートイメージを選択できますが、Amazon Linux 2 AMI が無料枠対象であるためお勧めです。
- アーキテクチャ – テンプレートのアーキテクチャを選択しますが、このチュートリアルではx86-64(64ビット)を使用しています。

6. 次に、次のように起動テンプレートのインスタンスタイプとキーペア(ログイン)を設定します:
- インスタンスタイプ – テンプレートのインスタンスタイプを選択します。ただし、このチュートリアルでは t2.micro を選択しています。これは無料枠対象です。
一部のインスタンスタイプは他のものよりも費用がかかるため、CPUおよびメモリ要件など他の要因も考慮してください。
- キーペア(ログイン) – 起動テンプレートに含めない を選択してください。これはAuto Scalingには必要ありません。
キーペアが指定されている場合、EC2 Auto Scaling はそのキーペアでインスタンスを起動します。

7. ネットワーク設定で、既存のセキュリティグループを選択し、EC2 インスタンスにセキュリティグループの設定を指定します。これにより、EC2 Auto Scaling はこのセキュリティグループでインスタンスを起動します。
新しいセキュリティグループを作成する場合は、セキュリティグループの作成オプションを選択できます。

8. 他のデフォルト設定を保持し、概要のトグルリストの下部にある「起動テンプレートの作成」をクリックして起動テンプレートを作成します。

9. 最後に、テンプレートセクションの「テンプレートから Auto Scaling グループを作成」の下にある「Auto Scaling グループの作成」をクリックして続行します。
次のセクションで Auto Scaling グループを作成するので、起動テンプレートのページを閉じないでください。

AWS EC2 Auto Scaling グループの作成
これで、EC2 起動テンプレートができたので、AWS EC2 Auto Scaling グループを作成して EC2 インスタンスを含める必要があります。AWS EC2 Auto Scaling にはヘルスチェックの代替とスケーリングポリシーの使用を可能にする機能があります。
複数のインスタンスを持つ Auto Scaling グループを作成できますが、このチュートリアルでは Auto Scaling の動作を示すために単一のインスタンス Auto Scaling グループを作成します。
1. 以下の設定で Auto Scaling グループを構成します(まだ「起動テンプレートの作成」ページにいる状態で):
- オートスケーリンググループ名 – オートスケーリンググループの名前を入力してください(ec2-autoscaling-group-demo)。この名前は、AWSリージョン内で一意で、255文字以内である必要があります。
- 起動テンプレート – ドロップダウンリストからEC2起動テンプレートを選択してください(ec2-autoscaling-template-demo)。
- 続行するには次へをクリックしてください。

2. 次に、すべてのデフォルト設定をそのままにして、オートスケーリンググループに既存のVPCとサブネットを選択し、次に進むをクリックしてください。
これらの設定を指定することで、オートスケーリンググループはEC2インスタンスを起動する場所を把握します。

3. デフォルト設定を維持し、次へをクリックして続行してください。

4. 今、オートスケーリンググループのグループサイズを以下のように設定してください:
Capacity | Limit | Details |
Desired | 1 | Set the number of instances you want in your Auto Scaling group. The desired capacity must be greater than or equal to the minimum capacity and less than or equal to the maximum capacity. |
Minimum | 1 | Set the minimum number of instances in your Auto Scaling group. The value must be greater than or equal to 1 and less than or equal to the maximum capacity. |
Maximum | 1 | Set the maximum number of instances you want in your Auto Scaling group. |

5. スクロールして、デフォルト設定を維持し、レビューへスキップをクリックして続行してください。
- スケーリングポリシー – シンプルなスケーリングポリシーを使用するため、Noneオプションを選択したままにしてください。このポリシーは、グループ内の古いインスタンスが終了したときに、オートスケーリンググループの希望キャパシティを1つ増やします。
- インスタンスのスケールイン保護 – このチュートリアルでは不要なので、このオプションは無効のままにしてください。このオプションを有効にすると、スケーリングイン時にオートスケーリンググループがインスタンスを終了できるかどうかを制御できます。

6. 最後に、オートスケーリンググループの設定を確認し、オートスケーリンググループを作成するために(右下の)[オートスケーリンググループの作成]をクリックしてください。

作成したら、以下に示すように、Auto Scaling グループが表示されます。

AWS EC2 Auto Scaling グループのテスト
素晴らしいですね! AWS EC2 Auto Scaling グループを作成して、EC2 インスタンスを含めることができました。しかし、Auto Scaling グループが機能しているかどうかをどのように確認しますか?
AWS EC2 Auto Scaling グループが 1 つの EC2 インスタンスを起動したことを確認します。このインスタンスは、「AWS EC2 Auto Scaling グループの作成」セクションの第四ステップで指定したものです。
1. 新しく作成した Auto Scaling グループの横にあるチェックボックスを選択し、「アクティビティ」タブをクリックして、Auto Scaling グループのすべてのアクティビティを表示します。
下部の「アクティビティ履歴」セクションには、Auto Scaling グループの最新イベントの説明が表示されます。この場合、説明には「新しい EC2 インスタンスの起動」とあり、成功したステータスとインスタンス ID(i-09b699064f6e06070)が表示されます。
次のステップでインスタンスを確認するために、インスタンス ID をコピーしてください。

2. EC2 ダッシュボードに移動し、ステップ 1 でコピーしたインスタンス ID を実行中のインスタンスと比較します。
両方のインスタンス ID が一致すると、Auto Scaling グループが正常に EC2 インスタンスを起動したことを示します。

3. Auto Scaling グループページに戻り、インスタンス管理タブをクリックすると、EC2 インスタンスに関するすべての情報が一元化されます。このタブで最も重要な情報は次のとおりです:
- ライフサイクル列 – Auto Scaling グループ内の EC2 インスタンスが InService 状態であることがわかります。これは、インスタンスがリクエストを処理するために利用可能であることを示しています。
- 健康状態列 – EC2 インスタンスのヘルスチェック状態が Healthy であることがわかります。これは、インスタンスがすべてのヘルスチェックに合格していることを示しています。
EC2 インスタンスの終了
Auto Scaling グループが機能していることを確認したので、内部の EC2 インスタンスを終了して Auto Scaling グループをさらにテストできます。覚えておいてください。グループ内のインスタンスを終了すると、自動的に新しい EC2 インスタンスが起動されます。
実際のケースでは、自動的に変化する状況に応じて Auto Scaling グループをスケールアップするために使用します。例えば、NGINX ウェブサーバーの1つがリクエストで過負荷になり、停止の危険がある場合です。
しかし、今のところ、インスタンスが失敗した場合に何が起こるかをシミュレートするために、EC2 インスタンスを手動で終了して Auto Scaling グループをテストします。
1. インスタンスに移動し、インスタンスの横にあるチェックボックスをクリックして選択します。
選択したら、インスタンスの状態ドロップダウンメニューをクリックし、「インスタンスの終了」をクリックして選択したインスタンスを終了します。

2. 次に、インスタンスの終了を確認するプロンプトが表示されたら、[終了] をクリックします。

以下、EC2 インスタンスが正常に終了したことを示すメッセージが表示されます。
Auto Scaling グループのデフォルトのクールダウン期間は300秒(5分)です。これは、古いインスタンスを終了した後、新しいインスタンスを起動するのに少なくとも5分かかることを意味します。

最後に、新しいインスタンスが起動するのを待ちながら、Auto Scaling グループのアクティビティ履歴を確認してください。
以下に示すように、自動的に新しい EC2 インスタンスが起動されたことが確認できます。この出力は、Auto Scaling グループが期待どおりに機能していることを確認します。

結論
アプリケーションの負荷を処理することは、それをスムーズに動作させるための重要な部分です。幸いなことに、AWS EC2 Auto Scaling を使用すると、アプリケーションが常に必要なリソースを持っていることを保証できます。
そして、このチュートリアルでは、Auto Scaling グループを作成し、グループにインスタンスを起動し、変化する条件に応じてグループをスケーリングする方法を学びました。この時点で、自信を持って AWS EC2 Auto Scaling グループをアプリケーションに作成できます。
この新しい知識を活用して、AWS CloudFormation を使用して自動スケーリンググループを作成してみませんか?負荷が増加し、手動でさらに多くのリソースをプロビジョニングする必要がなくなると、後で自分自身に感謝することになるでしょう!