ELBのLatencyを監視してEC2インスタンスを自動でスケールアップする

概要

ELB配下に設置しているインスタンスを、高負荷時に自動でスケールアップ (インスタンスタイプの変更) する方法をご説明します。

構成は以下のとおり、ロードバランサー配下の各AZに EC2インスタンス が1台ずつ配置されてる状態からはじめます。 黒線はユーザーからリクエストフロー、青線はスケールアップのフローを表しています。

Slide1.jpg

手順

ステップ1 : Amazon SNSトピックを作成す

ステップ2 : 平均レイテンシーが1秒を超える状態が5分以上続いた時、CloudWatch AlarmからSNSに通知させるように設定する

ステップ3 : Cloud Automatorのジョブを作成する

 

ステップ1 :Amazon SNSトピックを作成す

まず、CloudWatch Alarmが通知するためのAmazon SNSでトピックを作成します。

topic.png

Topic Nameには任意の名前を設定し、作成してください。(今回は'scale-up'と設定します。)

sns.png

 

ステップ2 : 平均レイテンシーが1秒を超える状態が5分以上続いた時、CloudWatch AlarmからSNSへ通知させるように設定する

ELBのコンソールからCloud Watch Alarmを作成します。

ELB.png

 通知の送信先の設定を先ほど作成したトピック"scale-up"に設定し、各種設定してください。(今回は平均レイテンシーが1秒を超える状態が5分以上続いた時に通知させる設定にします。)

Alarm.png

 

ステップ3 : Cloud Automatorのジョブを作成する

インスタンス毎に Cloud Automator のジョブを5つ作成していきます。

  1. インスタンスをELBから登録解除する
  2. インスタンスを停止する
  3. インスタンスタイプを変更する
  4. インスタンスを起動する
  5. インスタンスをELBに登録する

これらをHTTPトリガーを使って、連続実行させます。方法は、以下を参照してください。

Webhook後処理:複数のジョブを連続実行する(EC2インスタンスのスケールアップ)

 

3-1. SNS への通知をトリガーに、EC2インスタンスを ELB から登録解除する

CloudWatch Alarm が SNS に通知されたことを条件に、EC2インスタンス を ELB から登録解除します。

Slide2.jpg

____.png

作成したジョブの詳細画面を表示すると、SNS連携用URLが表示されるので、その値をSNSトピックの サブスクリプションに登録します。

snstrigger.png

snstrigger.png

_________.png

3-2. インスタンスを停止する

つぎに、3-1で作成したジョブが成功したことをトリガーに起動するジョブを作成していきます。

Slide4.jpg

___1.png

3-3. インスタンスタイプを変更する

手順3-2と同じ要領で、前ジョブの成功をトリガーとして作動するジョブを作成します。

Slide6.jpg

___________.png

3-4. インスタンスを起動する

Slide5.jpg

________.png

3-5. インスタンスをELBに登録する

Slide3.jpg

__.png

3-6~10. 他のAZのインスタンスについて

つぎに他のAZのインスタンスに向けて、同様のジョブを作成します。

  • 3-6. Amazon SNSをトリガーに、インスタンスを ELB から登録解除する
  • 3-7. インスタンスを停止
  • 3-8. インスタンスタイプを t2.small から t2.medium に変更する
  • 3-9. インスタンスを起動する
  • 3-10. インスタンスを ELB に登録する
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください