CloudAutomatorとDatadogを連携して障害時にメンテナンスサーバーへ自動で変更する

この記事はCloud Automator Advent Calendar 2017の4日目の記事です。 せっかくなのでPelican + S3 + Githubでブログも移行してみました。残りのコンテンツは後ほどがががっとあげようと思います。

さてみんな大好きCloudAutomator とDatadogですが、私が一番好きな機能はそれぞれ

  • CloudAutomator : Route53の値を変更する
  • Datadog:インテグレーション機能が多い

という所です。 そこで今回は私が好きなサービス二つを掛け合わせます。

今回やる構成

今回の構成

CloudAutomatorでジョブを作成する

CloudAutomatorにはトリガーにHTTPがあります。

Cloud Automator | HTTPトリガーをリリースしました

これを使えばHTTPを叩く事でジョブを実行出来るのです。作り方は上記のリンクをご覧ください。 今回ジョブを二つ作ります。

  • メンテナンスのFQDNに切り替えるジョブ
  • 本サーバーのFQDNに切り替えるジョブ

作成したジョブのこのデータを取得します。

$ curl https://manager.cloudautomator.com/trigger/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
>   -X POST \
>   -H "Authorization: CAAuth xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
>   -H "Content-Length: 0"

ここの

  • httpsから始まるURL
  • Authorizationの値
  • Content-Lengthの数字

をメモっておきます。後でDatadogを開いた時にコピペでもいいかもしれません。 CloudAutomatorのAPI登録はRoute53のFullアクセス権限のみアタッチしたIAMユーザーで大丈夫です。

DatadogでWebhook機能としてCloudAutomatorを登録する

Webhookインテグレーション

まずDatadogでWebhook機能をONにします。 Datadog-Webhooks Integration

WebhooksのConfigurationから設定をします。 Webhookインテグレーション

その際に先ほどメモをしたCloudAutomatorのジョブの情報を入れます。 Webhookインテグレーション

{"Authorization" : "CAAuth xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
 "Content-Length": 0}

設定を保存します。 その後モニター作成を選び、障害時の挙動についての設定を行います。

今回はcode.popowa.comにDatadogエージェントを入れて監視しているのですが、2分間データが来なかった場合に自動でURLを切り替える挙動を想定したエラーとにします。 アラート時には切り替えのジョブをキックして、リカバリーしたら元々のURLに切り替えるジョブをキックします。

Webhookインテグレーション

{{#is_alert}}
Server {{host.name}} is down!
Fail over to maintenance URL  @webhook-CA-R53-Failover
{{/is_alert}}

{{#is_recovery}}
Server {{host.name}} is OK!
DNS switch to original URL @webhook-CA-R53-OK
{{/is_recovery}}

注意事項としてはCloud AutomatorのRoute53の値変更は同じタイプ(AもしくはCNAME)でしか変更出来ないという事です。 元々Aレコード値を、Failover時にCNAMEに変えることは出来ない ><

検証する

検証用のURL: http://dev.code.popowa.com

正常時

Datadogエージェントを止めます。Start/Stop/Restart the Datadog Agent – Datadog

aya@codepopowa:~$ sudo /etc/init.d/datadog-agent stop
[ ok ] Stopping Datadog Agent (stopping supervisord): datadog-agent.

2分後にWebhookが動くはずなので待ちます。 .... アラートが来た!

アラート

切り替わりました! Failover時

それではDatadogのエージェントを立ち上げ直して状態としては復旧とさせます。

Cloud Automatorのイベントログにも追加されていました。

実行ログ一覧

やったね!今回はCloud Automator + Datadogでの自動切り替えでしたが、Datadogは色々な連携が出来るので、Cloud Automatorでフェイルオーバーしていると時にPageDutyなどで通知などもいいかもしれません。

Cloud Automator と PagerDuty を組み合わせた便利な使い方 – サーバーワークスエンジニアブログ

まとめ

Cloud Automator を使って簡単にフェールオーバー設定が出来ました。Route53のFailover機能もありますが、この機能を使えば 手動で切り替えとしても利用が出来るので、例えばAmazon DashみたいなものとFailover機能を実装するのもありだな〜と思いました。 もちろん環境に問題がないのが一番ですが、やはり障害時の備えは安く、お手軽にしておきたいですよね〜。 ぜひCloud Automatorを活用して運用の軽減ご検討ください👍