TL;DR
Microsoft FlowのトリガをHTTPリクエストに設定すると、AWS LambdaみたいなFaaSっぽい使い方ができる。(戻り値を使うとかはできないけど・・・) 2019/3/30追記: 戻り値を使うパターンは[応答]アクションを使えば実現できるそうです。r-wakatsukiさん、ありがとうございます!
また、デフォルトで登録されていない、任意のサービスに対応することができる。
Microsoft Flowって?
ノードベースプログラミングで簡単に操作のフローを自動化できる。
Slackやメール、Twitter等のアプリと連携が可能。
フリープランが存在し、月ごと750回まで実行可能 (2019/3/21現在)
https://japan.flow.microsoft.com/ja-jp/pricing
簡単な例 ( Hello World )
- トリガに
[HTTP要求の受信時]
を設定します。 - トリガに好きなフローを繋げる。ここではSlackにHello Worldを投稿させます。
- 生成されたURLにHTTPリクエストします。メソッドはデフォルトでPOSTです。powershellだと以下のようなコードで発火できます。
Invoke-RestMethod -Uri "https://prod-27.japaneast.logic.azure.com:443/XXXXXXXXXXXXXXXXXXXXXX" -Method POST
引数を渡す例 ( Slackに任意の内容を投稿 )
トリガに[HTTP要求の受信時]
を設定する際、JSONスキーマを指定すると、受け取ったJSONのデータをフロー内で扱うことができます。(ペイロードをアップロードすると、自動でスキーマ生成してくれます。)
-
以下の
sample_payload.json
から[HTTP要求の受信時]
にスキーマを生成します。 -
Slackのチャネル名で
[カスタム値の入力]
を選択し、channel
を選択します。メッセージテキストも同様にし、message
を選択します。
-
生成されたURLにHTTPリクエストします。powershellだと
helloworld2.ps1
のようなコードで発火できます。今度はrandomにhello worldを投稿します。
{
"channel":"general",
"message":"hello world"
}
Invoke-RestMethod -Uri "https://prod-27.japaneast.logic.azure.com:443/XXXXXXXXXX" -Method POST -Body ( @{"channel"="random";"message"="hello world"} | ConvertTo-Json) -ContentType 'application/json'
サービス連携 ( GitHub : forced push通知 )
Microsoft Flowはアプリケーション連携が豊富で便利だけど、GitHubにforced pushされたとき用のトリガは存在しないので、自分で作っていくしかありません。
- github webhookのサンプルペイロード( https://gist.github.com/gjtorikian/5171861 )から
[HTTP要求の受信時]
にスキーマを生成します - 条件フローを作成し、
[forced]
がtrue
に等しいとき、という設定にします。 -
[はいの場合]
にSlackを繋げてメッセージの投稿を設定します。
- 最後に、GitHubのWebhookに
[HTTP要求の受信時]
から生成されたURLを設定します。
これでforced pushされたときに、Slackに通知が飛びます。