はじめに
最近Microsoft Azure
上で稼働するアプリケーションなどを監視するために、Azure
のLogic Apps
を使うことがある。
UIからの操作をメインに想定しているLogic Apps
では、細かな部分に手が届きづらいという難点があり、プログラムで書いた方が早くね?という自問自答が絶えない。
そんなノーコード・ローコードあるあるを抱えつつ、道中で遭遇したTipsについてまとめてみる。
(随時更新予定)
1. UnixTimeの取得
既存のAPIを定期的に叩き返却値を検証するLogic Apps
を作成した時のこと。
そのAPIの仕様で、時間をUnixTime
で扱っていたが、Logic Apps
でUnixTime
を扱える便利な関数はない。
自分で計算することになるが、下記のように計算で求めることになる。
div(sub(ticks(utcNow()),ticks('1970-01-01')), 10000000)
ticks()
は0001年1月1日午前0時00分00秒からの100ナノ秒単位の刻みの回数とのことなので、現在時刻からUnixTime
のベース時間(1970/01/01)との差をticksで求めつつ、ticks()の100ナノ秒単位の部分を秒変換してあげればいい。(1秒 = 1000000000ナノ秒)
Azure Logic Appsのワークフロー式関数のリファレンス ガイド - ticks
2. 日付のフォーマット
現在時刻をJSTでフォーマットしつつ表示したいケースは多いと思う。
その際に現在時刻を取得して、タイムゾーンを変換して、フォーマットして...のような作業をコネクタを組み合わせてやっているとワークフローが長ったらしくなってしまう。
convertFromUtc()
を使えば、一撃で取得できる。
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd HH:mm:ss')
3. ロジックアプリデザイナーのフローに名前をつける時アンダースコア(_)が表示されない
ロジックアプリではフローに識別子を与えることができる。
ロジックアプリデザイナーは確かに「For each」と書いてあるが、コードビューでは「For_each」と記載されている。
どうも、ロジックアプリデザイナーでアンダースコアが表示できないバグ?があるようだ。
4. テキストファイル作成時の改行
Application Insights
で定期的にクエリを実行し、結果をAzureのストレージアカウントにテキストファイルで保存したい場面があった。その際任意の場所で改行したかったのだが、改行文字列周りで詰まったのでメモ。
URIエンコードされた改行文字列は「'%0A'」で表現されるので、テキストに変換し結合させる。
concat('For_each')?['message'], uriComponentToString( '%0A' ))
まとめ
AzureのLogicAppsはところどころに落とし穴があり、細かいところで時間を浪費してしまうことがある。
細かいところには手が届かないがサクッとつくれることがLogicAppsの売りでもあると思う。
エンジニアの性で解決したくなる気持ちもわかるが、あきらめてAzure Functions等で作ってしまうのもありだと思う。