Logic App(Standardプラン) の HTTPトリガーで叩くCallback URL を取得する方法

結論

Logic App Standard の HTTP トリガーの Callback URL を取得するには、Azure CLI の az rest コマンドを使い、実際に設定されているトリガー名(例:manual)を指定する必要があります。

Logic App Consumption では When_a_HTTP_request_is_received という固定の名前が使われていましたが、Standard ではmanualとなっていました。正しい名前を指定しないと URL を取得できません

はじめに

Azure Logic Apps は、クラウド上で簡単にワークフローを作れる便利なツールです。特に、外部のサービスと連携する際に HTTP トリガーを使うことが多いです。

今回はHTTPトリガーを叩くためにsigが必要だったので、それをaz commandで取得する方法となります。
トリガーごとにsigが変わってしまうので、エンドポイントごとに取得する必要があります。

Consumption 型の Logic App なら、PowerShell の Get-AzLogicAppTriggerCallbackUrl コマンドで簡単に Callback URL を取得できるみたいです。Standard 型ではこのコマンドが使えない?という情報もありました。(ただ、今回はaz commandを使いたいというのもあり別の方法にしました。)
https://stackoverflow.com/questions/61362860/how-can-you-obtain-the-full-url-of-a-http-triggered-logic-app-in-the-azure-porta

代わりに Azure CLI の az rest コマンドを使って URL を取得する方法が必要になります。

こちらにその方法が紹介されています。

記事では、 When_a_HTTP_request_is_received は HTTP トリガーの例なので、ワークフローのトリガー名に応じて変更する。とあるので、そのままでは URL を取得できません。

正しい Callback URL の取得方法

一旦Portalを見にいきます。このmanualというのが重要です。

以下の Azure CLI コマンドを使えば、正しい Callback URL を取得できます。

#!/bin/bash

# サブスクリプションおよびリソース情報を設定
subscription='<SUBSCRIPTION_ID>'
resourceGroupName='<RESOURCE_GROUP_NAME>'
logicAppName='<LOGIC_APP_NAME>'
workflowName='<WORKFLOW_NAME>'
triggerName='<TRIGGER_NAME>' #ここがmanual

# 正しいトリガー名称(例: manual)を指定した Management API のエンドポイント URL を作成
uri="https://management.azure.com/subscriptions/${subscription}/resourceGroups/${resourceGroupName}/providers/Microsoft.Web/sites/${logicAppName}/hostruntime/runtime/webhooks/workflow/api/management/workflows/${workflowName}/triggers/${triggerName}/listCallbackUrl?api-version=2018-11-01"

# POST リクエストを実行し、レスポンスを取得
workflowDetails=$(az rest --method post --uri "$uri")

# jq を使用して Callback URL を抽出して表示
echo "$workflowDetails" | jq -r '.value'

ポイントは${triggerName} の部分を自分が設定したトリガー名に変更すること
Logic App Consumption のように When_a_HTTP_request_is_received では動かないので注意が必要です。


まとめ

  • Logic App Standard では、HTTP トリガー名はユーザーが自由に決められる(例:manual)
  • Consumption 型のように Get-AzLogicAppTriggerCallbackUrl コマンドは使えない
  • Azure CLI の az rest コマンドを使う必要がある
  • トリガー名を間違えると正しい URL が取得できない
  • Ankit Gupta さんの記事では When_a_HTTP_request_is_received を指定していたが、Standard では環境によって異なるため注意