論理アプリケーション(標準)ワークフローのコールバックURLに基づくAzure APIM構成の自動化


私の研究に続き、次のステップは自動的にAVEure API管理をBIIPで設定することでした.
私の計画は、特定の論理アプリケーション(標準)のワークフローのリストを取得し、バックエンドエンドポイントを追加するためにapimを繰り返し設定することです.私は、それが簡単なケースであると思いました、しかし、それはそうでありません.
結果として得られた結果は以下の通りです(マイクロソフトウェブサイトのサンプル).
{
  "value": "https://prod-03.westus.logic.azure.com/workflows/d4690301f3b340de9330256bb2e83974/triggers/requestTrigger/paths/invoke?api-version=2016-06-01&se=2018-04-19T16%3A00%3A00.0000000Z&sp=%2Ftriggers%2FrequestTrigger%2Frun&sv=1.0&sig=JXbHjs3qzLPDyk-IM_VzsN-WL_mNql3v_uWbBbKgtVk",
  "method": "POST",
  "basePath": "https://prod-03.westus.logic.azure.com/workflows/d4690301f3b340de9330256bb2e83974",
  "queries": {
    "api-version": "2016-06-01",
    "se": "2018-04-19T16:00:00.0000000Z",
    "sp": "//*",
    "sv": "1.0",
    "sig": "JXbHjs3qzLPDyk-IM_VzsN-WL_mNql3v_uWbBbKgtVk"
  }
}
私の必要条件は、私がapimのセットバックエンドサービスとURIを書き換えることを必要とします.上記のJSONでは、ユーザ定義関数が必要です.ああ、今のところnot possible in bicep :
更なる研究とテストの後、結局、これは私が思いついたものです:
  • ロジックアプリケーションの配列を渡すことによって、主なバイープ・ファイルから新しいモジュールを呼ぶ
  • module cbUrl 'module_cburl.bicep' = [for (item, i) in apiOperations: {
      name: 'url${i}'
      params: {
        logicAppId: resourceId(logicAppName)
        workflows: item
      }
    }]
    
  • ListCallBackURL ()を呼び出し、出力を自分のカスタムフォーマットで出力するモジュールを作成する
  • param logicAppId string
    param workflows string
    
    var url = listCallbackURL('${logicAppId}/hostruntime/runtime/webhooks/workflow/api/management/workflows/${workflows}/triggers/manual', '2022-03-01')
    var apiVersion = url.queries['api-version']
    
    output url object = {
      basePath: url.basePath
      queries: '?api-version=${uriComponent(apiVersion)}&sv=${uriComponent(url.queries.sv)}&sp=${uriComponent(url.queries.sp)}&sig=${uriComponent(url.queries.sig)}'
    }
    
    
  • 結果の配列をAPI管理ポリシーに使用し、同じapioperation変数で繰り返します.
  • resource apiPolicies 'Microsoft.ApiManagement/service/apis/operations/policies@2021-08-01' = [for (item, i) in apiOperations: {
      name: '${apimSvcRef.name}/${apiName}/${item}/policy'
      properties: {
        value: '<policies>\r\n  <inbound>\r\n    <base />\r\n    <set-backend-service base-url="${cbUrl[i].outputs.url.basePath}" />\r\n    <rewrite-uri template="${cbUrl[i].outputs.url.queries}" />\r\n  </inbound>\r\n  <backend>\r\n    <base />\r\n  </backend>\r\n  <outbound>\r\n    <base />\r\n  </outbound>\r\n  <on-error>\r\n    <base />\r\n  </on-error>\r\n</policies>'
        format: 'xml'
      }
    }]