
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」とし、作成します。
コードの部分に下記のコードを記載します。
[code]
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();
}
[/code]
そして、保存します。
保存すると、下記のようなExceptionが現れました。
[code]
2016-10-03T08:24:00.003 Exception while executing function: Functions.TimerTriggerNodeJS1. mscorlib: Error: Cannot find module ‘request’
[/code]
request moduleがないと言われています。
仕方ないのでrequest Moduleを追加します。
パッケージの追加はpackage.jsonをアップロードすることでもできますが、今回はKuduを利用して追加してみます。
ブラウザから
https://【function_app_name】.scm.azurewebsites.net
にアクセスします。
上の方にある[Debug Console]から[CMD]を選択します。
D:\home\site\wwwrootに移動して
[code]
npm init
npm install request –save
[/code]
を実行します。
再度実行試してみます。
[code]
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)
[/code]
無事Azure FunctionsからslackにPostすることができました。
Scheduleの設定
Postするタイミングの設定は、画面左側の「統合」から行うことができます。
5分おきに通知した場合は
[code]
0 */5 * * * *
[/code]
2時間ごとは
[code]
0 0 */2 * * *
[/code]
P.M.5時30分は
[code]
0 30 17 * * *
[/code]
詳しくはここが参考になります。
https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-timer/
今回は24時間ごとに通知するように設定しました。
[code]
0 0 * */1 * *
[/code]
としました。
まとめ
Azure Functionsを利用して簡単にSlack botを作成することができました。インフラ部分を考えずにコードを記述するだけで良いので便利ですね。


コメント投稿