柔軟なリソース増減で可用性を維持し、機会損失や無駄な設備投資を防ぐAmazon EC2 Auto Scaling

企業システムでクラウド活用によるメリットはシステム構築時のみならずシステム運用時にも享受することができます。たとえば、物理的な設備や機器を購入せずにITリソースを確保できることがシステム構築におけるクラウドのメリットのひとつであり、それに対して、利用状況などに応じたユーザー数対応や、可用性を維持しながら、実行すべきもしくは不要な処理のための柔軟なコンピューティングリソースの増強や縮小が迅速に行えることが、クラウドを活用したシステム運用における利点のひとつと言えるでしょう。本コラムでは、アプリケーションの可用性を維持し需要の増減にも対応するための、自動的なEC2インスタンスの追加や削除を実現する「Amazon EC2 Auto Scaling」のコンセプトや利用方法について紹介します。

需要に応じてリソースを増減できる「オートスケール」とは

ITサービスやシステムで提供するアプリケーションは、利用者の数や処理の負荷に対応できる設備や機器で展開する必要があります。また、たとえ機器に障害がおきて分散設置した機器の一つに高負荷がかかる場合であってもサービスの提供が維持できる備えが必要です。利用者数や負荷が常に一定であればリソースの増減の調整は必要ないと思われる方もいらっしゃるかと思いますが、実際のオンラインのサービスやシステムでは、繁忙期の利用増や閑散期の利用減などが生じる場合が多いのではないでしょうか。

たとえば、ECサイトでセールや人気商品の予約注文が始まる際、通常より多くの利用者の来訪が予想されます。そしてセールや予約注文の期間が終了すれば、来訪者は減ります。あるいは、主に年末年始に利用される年賀状関連のサービスを提供している場合、11月〜1月の繁忙期以外、ほとんど利用者は現れないでしょう。

段階的なシステム投資では、未使用リソースが発生し、事業の成長に対応できない場合がある

次に、システム設計や機器調達、システム構築を行うときを考えてみましょう。
データセンターなどに物理的な機器を設置する場合、その調達や解約には時間がかかります。一度導入した設備は、5年リースなどを組むなどして利用し続けなければならないことが多く導入には時間をかけた検討を行うなど慎重にならざるを得ず、さらに、一度調達したITリソースは一定期間固定されがちです。そのような状況で、機器に不具合が発生したり、検討時に想定していないような利用者の急増が発生したりした場合には、固定的に確保されたリソースの限られた処理能力を超えたサービス提供はできません。一方で、システム稼働ピーク時や障害発生のバックアップをすべてカバーするように設備や機器を増強してしまうと、閑散期には必要のない固定費が発生してしまいます。

クラウドサービスならば、サーバーに不具合が生じたり利用者が急増したりしてもサービスを中断しないように、システム負荷が急増した場合にはリソースを維持・増加させ逆に少なくなった場合にはリソースを減らすなど、柔軟なITリソースの増減が可能です。
AWSでは、コンピューティング能力の提供サービスのひとつとして、仮想サーバー環境「Amazon EC2 インスタンス」を提供しています。EC2 インスタンスをたくさん用意すれば、それに応じたアプリケーションの処理能力を得られますし、物理サーバーと違って必要に応じてインスタンスの利用数をすぐに増減させることが可能です。

さらに、AWSにはアプリケーション処理に適切な数のAmazon EC2 インスタンスを自動的に増減する機能「Amazon EC2 Auto Scaling」があります。Auto Scaling(オートスケール)とは、希望の能力や負荷に応じて、「自動的に」クラウドサーバーの台数を増減させる機能のことです。

希望する処理能力(容量)と、実際に動作させるコンピューティングリソース(EC2インスタンスなど)との差を監視して、希望の能力に合致するようにリソースを自動的に増減できるのです。

システム負荷が想定より少なく希望よりも減らす場合は「スケールアウト」、想定よりも多く増やす場合は「スケールイン」

オートスケールにおいて、増減するEC2インスタンスは、管理しやすいようにグループとして整理されます。これを「EC2 Auto Scalingグループ」と言います。たとえば、複数のEC2インスタンスで動作するアプリケーションがある場合、グループ内のインスタンス数を増減することで希望の処理能力を得ることができます。EC2 Auto Scalingグループを作成する際に、構成するEC2インスタンスの最小数、最大数、希望する数を指定します。

なお、EC2だけでなく、データベースサービス「DynamoDB」などAWSが提供する複数のサービスにまたがってさまざまなリソースを利用しているアプリケーションのスケーリングのために「AWS Auto Scaling」という機能もあります。

これにより、コンピューティングにEC2インスタンスを、商品や顧客データなどにはDynamoDBを使い、さらに負荷分散のために「Elastic Load Balancing」を使っているようなオンラインショップの場合、需要の増減に応じて、EC2 Auto ScalingグループとDynamoDBのテーブルが自動的にスケールできるようになります。個々のスケーラブルなリソースをそれぞれ設定するのではなく、AWS Auto Scalingにて一括して管理でき、設定が容易になるというメリットがあります。

EC2 Auto Scalingによって、アプリケーションの可用性を維持

AWSでは、特定のアプリケーションを実行するために用意されたAmazon EC2 インスタンス群を「フリート」(Fleetは「艦隊」の意)と呼びます。Amazon EC2 Auto Scalingにより、このフリートの状態をモニタリングして、可用性の維持ができます。フリートの中に異常なインスタンスが検出された場合は、自動的に削除されて新しいインスタンスに置き換えられるのです。

インスタンスに障害があり、希望の処理能力得られない場合には自動的に別インスタンスが起動

Amazon EC2 Auto Scalingでは、「CPUの使用率50%」などの目標値を設定し需要の変化に対応する「動的スケーリング」と、需要予測に基づいて適切なEC2インスタンスを自動的に増減できる「予測スケーリング」の機能に対応しています。たとえば、あるWebサービスの毎週の利用者数やトラフィックが金曜に増え、土曜日の夜まで続くことが経験からわかっている場合、それに応じたスケーリングの計画を立てることができるのです。

予測スケーリングとは、AWS Auto Scalingの機能のひとつで、Amazon EC2 Auto Scalingで設定したスケーリンググループに対して、AWSクラウドの機械学習を活用してトラフィックの変動を予測して適正なEC2インスタンスを展開します。直近の2週間の動作を分析して次の2日間予測する、24時間ごとに次の48時間を予測するなど、常に予測値が調整されていくため、適正なアプリケーション応答と、コストの削減が期待できます。導入する前に、予測だけを行い評価することもできます。

予測スケーリングはAWS Auto Scalingの機能で、EC2 Auto Scaling の設定内容を利用する

EC2インスタンスのスケーリングとしては、AWS Auto Scalingの予測スケジューリングで大まかな能力の増減を準備しておいて、Amazon EC2 Auto Scalingの動的スケジューリングによって実際の負荷に応じた加減にて調整するという利用方法が推奨されています。

予測スケーリングで準備をしておいて、実際の負荷に応じて補充していくアプローチ

なお、EC2フリートの正常性の維持のみを目的とする場合や、またAmazon EC2 Auto Scalingグループのみをスケーリング対象とする場合、スケーリンググループを作成・設定する場合、スケジュールに基づくスケーリングの計画を設定する場合にはAmazon EC2 Auto Scalingのみを使います。

EC2 Auto Scaling利用において注意すべきこと

需要に応じてインスタンス数を自動的に増減できるAmazon EC2 Auto Scalingですが、その特性から留意すべき点があります。インスタンスの作成や削除の状態を把握しておくこと、永続的なデータを保護する必要があること、予想できない突発的なアクセス増には向かないことなどです。

インスタンスの作成や削除の状態を把握する

Amazon EC2 Auto Scalingを使用してアプリケーションをオートスケールしている場合、自動的にインスタンスが生成・削除されます。その理由や状態を把握するためにも、EC2インスタンスがいつどのように生成・削除されたかの情報を取得しておくと良いでしょう。

利用しているリソースの状況を配信するサービスAmazon Simple Notification Service (SNS) を併用すると、EC2 Auto Scaling グループのスケーリングが発生した場合に常にEメールやHTTP/HTTPS POSTなどで通知できます。通知内容には、インスタンスのIDや削除の理由などの詳細を記す設定ができます。

インスタンス消滅時の、永続的データ消失に注意

Amazon EC2 Auto Scalingで作成されるインスタンスは、オートスケールの設定と需要に応じて削除される可能性があります。また、不具合があって消滅したインスタンスで使用していたデータは、代わりに生成された新たなインスタンスへはコピーされません。このため、アプリケーションで生成されたデータや、取得したファイル、各種ログファイルなど、永続的に残しておきたいデータはそれらをコピーするような設定が必要です。

インスタンスの生成と削除の前にアクションを実行できる「ライフサイクルフック」を使ったり、Amazon RDSなどのデータベースを使ったりして保存するようにしましょう。なお、特定のインスタンスを消滅から保護することもできます。

突発的なアクセス増には即時対応できない

一般的なオンラインサービスを展開していると、予想もつかない急激なトラフィック増でアプリケーションの処理が追いつかなくなることがあります。たとえば、予期しないマスメディアでの紹介、大事件や有名人のSNS書き込みによる需要増などです。

オートスケールにしておけばユーザーが増えるたびにリソースを増やして対処できそうですが、オートスケールだけでは突発的なアクセス増に即時(たとえば数秒)対応は困難です。インスタンスを起動してアプリケーションを動作させるには数分のリードタイムが必要だからです。急激なアクセス増に備えるには、高速コンテンツ配信ネットワーク (CDN) サービスである「Amazon CloudFront」を導入したり、処理性能の上限を設けるために「Amazon API Gateway 」を利用したりするなど、別のサービスで対応します。

まとめ

クラウドサービスの利点のひとつに柔軟なリソース利用があり、需要に応じた、あるいは予想されるアクセスの増減にあわせて仮想サーバーを作成・消滅できるのがAmazon EC2 Auto Scalingです。複数のAWSサービスにまたがってさまざまなサービスを利用しているアプリケーションのスケーリングのためにAWS Auto Scalingという機能もあります。

オートスケーリングは、需要に応じてリソースを自動的に増減できるので、コストの最適化に寄与します。AWS Auto Scalingの機械学習を使った予測スケーリングとAmazon EC2 Auto Scalingの動的スケジューリングを組み合わせると、より最適なスケーリングができるようになっています。

なお、自動的に仮想サーバーの増減をするAmazon EC2 Auto Scalingは、その特性から急激なアクセス増への備えには向かなかったり、インスタンス内で使用している永続的データの保存など、いくつかの注意点がありますが、AWSにはそれらを補うサービスが用意されています。

移行準備段階で知っておくべきAmazon Web Servicesの
サービスを学び、具体的にクラウド検討を考える!

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る