イベント対応を楽にするために(2)
代替インスタンスへのサービス切り替えを楽にする
代替EC2インスタンスが起動できたら、外部からアクセス先を変えて新しいインスタンスを利用する必要があります。
アクセス元のクライアント数が少ないサーバーの場合には各クライアントで設定を変更すればそれで問題ありません。しかし、クライアントが多数ある場合には、なんらかの対応が必要になります。
解決案の一つは、旧インスタンスから新インスタンスへのIPアドレスの付け替えです。VPC環境ではEC2インスタンスのENIに対し複数のIPアドレスを付与することができ、プライマリー以外のIPアドレスについてはインスタンス間で付け替えが可能です。
このため、イベント対象のインスタンスから代替インスタンスにIPアドレスを付け替えることで、クライアント側での設定変更なしでアクセス先の切り替えが可能になります。
また、EC2インスタンスへのアクセス先としてElastic IPアドレス(EIP)を利用している場合は、EIPの割り当て先を変更するだけでアクセス先を切り替えることもできます。この方法は、クラウド環境でのアーキテクチャ設計のノウハウを集めたクラウドデザインパターンでもFloating IPパターンとして紹介されています。
また、AWSで提供されるロードバランサーであるELBを利用することも可能です。 エンドポイントURLは同一ELBを利用している間は変更されることがありませんので、ELBのバックエンドインスタンスとなっている場合は代替インスタンスにも旧インスタンスにも同一のURLでアクセスが可能です。
ELBの詳細についてはBlackbeltセミナー資料やAWSの公式ドキュメントもご確認ください。
イベント情報の取得を楽にする
また、これらの対応を確実に実施するため、イベント通知を受け取る仕組みについても確認をしておきましょう。
実は、先日行われたAWSのイベントre:Invent 2016で、イベント通知について新たな機能が発表されています。それはAWS Personal Health DashboardとAWS Health APIです。
AWS Personal Health Dashboardは自分が利用しているAWSリソースに関連した障害・スケジュールイベント・通知が一覧できる機能です。
EC2インスタンスだけに止まらず、RDS等複数のサービスのリソース情報を一覧で確認することができます。
AWS Personal Health Dashboardは同じタイミングで提供が開始されたAWS Health APIの機能を活用しています。
このAPIを直接利用することで、これまでサービスごと・リソースごとに分かれていたメンテナンスやイベントの情報を集約し、取得できるようになりました。
さらに、このAWS Health APIで発生したイベントをCloudWatch Eventsと連携させることもできるようになっています。CloudWatch Eventsでは任意のイベントをトリガーとしてLambda関数の実行やAmazon SNS(Simple Notification Service)・Amazon SQS(Simple Queueing Service)を介した通知といったアクションが実行できる機能です。
これにより、EC2インスタンスにリタイアメント通知が来たら自動で対応させる(代替インスタンスを起動する、Slackに通知を送る、担当者にメールする等)といったことをとても簡単に設定することができるようになりました。
実際の設定手順としては以下のような形になります。
- イベント発生時に、EC2インスタンスの停止などイベントへの対応を実行するLambda関数を作成する。
- CloudWatch Eventsでルールを作成する。対象のイベントとしてAWS Health配下のメンテナンスを指定する。例えばEC2インスタンスのリタイアメントスケジュールを対象とする場合、AWS_EC2_INSTANCE_RETIREMENT_SCHEDULEDというイベントを指定する
- CloudWatch Eventsルールのターゲットとして実行するLambda関数を設定する。
設定はこれだけで完了です。あとは実際にイベントが発生したら処理が実行されていることを確認してください。
AWS Health APIやPersonal Health Dashboardについてはまだ英語のドキュメントしか提供されていませんが、もし興味があればぜひ読んでみてください。
なお、Personal Health Dashboardは全AWSアカウントでご利用いただけますが、AWS Health APIについてはビジネスもしくはエンタープライズのAWSサポート契約を持っていることが利用の前提条件になります。もしサポート契約をお持ちでない場合には、ぜひ加入をご検討ください。ビジネスおよびエンタープライズサポートでは、他にも電話・チャットでの問い合わせやTrusted Advisorの追加チェック項目もご利用いただけるようになります。
