Logic App(표준) 워크플로의 콜백 URL을 기반으로 Azure APIM 구성 자동화

내 연구에서 에 이르기까지 다음 단계는 bicep에서 Azure API Management를 자동으로 구성하는 것이었습니다.

내 계획은 특정 Logic App(표준)에 대한 워크플로 목록을 검색한 다음 APIM을 반복적으로 구성하여 백엔드 엔드포인트를 추가하는 것입니다. 쉬운 케이스인 줄 알았는데 그게 아니네요.

listcallbackUrl()의 결과 json은 다음과 같습니다(Microsoft 웹 사이트의 샘플).

{
  "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의 set-backend-service 및 rewrite-uri를 채워야 합니다. 위의 json에는 사용자 정의 함수가 필요합니다. 그리고 아아, 지금은 not possible in bicep입니다 :(

추가 조사와 테스트를 거쳐 결국 이것이 내가 생각해 낸 것입니다.
  • 논리 앱의 배열을 전달하여 기본 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 Management 정책에 사용하고 동일한 apiOperations 변수로 반복합니다.

  • 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'
      }
    }]
    

    좋은 웹페이지 즐겨찾기