Amazon CloudWatch と twilio を Zapier で連携すると簡単に電話通知を実装できた
ふと Zapier で API 連携できるサービスの一覧を見ていたときに twilio があって、もしかしてこれは CloudWatch と連携させればシンプルに電話通知ができるんじゃないかと思ってやってみたら簡単にできたというのが、この記事の概要になります。
CloudWatch から twilio への連携図
EC2 インスタンスのシステム障害(その他)を CloudWatch で検知して、アラームのステータス変化をトリガーに、twilio から携帯電話に電話をかけてアラームの内容を通知するアクションを以下の形で実装しています(簡単すぎて図を描く気が起きませんでしたもうしわけありません?)。
EC2 -> CloudWatch -> Zapier -> twilio
CloudWatch で障害(その他)を検知する
正直なところ、今回は電話通知ができるかどうかを確認したかっただけなので、手がこんだことは何もしていません。振る舞いを扱いやすい要素を使って検知するトリガーがあればよかったので、単にインスタンスの CPU の使用率にしきい値を設けて、使用率が一定以上になった場合にアラームを出すアラームを CloudWatch で作ります。
$ gzip -9 < /dev/urandom > /dev/null
を監視対象のインスタンス上で実行するなどして CPU 負荷を高めてみた結果、アラームが想定通り出るかどうかを確かめておくといいかと思います。
twilio のサービス利用登録を行う
「twilioのトライアル登録してみた」あたりを参考に twilio にユーザー登録して電話番号をもらっておきます。加えて、[アカウント] のところにある [API クレデンシャル] の AccountSID
および Auth Token
をどこかにコピーしておきます。
Zapier のサービス利用登録を行う
こちらも同じく「IFTTTすら使ったことないけどZapierを使ってみたときのメモ」あたりを参考に Zapier の利用登録を行い、Zap を作るために CloudWatch と twilio を選択します。Zapier が両方のサービスにアクセスするために必要な情報として、CloudWatch は AWS Access Key ID
と AWS Secret Access Key
を、twilio は上述の AccountSID
と Auth Token
を Zap 作成画面で適宜入力します。あとはそれぞれ…
- CloudWatch の Edit Options で
CloudWatch の Region と Alarm の名前(Use a Custom Value -> CloudWatch で作成したアラーム名)を入力します。 - twilio の Edit Template で 取得した電話番号を From Number に、To Number にかける電話の電話番号を、Message の内容は CloudWatch のパラメーターから任意の内容を入力します。
各アプリで動作テストができますので、Test Successful! になれば OK です。
電話通知を実際に受ける
上述の方法を使うなどして監視対象のインスタンスの CPU 負荷を高めます。CPU 使用率がしきい値を超えると CloudWatch 側でアラームが出て、それをトリガーにして twilio から電話がかかってきます。
あとがき
今回は単なる思いつきで CloudWatch -> Zapier -> twilio の連携を作ったわけですが、CloudWatch はもともと有料プラン(最低でも $20/月)でしか使えない(連携対象として選択できない)アプリの一つですし、タスクの実行可能回数や Zaps が実行される間隔もプランによって異なります。どちらかというとメールやメッセージよりも緊急性が高い時に使いたい場合が想定しやすい電話通知ですが、そういったニーズを満たす使い方ができるかというとちょっと微妙かもしれません。あと、別に意図していたわけではありませんが、コードを全然書かずに実装できてしまいました。
ということで簡単なのと Zapier は連携できるサービスが多いので、普通に監視サービスの一環としてもう少し凝った実装をするのもいいですが、家庭を支える技術系でなにか考えるのもいいかもしれないなと思っています。