目的
定期実行といえばcron。無料でcronっぽいことをしてくれるGASの記事はよく見かけるけど、時間が少し不安定だったり色々とかゆいところに手が届かない。
というわけで、GCPにあるCloud Schedulerなるサービスを触ってみる。
同様の記事は少ない気がしたので、自分なりのメモも兼ねる。
Microsoft TeamsやGCPのコンソール自体の操作にはあまり触れないのであしからず。
やったこと
構成を考える
Microsoft Teamsには、連携できるアプリがいっぱいあるらしく、その中で今回はIncomming Webhookに目をつけました。
Webhookは、超絶ざっくり言うと特定のPOSTリクエストが来たときに反応するよ、っていう技術です。つまり、Teamsのとあるチャンネルに自動で何かを投稿したいなら、「hogehoge.com」にリクエストをぶん投げてね、ってことです。
そして、Google Cloud Schedulerでは時間指定で特定の動作を行うことができるのですが、この特定の動作の種類が「App Engine HTTP」、「HTTP」、「Pub/Sub」の3種類です(2019/9/20現在)。
この中のHTTPがまさにHTTPリクエスト(今回だとPOST)のことなので、まとめると
・Cloud Schedulerで時間を指定して特定の動作を行う
・特定の動作を「hogehoge.comへリクエストを送信する」に設定する
以上、というわけであります。
Teams側の設定
さて、チャンネルにメッセージを投稿するには「hogehoge.com」へリクエストを送ると言いましたが、もちろんこれはダミーURLです。
本当は、チャンネルごとにこれが存在する(発行できる)ので、発行していきます。
まずは、TeamsチャンネルでIncomming Webhookを連携する必要があります。
アプリの連携は、[チームの管理]→[アプリ]で行うことができます。
こんな感じの画面です。
連携を始めるときには、画像右上部分の[アプリの連携]から[Incomming Webhook]を検索して連携します。
すると、どのチャンネルに投稿したいのか聞かれるので、チャンネルを選択します。
私は「実験」チャンネルを作って、そこに投稿することにしました。
[コネクタを設定]をクリックすると、名前と画像を決める欄が出てきます。
名前は必須ですが、適当にtestとしておきます。
画像は実際に時報を送ってくる奴のアイコン画像になります。とりあえずデフォルトのまま進めます。
すると、同じ画面の下部に発行されたURLが出てきますが、これが前述の「hogehoge.com」に該当します。これは使いますので、忘れずにコピーしておきます。
Cloud Schedulerの設定
GCPのコンソールへログインします。
左側のハンバーガーボタンから、下の方にある「Cloud Scheduler」を選択します。
すると、こんな感じの画面になるので、「Create Job」を選択します。
名前、頻度、タイムゾーン、ターゲット(何をするのか)をそれぞれ決めていきます。
私はこんな感じで設定しました。
頻度のところは、cronと同じ書き方です。詳しくはここを見るか、cronでググってください。
タイムゾーンは日本、ターゲットはHTTPリクエストを送るのでHTTPとなります。
URLは、先程Teams側で発行されたものをコピペします。
WebhookはそもそもPOST前提なので、HTTPメソッド部分はPOSTでOKです。
本文のところは、JSONで送ります。
今回は{text:"Hello!"}としてみました。
JSONデータのキー部分はtextと決まっていますが、メッセージ本体は好きな内容でOKです。
(例:{ text: "おやすみなさい" } 等)
最後に作成ボタンをクリックすると、ジョブが完成します。
ジョブ一覧画面に戻るので、右側の「今すぐ実行」をクリックして挙動を確かめます。
無事に届きました!!
ちゃんと1分おきにも実行されています。
応用する
Cloud SchedulerではHTTPリクエストを叩いているだけですが、構成さえ工夫できれば自前の処理を埋め込むこともできます。
例えば、Cloud SchedulerでGASのスクリプトを叩く→GASのスクリプト内でTeamsへのPOSTリクエストを送信 のようにすれば、例えば時報だけでなく天気予報APIを使って天気を投げたりすることもできますね。
まとめ
- Cloud SchedulerとTeamsを使って正確な時報を投げることができる!
- Cloud Schedulerの料金表はここ
- 2019/9/20現在、アカウントあたり3ジョブまでなら無料!