はじめに(モチベーション)
商用環境だけど、外部委託とかの大した監視いらないからURLの疎通が出来なかったらアラート飛ばしたいってときがある。
イベントログとかパフォーマンスとかどうでもいいから、サービスが本当に使えなくなったときだけアラートがほしい。
かといって、深夜にslackとかメールで気づけるわけがないから、電話がほしい。
でも、stackdriverとかだとメールとかslackにしか通知できない。
URLの疎通が出来なかったら電話かけてきてほしい。
twilio(トゥイリオ)って何?
webAPIによって自動で電話をかけたり、SMS送ったりするやつ。
本社はアメリカのtwilio社がやっていて、日本ではKDDIが代理店としてサービスを提供している。
用途としては、自動の音声案内とかにも使われてたりする。
料金はざっくり以下となる。がトライアルで500円分が最初にもらえる。
- 電話番号 108円/月
- 発信(携帯宛) 16.2円/分
- 着信(0120/0800宛) 21.6/分
詳しくはWebでhttps://twilio.kddi-web.com/price/
今回試すこと
twilioとgoogle cloud functionsを使って、サーバレスなアラート発報する仕組みを作る。
なんでCloudFunctionsを使ったかというと、内容によってアラートの送り先とか、電話の内容を変えたりするにはCloudFunctionsとかの関数で
自由に設定できたほうがいいんじゃないかと思ったから。
twilioアカウント作成
https://twilio.kddi-web.com/
ここから普通にアカウント作る。
ログイン後の画面

プロジェクトを作成

ソロ活動ですが何か?

ログイン後のダッシュボード
電話番号を取得する

電話番号ガチャができる
取得完了
取得した電話番号を確認出来る

CloudFunctionの作成
exports.twiliotest = function(event, context) {
// Download the Node helper library from twilio.com/docs/node/install
// These consts are your accountSid and authToken from twilio.com/user/account
const accountSid = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
const Twilio = require('twilio');
const client = new Twilio(accountSid, authToken);
client.api.calls
.create({
url: 'http://demo.twilio.com/docs/voice.xml',
to: '+XXXXXXXXXXXXX',
from: '+XXXXXXXXXXXX',
method: 'GET',
})
.then(call => console.log(call.sid));
}
{
"name": "twiliotest",
"version": "0.0.1",
"dependencies": {
"twilio": "^3.18.0",
"querystring": "^0.2.0"
}
}
$ gcloud functions deploy twiliotest --trigger-http
監視対象VMの作成
今回は、GCEでVM(CentOS 7)を作成し、Nginxをインストールしておく。
$ sudo yum install -y nginx
$ sudo systemctl start nginx
Stackdriverの設定
UptimeCheckの設定
Notification設定
WEBHOOKS
にて先程作成したCloudFunctionを呼び出すようにする。
動作確認
Nginxの停止
$ sudo systemctl stop nginx
しばらく待つと・・・
かかってきた!
今後について
今回はトライアル版だったから、「twilio使ってくれてありがとう。お試しの内容じゃなく任意のコールするなら有料版使ってね」的なメッセージになってた。
(イントネーションがすごい片言感ある)
アラートの内容によって電話の内容を変えたい。