なんとなく見かけたので Azure でもやってみましょう。 Azure なら一番簡単に REST API 作るんだったら Azure Functions かなぁ。ログは Application Insights かなぁ。
Azure Functions のドキュメント - チュートリアル | Microsoft Docs
Azure Application Insights とは何か | Microsoft Docs
全体像
Azure Functions は Lambda と違って HTTPTrigger というものがあって、Functions だけで REST API 作れます。 本格的に API として管理したければ API Management を使えば OK。
開発
じゃぁやってみましょう。本格的に開発するときはローカルに開発環境を作ってやるのが王道ですが、今回は使い捨てレベルくらいのものなのでポータル上で開発してみようと思います。
適材適所。
ポータルから Function App を作ります。作るときに一緒に Application Insights を作るのを忘れずに。 作り忘れた場合は、Application Insights を別途作って Function App のアプリケーション設定に Application Insights のキーを設定します。
作成画面はこんな感じ。
そして関数を作っていく。今回は先ほど言ったようにポータル内を選ぶ。
webhook + API を選ぶ。
暫くまつと HttpTrigger1 というトリガーが出来るのでコードをさくっと以下のようにします。
#r "Newtonsoft.Json"using System.Net; using System.IO; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; publicstatic async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation(await new StreamReader(req.Body).ReadToEndAsync()); returnnew OkObjectResult(new { message = "Powered by Azure" }); }
引数にわたってくる ILogger にログはけば Application Insights に行ってくれる。
実行ボタンを押すとテスト実行が出来ます。実行ボタンを押すと以下のようにログも出るのでちゃんと動いてることがわかります。
関数の URL の取得で、この関数を叩くための URL がゲットできるので Postman あたりで叩いてみます。
こんな感じ
Application Insights のライブメトリクス ストリームを選ぶとリアルタイムでログが流れていくのが見えます。
数分まつと Application Insights の検索からもひっかかるようになります。
リクエストで出た一連のログとかも見れるので割と便利。
JavaScript でもいける
C# になじみのない人は JavaScript でもいけます。
Function App 作るときにランタイムを dotnet ではなく JavaScript のほうを選んで作ると JavaScript でいけます。C# の時と同じ手順で webhook + API を作るといけます。
index.js の編集画面になるので以下のコードをさくっと書きましょう。 こういうのには個人的には JavaScript お手軽なので好きです。
module.exports = async function (context, req) { context.log(req.body); context.res = { body: { message: "Powered by Azure." } }; };
JavaScript のほうは引数にわたってくる context.log で出力した内容が Application Insights に行きます。
Postman などで叩くと同じようにライブメトリクス ストリームや検索でリクエストのボディを確認できるようになります。
まとめ
今回は JavaScript 本当に簡単でいい。(今回の例では C# ちょっとめんどい)
触ってみたいと思った人は
最近できた Microsoft Learn を使うと実際の Azure 環境を無料でクレカ不要で学習用だけに使うことが出来るので、そこの Azure Functions あたりのコースを流してみるのをお勧めします。