【習作】AWS Service Health Dashboardの更新をChatWorkに書き込むシェルスクリプトを作ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越妙高オフィスです。AWS上に構築したシステムで障害が発生した場合には、まず問題の切り分けが必要です。その際のポイントとして障害が「自分のシステムでしか発生していないのか」それとも「AWSのリージョンもしくはアベイラビリティゾーン全体で発生しているのか」というものがあります。

AWSでは障害発生時にService Health Dashboardというページで情報の公開を行っています。

このページの更新情報はRSSでも配信されており、RSSリーダー等を用いれば更新された際に気付くことができます。Developers.IOでも、これまでいくつかのやり方で更新を知る方法をご紹介してきました。

しかし障害を監視するチームメンバー全員が個別に登録するのは大変です。そこでDashboardに更新があった場合にチームのChatworkルームへ書き込むスクリプトを作ってみました。

スクリプト

今回もちゃちゃっとシェルスクリプトで作りました。動作確認はOSX(Yosemite), Amazon Linux(2015.03)で行っています。 コード170行近くと随分長く感じますが、前半半分はAWSサービスの定義です。実体はprocという40行ほどの処理です。

またjqで扱いやすくするために、RSS から JSONへの変換を行っています。良いRSS to JSONのコマンドツールが見つからなかったのでPerlで無理矢理JSONっぽくしてます。

AWSのサービス一覧(変数定義部)

AWSのサービスを取得できるawscliのコマンドがなかったため、上述したService Health DashboardのHTMLソースからコピーしてきました。今後サービスが増えた場合には適宜追加してください。

JSONの配列をループにしてシェルを実行する(proc関数)

これまでawscliなどの出力で得られるJSONは、いったんjqでcsv形式にしてからIFSを変更して無理矢理ループ処理をしていました。しかしCSVの値の中にカンマが含まれると当然うまく動きません。そんな時、下記記事のやり方を知りシンプルながら感動しました。

csvにして処理するよりずっとコードがスッキリしますね。

お詫び

使ってる言語がシェルスクリプトにRubyにPerlと統一されてなくてすいません。

まとめ

「見える化」というのは「見ることができる」ようにするだけでなく、「見せる」つまり問題があれば自然と「目に入る」ような仕組みにすべきという言葉を読んだことがあります。そこで、RSSを能動的に見にいくのではなく、メンバーが普段見ているチャットツールに「見せる」ようにしてみました。

POST部分を変更すれば、Chatworkだけでなく好きなツールと連携できるようになると思いますので、参考にしてみてください。