Use case — I want to import a Logic App as an API within my APIM instance.

There is no direct way to get the swagger file of a logic app using CLI (at least, I could not figure out). So, detailing the steps to extract the swagger definition of a logic app. I use the generated swagger file to import a Logic App as an API within APIM using Azure CLI

  1. Provide the service principal contributor role to the logic app
  • Get the resource id of the logic app —
$logicAppResourceId = (az logic workflow show --resource-group "{resourcegroup-name}" --name "{logicAppName}" --query id --output tsv)
  • Provide contributor role for the service principal —
az role assignment create --assignee {sp-id} - role Contributor --scope $logicAppResourceId

2. Get the swagger file from the Logic App

$tenantId = "11111111-1111-1111-1111-111111111111"  
$clientId = "00000000-0000-0000-0000-000000000000"  
$clientSecret = "your-client-secret"  
$resource = "https://management.core.azure.com/"  
  
$body = @{  
    grant\_type    = "client\_credentials"  
    client\_id     = $clientId  
    client\_secret = $clientSecret  
    resource      = $resource  
}  
  
$response = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/token" -ContentType "application/x-www-form-urlencoded" -Body $body  
  
$accessToken = $response.access\_token  
$accessToken
  • construct the swagger URL for the logic app —
$swaggerUrl = "https://management.azure.com" + (az logic workflow show --resource-group "{resourcegroup-name}" --name "{logicapp-name}" --query id --output tsv) + "/listSwagger?api-version=2016–06–01"
  • Issue a POST request to $swaggerUrl to get the swagger definition of the LogicApp using Postman (or any other option you prefer)

3. Import into APIM

  • Run the below command to import the above swagger file to APIM
az apim api import --resource-group "{resourcegroup-name}" --service-name "{apim-instance-name}" --path "/v1" --api-id myapi --specification-path ".\\logicapp.backend.swagger.json" --specification-format Swagger

4. Remove the contributor role for the service principal

az role assignment delete --assignee 00000000–0000–0000–0000–000000000000 --role "Contributor" --scope $logicAppResourceId