みなさん、こんにちは。本日は、アプリケーションの負荷を適切に分散するサービスとして、EC2 インスタンスの Amazon EC2 Auto Scaling について説明していきます。

  1. Amazon EC2 Auto Scaling とは
  2. Amazon EC2 Auto Scaling のメリットについて
  3. Amazon EC2 Auto Scaling インスタンスのライフサイクル
  4. Auto Scaling コンポーネント
  5. Auto Scaling グループにおけるインスタンスサイズのスケーリング
  6. スケーリングのオプション
  7. Amazon EC2 Auto Scaling の料金

■ 1. Amazon EC2 Auto Scaling とは

Amazon EC2 Auto Scaling は、アプリケーションの負荷を処理するために適切な数の EC2 インスタンスを利用できるように準備することができます。まずは Auto Scaling グループと呼ばれる EC2 インスタンスの集合を作成します。

たとえば、各 Auto Scaling グループ内のインスタンスの最小数を指定することができ、Auto Scaling のグループは指定したインスタンス数よりも少ない台数になることはありません。また、各 Auto Scaling グループ内のインスタンスの最大数を指定することができ、Auto Scaling のグループは指定したインスタンス数よりも多い台数になることはありません。さらに、希望する容量を指定した場合、Amazon EC2 Auto Scaling によって、Auto Scaling グループのインスタンス数はこの数に設定されます。

スケーリングポリシーを指定する場合、Amazon EC2 Auto Scaling でアプリケーションに対する需要のインスタンス台数増減に応じて、インスタンスを起動または終了できます。
たとえば、Auto Scaling グループで、インスタンス数の最小サイズが 1、希望する容量が 2、最大サイズが 4 であるとします。定義するスケーリングポリシーによって、指定した条件に基づいて、インスタンスの最小数と最大数の間でインスタンス数が調整されます。

https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html より引用

・Minimum size : 最小台数
・Maximum size : 最大台数
・Desired size : 希望台数

この図の場合、最小が “1” 最大が “4” 、希望台数が “2” となり、最初は “2 台” で起動しますが、スケーリングポリシーと負荷状況によって “1 台” から “4 台” の間の台数で、柔軟に変化します。

■ 2. Amazon EC2 Auto Scaling のメリットについて

  1. 耐障害性の向上。インスタンスの異常を検出し、インスタンスを削除して、その代わりに新しいインスタンスを起動することができます。
  2. 複数のアベイラビリティーゾーン (AZ) を使用するように設定することもできます。たとえば、何かの障害により 1 つのアベイラビリティーゾーン (AZ) が利用できない場合は、別のアベイラビリティーゾーン (AZ) でインスタンスを起動します。
  3. 可用性の向上。スケーリングポリシーにしたがって、トラフィックを処理するための適切な EC2 インスタンスの起動台数を調整します。
  4. コスト管理の強化。必要に応じて動的に処理能力を増減でき、稼働した EC2 インスタンスのみの料金を支払うため、必要なときにインスタンスを起動し、不要な場合は削除することで費用を節約することができます。

■ 3. Amazon EC2 Auto Scaling インスタンスのライフサイクル

Auto Scaling グループの EC2 インスタンスには、他の EC2 インスタンスとは異なるパスまたはライフサイクルがあります。
Auto Scaling グループがインスタンスを起動するとライフサイクルが起動し、インスタンスを削除するとライフサイクルが終了するか、または Auto Scaling グループがインスタンスをサービスから削除して終了します。

次の図は、Amazon EC2 Auto Scaling ライフサイクルのインスタンス状態の遷移を示しています。

https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html より引用

[スケールアウト]
スケーリングポリシーに基づいて Auto Scaling グループのインスタンス数を自動的に拡大します。スケジュールで計画を設定し、特定の時間で Auto Scaling グループのインスタンス数を拡大します。

スケールアウトイベントが発生した場合、Auto Scaling グループは “割り当てられた起動設定” を使用して必要な数の EC2 インスタンスを起動します。
これらのインスタンスは最初に “Pending” 状態で起動します。Auto Scaling グループにライフサイクルフックを追加すると、カスタムアクションを実行することもできます。

各インスタンスが EC2 ヘルスチェックに合格すると、Auto Scaling グループにインスタンスをアタッチして “InService” のステータスになります。起動したインスタンスは、Auto Scaling グループの希望するインスタンス台数にカウントされます。

[スケールイン]
Auto Scaling グループで直接スケールインして EC2 インスタンスをグループからデタッチして、インスタンスを終了します。
スケーリングポリシーの内容に基づいてグループのインスタンス数を自動的に縮小します。

スケールインイベントが発生すると、Auto Scaling グループは 1 つ以上のインスタンスをデタッチします。Auto Scaling グループは、終了ポリシーを使用して、終了するインスタンスを決定します。Auto Scaling グループからの削除とシャットダウンのプロセス中にあるインスタンスは “Terminating” 状態になり、サービスに戻すことができません。Auto Scaling グループにライフサイクルフックを追加すると、お客様がカスタムしたアクション (カスタムアクション) を実行できます。最後に、インスタンスは完全に終了し “Terminated” ステータスへ移行します。

■ 4. Auto Scaling コンポーネント

Amazon EC2 Auto Scaling の主要コンポーネントは、下記となります。

[Auto Scaling グループ]
EC2 インスタンスは、スケーリングと管理の目的で論理ユニットとして処理されるように、Auto Scaling グループとして整理されます。Auto Scaling グループを作成する際に、EC2 インスタンスの “最小数” 、”最大数” および “希望する数” を指定します。

[設定テンプレート]
Auto Scaling グループでは、起動テンプレート、または起動設定を EC2 インスタンスの起動テンプレートとして使用します。インスタンスの AMI ID、インスタンスタイプ、キーペア、セキュリティグループ、ブロックデバイスマッピングなどの情報を指定できます。

[スケーリングのオプション]
Amazon EC2 Auto Scaling では、Auto Scaling グループをスケーリングする方法がいくつか用意されています。たとえば、特定の条件の発生に基づいて、またはスケジュールに基づいて、Auto Scaling グループがスケールされるように設定できます。

■ 5. Auto Scaling グループにおけるインスタンスサイズのスケーリング

スケーリングは、アプリケーションのコンピューティング台数を増減する機能です。スケーリングは、Auto Scaling グループに EC2 インスタンスの起動または終了を指示するイベント (スケーリングアクション) で始まります。Amazon EC2 Auto Scaling では、さまざまな方法でスケーリングを調整することができます。そのため、アプリケーションを十分に理解していることが重要です。

■ 6. スケーリングのオプション

Amazon EC2 Auto Scaling では、Auto Scaling グループをスケーリングする方法は、下記のようにいくつか用意されています。

[現在のインスタンス数の常時維持]
実行中のインスタンスの指定された数を常に維持するように Auto Scaling グループを設定できます。現在のインスタンスレベルを維持するために、Amazon EC2 Auto Scaling は、Auto Scaling グループ内で実行中のインスタンスに対して、定期的なヘルスチェックを実行します。Amazon EC2 Auto Scaling は、インスタンスに異常があると判断すると、そのインスタンスを終了して新しいインスタンスを起動します。

[手動スケーリング]
手動スケーリングは最も基本的な方法です。Auto Scaling グループの最大容量、最小容量、または希望する容量の変更のみを指定します。Amazon EC2 Auto Scaling は、更新された容量を維持するためにインスタンスを作成または終了するプロセスを管理します。

[スケジュールに基づくスケーリング]
スケジュールに基づくスケーリングとは “日付” および “時刻” に基づいて自動的に実行されるスケーリングアクションのことです。Auto Scaling グループのインスタンス数を増減しなければならない状況が予測可能なスケジュールで発生するため、どのタイミングでその数を増減すべきかが正確にわかっている場合に、このスケーリング方法は便利です。

[需要に基づくスケーリング]
動的スケーリングを使用してリソースをスケーリングする高度な方法では、需要の変化に応じて Auto Scaling グループを動的にサイズ変更するスケーリングポリシーを定義できます。たとえば、現在 2 つのインスタンスで実行されているウェブアプリケーションがあり、アプリケーションの負荷が変化しても Auto Scaling グループの CPU 使用率を約 50% に維持する必要があるとします。この方法は、いつ条件が変化するかが不明である場合に、変化する条件に応じてスケールするために役立ちます。Amazon EC2 Auto Scaling をお客様に代わって、お客様に代わって Amazon EC2 Auto Scaling を設定できます。

[予測スケーリングの使用]
予測スケーリングと動的スケーリング (それぞれ予防的アプローチと事後的アプローチ) を組み合わせることで、キャパシティーを高速スケーリングすることもできます。

■ 7. Amazon EC2 Auto Scaling の料金

Amazon EC2 Auto Scaling をご使用いただいたことによる追加料金は発生しません。

■ 最後に

いかがでしたでしょうか。
EC2 インスタンスのスケーリングについて、自動で行うことで運用の手間やコスト削減に貢献できます。
Amazon EC2 Auto Scaling 自体には費用がかからないため、お客様のユースケースまたはワークロードにあわせて、まずは試しにご利用を検討してみてはいかがでしょうか。

AWSのコストを削減したい、無駄なコストが発生していないか心配・・という方向けに 「AWS利用料の削減を極める」と題したWebinarを7/27(火)13時~開催いたします。
ご興味のある方は、ぜひお申込みをお待ちしております。

https://www.sunnycloud.jp/20210727/