Azure Functions とは
Azure Functions は、非常駐型のプロセスをイベントによってトリガーして実行するサービスです。AWS Lambdaのようなサービスです。
C#、F#、Node.js、Python、PHP、Batch、Bash、Java、などの言語を使ってFunctionを作成することができます。
参考 : https://azure.microsoft.com/en-in/documentation/services/functions/
今回は時間をトリガーにして、定型文をslackにpostしてみます。
Slack でIncoming WebHooks を追加する
指定したURLへPostするとSlackにメッセージが投稿されるようにするために、Incoming WebHooks を追加します。
slackの「Apps & Integrations」からIncoming WebHooksを追加します。「Incoming WebHooks」と検索し、追加します。
「Add Configuration」からチャネルを設定し、どんどん進んでいくと「Webhook URL」がでてくるのでこれを控えておきます。
Function App の作成
Azure PortalからFunction Appを作成します。
「新規」から「Function App」を検索して選択します。
そして、「アプリ名」やリソースグループなどが聞かれるので適当に記入します。
Function の作成
デプロイが完了したらFunctionを作成します。
作成したリソースグループからAzure Functionsを選択します。
今回は時間をトリガーとしてslackにpostしたいので「タイマー」を選択し、言語は「JavaScript」とし、作成します。
コードの部分に下記のコードを記載します。
module.exports = function(context,myTimer) { if(myTimer.isPastDue) { context.log('Node.js is running late!'); } var request = require('request'); var options = { url: '', form: 'payload={"text": "日報書けよ!!", "username": "Azure Functions Bot","icon_emoji": ":new_moon_with_face:", "channel": "<#投稿したいチャネル>"}', json :true }; request.post(options); context.log("Timer last triggered at " + myTimer.last); context.log("Timer triggered at " + myTimer.next); context.done(); }
そして、保存します。
保存すると、下記のようなExceptionが現れました。
2016-10-03T08:24:00.003 Exception while executing function: Functions.TimerTriggerNodeJS1. mscorlib: Error: Cannot find module 'request'
request moduleがないと言われています。
仕方ないのでrequest Moduleを追加します。
パッケージの追加はpackage.jsonをアップロードすることでもできますが、今回はKuduを利用して追加してみます。
ブラウザから
https://【function_app_name】.scm.azurewebsites.net
にアクセスします。
上の方にある[Debug Console]から[CMD]を選択します。
D:\home\site\wwwrootに移動して
npm init npm install request --save
を実行します。
再度実行試してみます。
2016-10-03T08:42:55.524 Timer triggered at 2016-10-03T08:43:00 2016-10-03T08:42:55.524 Function completed (Success, Id=7e3302c0-3356-431e-83fc-74337748dcb3)
無事Azure FunctionsからslackにPostすることができました。
Scheduleの設定
Postするタイミングの設定は、画面左側の「統合」から行うことができます。
5分おきに通知した場合は
0 */5 * * * *
2時間ごとは
0 0 */2 * * *
P.M.5時30分は
0 30 17 * * *
詳しくはここが参考になります。
https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-timer/
今回は24時間ごとに通知するように設定しました。
0 0 * */1 * *
としました。
まとめ
Azure Functionsを利用して簡単にSlack botを作成することができました。インフラ部分を考えずにコードを記述するだけで良いので便利ですね。