アラートの緊急性を可視化するために、AWSの監視システムCloudWatchアラームの発生で、パトライトを点灯させてみました。
インフラ・エンジニアには、アラート対応がつきものです。
そこで、緊急のアラートであることを可視化するために、CloudWatchアラームが発生すると、パトライトを点灯させる仕組みを考えてみました。
スマートプラグなら簡単に実現
正攻法としては、Raspberry PiやESP32などを用いてリレーを制御し、パトライトのスイッチをオン/オフするという電子工作的な手法が考えられます。
しかし、この方法はかなり手間がかかります。リレー回路の用意のほか、LAN上のRaspberry PiやESP32を、Webから制御するための仕組みも必要です。
ここでは、より簡単に実現するために、市販のスマートプラグ(スマートコンセント)を利用することにしました。
TP-Link製などの一部のスマートプラグは、IFTTTに対応しており、他のWebサービスから簡単に制御できます。
IFTTTというのは、さまざまなWebサービス同士を連携できるWebサービスで、無料で利用可能なもの。
これらを使うことで、Webから制御可能なリレーが簡単に実現できます。
構成はこんな感じです。
システム構成
CloudWatchアラーム → SNS → Lambda関数 → IFTTT Webhooks → スマートプラグ → パトライト
CloudWatchアラームからSNSへの部分は、アラート設定の定石です。通常は、この後、メールやSlackなどにつながっていきますが、今回は、パトライトに向けて、つなげていきます。
次の部分ですが、本来は、SNSから外部のWebhooksを直接呼び出せます。ところが、SNSにWebhooksを登録する際に、設定ミスや不正を防ぐため、確認作業が必要なのですが、IFTTT Webhooksの仕様では、これができません。そこで、登録時に確認作業が不要なLambda関数を挟んでいます。
Lambda関数経由でIFTTT Webhookが呼び出しされると、スマートプラグがオンになり、最終的にパトライトが点灯することになります。
用意したもの
品名 | メーカー | 型番 | 実売価格 |
---|---|---|---|
パトライト | OHM | ORL-1 | 1,700円程度 |
スマートプラグ | TP-Link | HS105 | 2,200円程度 |
スマートプラグで利用するため、パトライトは、100V AC電源対応のものを選びました。
スマートプラグを設定する
設定については、以下の通りです。
なお、IFTTTの設定は、下記の記事を参考にさせていただきました。
WebhookをトリガーにIFTTT経由でスマートプラグを操作!
スマートプラグは、スマホのアプリ「Kasa Smart」を使って、WiFiや名称などの設定を行ないました。アプリの指示に従って、設定しました。
IFTTTを設定する
IFTTTの利用が初めての場合は、アカウント登録をしてから、サインインする必要があります。GoogleやFacebookのアカウントでもサインインできます。
IFTTTの設定は、下記の手順を2回繰り返し、イベント名「turn_on_patlite」と動作「Turn on」の組み合わせと、イベント名「turn_off_patlite」と動作「Turn off」の組み合わせを設定しました。
IFTTTの設定手順
メニューの「Create」をクリック
「If This Then That」の「This」をクリック
「Webhooks」を検索し、クリック
「Connect」をクリック(初回のみ)
「Receive a web request」をクリック
イベント名(turn_on_patlite/turn_off_patlite)を入力
「Create trigger」をクリック
「If This Then That」の「That」をクリック
「TP-Link Kasa」を検索し、クリック
「Connect」をクリック(初回のみ)
スマホのアプリで設定した情報でサインイン(初回のみ)
設定する動作(Turn on/Turn off)をクリック
パトライトをつなげたスマートプラグを選択
「Create action」をクリック
「Finish」をクリック
IFTTT WebhooksのURLは、メニューの「My services」→「Webhooks」→「Doucumentation」とクリックしていくと、次のような形式で表示されます。
https://maker.ifttt.com/trigger/{event}/with/key/{your_key}
{event}
のところには turn_on_patlite
または turn_off_patlite
が入ります。 {your_key}
はIFTTTアカウントごとに異なるキー(22文字の英数字)です。
このURLをコピペして、ブラウザでアクセスするだけで、パトライトが点灯したり、消灯したりします。
Lambda関数を作成
Webhookを叩くためのLambda関数を用意します。
Node.jsは勉強中のため、今回は、AWSのサンプルコードをそのまま利用してしまいました。
サンプルコードをそのまま使うため、パトライトの点灯/消灯について、それぞれ1つずつ関数を作成します(アクセスするURLのみ異なります)。
下記コード中、 your_key
のところは、IFTTTアカウントごとに異なるキー(22文字の英数字)です。
Lambda関数のコード(点灯側)
1 | const https = require('https') |
Lambda関数の作成画面では、次のように設定しました。
Lambda関数の設定(点灯側)
設定項目 | 設定内容 |
---|---|
関数名 | turn_on_patlite |
ランタイム | Node.js 12.x |
実行ロール | 基本的なLambdaアクセス権限で新しいロールを作成 |
index.js
に上記のコードを入力し、デフォルト設定のまま保存しました。
テストして、パトライトが点灯したので、問題なさそうです。なお、今回は、受け渡しのパラメータは無視されますので、テストイベントは、デフォルトのパラメータのまま、イベント名だけtestと入力して作成しました。
SNSの設定
パトライトの点灯/消灯を別々の関数にしたため、SNS(Simple Notification Service)でも、トピックを点灯/消灯で別々に作成しました。
トピックの設定内容(点灯側)
設定項目 | 設定内容 |
---|---|
名前 | TurnOnPatlite |
表示名 | TurnOnPatlite |
それぞれのトピックには、1つずつサブスクリプションを作成しました。
サブスクリプションの設定内容(点灯側)
設定項目 | 設定内容 |
---|---|
トピックAPN | 作成したトピックを選択 |
プロトコル | AWS Lambda |
エンドポイント | 作成したLambda関数を選択 |
CloudWatchアラームの設定
パトライトを点灯させたいアラームの通知設定で、次のように設定しました。
CloudWatchアラームの通知設定
状態 | 通知の送信先 |
---|---|
アラーム | TurnOnPatlite |
OK | TurnOffPatlite |
以上で完成です。
アラーム状態になると、パトライトが点灯し、状態が回復すると、パトライトが消灯します。
クラウドからリアルを操作できる
Lambda関数を挟まないといけない点だけ、注意する必要がありますが、電子工作が不要なので、かなり手軽に実現できました。
何より、スマートプラグを使うことにより、クラウドから「リアル」の操作が簡単にできることがわかりました。アラートの可視化以外でも、面白いことに活用できそうですね。