Help us understand the problem. What is going on with this article?

Azure FunctionsでサーバレスにさくっとHipchat通知してみる

More than 3 years have passed since last update.

前提情報

今回やってみること

  • Azure Fuctionsを利用して、時間をトリガーにしてHipchatにメッセージをポストする

ユースケース

  • Azure Functionsを試しに使ってみたい
  • Chat Toolに時間になったらメッセージを通知したい
    • 今回はHipChatを対象にしていますが、Slack等に置き換えるのもそんなに難しくないです

書かないこと

  • Azureの詳しい説明
  • Azure Functionsの詳しい説明
  • HipChat APIの詳しい説明

手順

Hipchatから必要な情報をとってくる

以下を参考に、通知したいHipchat RoomのRoom IDとTokenを取得して下さい。

FunctionAppを作成する

Azure Portal からFunction Appを検索して作成します。
image

必要な情報を入力し、作成します。
もちろんARMテンプレートを流し込んで作成することも可能なので、得意な方はぜひそちらで。
image

しばらくすると、できあがりです。
image

Functionを作成する

できあがったFunction Appに関数を作成します。
レフトナビの関数の横にある「+」アイコンを押し、テンプレートを選択します。
今回はJavascript(Node.js)で、トリガーをTimerにしたいので、「TimerTrigger-JavaScript」を選択し、関数を作成します。
image

もうあとは基本的にはここに実装を書いていけばOKです。この画面で関数を実行してログを確認することもできるので、気軽にコードが書けてしまいます。
image

Node.jsのRequestモジュールをインストールする

今回HTTP Requestを送りたいので、Requestモジュールをインストールします。
Azure Functionの裏側は実はAzure WebAppと変わらないので、ちょちょいとkuduから入れてしまいます。
先程のFunctionAppの画面上にあるURLを見つけます。
image

そのURLのFunctionAppNameの後ろに「.scm」をつけてKuduにアクセスします。
https://${FunctionAppName}.scm.azurewebsites.net/
image

上部のタブの「Debug Console > CMD」をタップする。
image

コンソール上で以下を実行し、モジュールをインストールします。

# 異動
$ cd site/wwwroot

# モジュールインストール
$ npm init
$ npm install request --save

コードを書いて実行する

これで準備はできたので、先程の関数ページでコードを書きます。

module.exports = function(context,myTimer) {   
  if (myTimer.isPastDue) {
    context.log('JavaScript is running late!');
  }
  var request = require('request');
  var options = {
    url:     'https://api.hipchat.com/v2/room/**RoomId**/notification?auth_token=**token**'
   ,method:  'POST'
   ,headers: 'Content-type: application/json'
   ,json: {
      "from":           "Test Bot"
     ,"message":        "I love AKB48!!"     // メッセージ本文
     ,"color":          "purple"
     ,"notify":         "true"
     ,"message_format": "text"
    }
  };
  request.post(options, function (error, response, body) {
    context.log("Response Code : "+response.statusCode);
  })
  context.done();
}

今回使ったAPIについては Send room notification API Reference を参考にして下さい。

コードを実行するとログも表示されます。
image

たったこれだけで、実際にHipchatに通知ができました!!
image

Timerのトリガーを調整する

レフトナビの統合からスケジュールを設定できます。
image

詳しくは こちら を参考にして下さい。

感想

Preview時代にAzure Functionで遊んだことがありますが、GAされてとても使いやすくなったように感じました。
今回は時間をトリガーにしましたが、

  • Azure Blob
  • Azure Queue
  • Service Bus
  • Github
  • WebHook
  • HTTPリクエスト

などをトリガーにできるので、

  • キューをトリガーにして任意の処理を非同期で実行する
  • Blobに画像がアップロードされたらサムネイルを作成する
  • GithubへPushされたらBlobにコンテンツを配置する

などなどいろんな用途で利用できそうですね。
まわりのことはAzure Functionsがよろしくやってくれるのでメイン処理のコードに集中できそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away