Azure functions を使ってサーバレスなslackボットを作成してみた。

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してみます。

ss10

Slack でIncoming WebHooks を追加する

指定したURLへPostするとSlackにメッセージが投稿されるようにするために、Incoming WebHooks を追加します。

slackの「Apps & Integrations」からIncoming WebHooksを追加します。「Incoming WebHooks」と検索し、追加します。

ss00

「Add Configuration」からチャネルを設定し、どんどん進んでいくと「Webhook URL」がでてくるのでこれを控えておきます。

ss01

Function App の作成

Azure PortalからFunction Appを作成します。

「新規」から「Function App」を検索して選択します。

ss02

そして、「アプリ名」やリソースグループなどが聞かれるので適当に記入します。

Function の作成

デプロイが完了したらFunctionを作成します。

作成したリソースグループからAzure Functionsを選択します。

今回は時間をトリガーとしてslackにpostしたいので「タイマー」を選択し、言語は「JavaScript」とし、作成します。

ss03

ss04

コードの部分に下記のコードを記載します。

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
にアクセスします。

ss05

上の方にある[Debug Console]から[CMD]を選択します。

ss07

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)

ss08

無事Azure FunctionsからslackにPostすることができました。

Scheduleの設定

Postするタイミングの設定は、画面左側の「統合」から行うことができます。

ss09

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を作成することができました。インフラ部分を考えずにコードを記述するだけで良いので便利ですね。

Be the first to comment

コメント投稿

Your email address will not be published.


*