概要
ELB配下に設置しているインスタンスを、高負荷時に自動でスケールアップ (インスタンスタイプの変更) する方法をご説明します。
構成は以下のとおり、ロードバランサー配下の各AZに EC2インスタンス が1台ずつ配置されてる状態からはじめます。 黒線はユーザーからリクエストフロー、青線はスケールアップのフローを表しています。
手順
ステップ1 : Amazon SNSトピックを作成する
ステップ2 : 平均レイテンシーが1秒を超える状態が5分以上続いた時、CloudWatch AlarmからSNSに通知させるように設定する
ステップ3 : Cloud Automatorのジョブを作成する
ステップ1 :Amazon SNSトピックを作成する
まず、CloudWatch Alarmが通知するためのAmazon SNSでトピックを作成します。
Topic Nameには任意の名前を設定し、作成してください。(今回は'scale-up'と設定します。)
ステップ2 : 平均レイテンシーが1秒を超える状態が5分以上続いた時、CloudWatch AlarmからSNSへ通知させるように設定する
ELBのコンソールからCloud Watch Alarmを作成します。
通知の送信先の設定を先ほど作成したトピック"scale-up"に設定し、各種設定してください。(今回は平均レイテンシーが1秒を超える状態が5分以上続いた時に通知させる設定にします。)
ステップ3 : Cloud Automatorのジョブを作成する
インスタンス毎に Cloud Automator のジョブを5つ作成していきます。
- インスタンスをELBから登録解除する
- インスタンスを停止する
- インスタンスタイプを変更する
- インスタンスを起動する
- インスタンスをELBに登録する
これらをHTTPトリガーを使って、連続実行させます。方法は、以下を参照してください。
Webhook後処理:複数のジョブを連続実行する(EC2インスタンスのスケールアップ)
3-1. SNS への通知をトリガーに、EC2インスタンスを ELB から登録解除する
CloudWatch Alarm が SNS に通知されたことを条件に、EC2インスタンス を ELB から登録解除します。
作成したジョブの詳細画面を表示すると、SNS連携用URLが表示されるので、その値をSNSトピックの サブスクリプションに登録します。
3-2. インスタンスを停止する
つぎに、3-1で作成したジョブが成功したことをトリガーに起動するジョブを作成していきます。
3-3. インスタンスタイプを変更する
手順3-2と同じ要領で、前ジョブの成功をトリガーとして作動するジョブを作成します。
3-4. インスタンスを起動する
3-5. インスタンスをELBに登録する
3-6~10. 他のAZのインスタンスについて
つぎに他のAZのインスタンスに向けて、同様のジョブを作成します。
- 3-6. Amazon SNSをトリガーに、インスタンスを ELB から登録解除する
- 3-7. インスタンスを停止
- 3-8. インスタンスタイプを
t2.small
からt2.medium
に変更する - 3-9. インスタンスを起動する
- 3-10. インスタンスを ELB に登録する