Azure Functions でBacklogからSlack通知するシステムをPythonで作ったお話。

こんにちは。まーやです。今日は Azure Functions で Pythonを使ったお話。

最近社内で必要が出て来たBacklog のSlack通知。zapier などを使えば手軽にぽちぽちするだけでBacklog -> Slack 通知ができるんですが、無料版だと回数制限があります。JJUGの運営Slackでもzapier を使って通知していますが、カンファレンス前になるとあっという間に制限に引っかかってしまいます。100回って意外と通知制限くるの早いんですよね。お仕事でコメント更新なんかも通知しているとすぐ制限にかかってしまって、あまり利用の現実味がありません。でも、なるべく通知にお金をかけたくない。そこで使ったのが Azure Funcions です。

Azure Functionsとは

Azure Functions はいわゆるサーバレスアーキテクチャのサービスです。AWS Lambda的なサービスです。主にJavascript(Node.js)/C# で使うことを想定されていますが、Pythonも動きます。私がAzure Functionsを好きな理由は次の通り。

  • 処理の実行方法がタイマー式・トリガー式に加え、WebAPI式を利用できること

最初のトリガー選択の1つにWebAPIが存在します。ボタン一つでWebhookなどに対応させることができるのでとても便利です。今回もこのWebAPI式実行を使用しました。

  • 無料枠がいっぱい

ひと月あたり400,000 GB 秒、100 万実行回数まで無料です。ちょっとしたツールレベルなら無料で十分。とか言ってますが、これはAWS Lambdaと同等の無料枠。同系サービスと比べていっぱい、というよりも無料でサーバの運用から解放されるなら最高じゃない?という感じです。

逆にもうちょっと頑張れ!というところはこちら。

  • Pythonを動かす時の作業が面倒

後ほど作業手順の中で出て来ますが、Python3系の利用やライブラリの追加を行うためにKuduという管理ツールを別途開いて作業が必要です。難しくはないんですが、最初戸惑うのでできれば同じダッシュボードで作業したいなーという気分になってしまいます。なんならrequirementファイル渡したら自動でライブラリinstallしてくれるようにならないかな・・・なんて思ったり(GCPのCloud Functionsがそうですね)。

実装よもやま話

https://github.com/mahya8585/send_slack_from_backlog/tree/master/single_channel/functions

↑が実際のコードです。

Azure FunctionsでPythonの追加ライブラリを利用したい場合、kuduからライブラリをアップロードして、コード上でパスを通してあげる必要があります。

1. kuduを起動
スクリーンショット 2017-07-28 13.52.10.png

2. コンソールで対象ディレクトリに移動、ライブラリをアップロード
スクリーンショット 2017-07-28 15.19.28

3. こんな感じでコード上(run.py)でパスの指定をしてからimportして利用

sys.path.append('Lib')
import requests
・・・・

あとは、slackの通知文にリンクを貼りたい場合は、incomming hook に渡すメッセージで↓のように描いてあげる必要があります。

< 【リンク先URL】 | 【表示文字】 >

e.g.)
'<https://foobar.backlog.jp/view/' + ticket_id + ' | チケットが更新されました'> '  

あとは完成したAzure FunctionsのURLをBacklogのwebhookに登録してあげればOK
スクリーンショット 2017-07-28 15.33.29

例えばこんな感じで通知されます。
スクリーンショット 2017-07-28 15.41.05

こういう連携処理ってなるべくサーバ管理したくないですし、ちょろっとだけコード書いてパパッと使えるようにしたいものなので、Function系のサービスはとてもおすすめです。

さて、社内のslackでお試しが完了したので、JJUGの運営Backlog&slackにも適用するぞー!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中