Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting callback url for logic app in ARM

I'm deploying an ARM template, which includes: azure functions + logic apps.

Following link i've created a simple flow: one of method from azure functions calls logic app. Let's name the method as "A". The logic app as "B":

A calls B.

The logic app (B) contains "callback URL". Method (A) needs to have a callback url to the logic app (B). I need to set up this variable by "copy" this value:

enter image description here

And in my azure app function I need to set this value as application setting.

Right now, my ARM looks (more and less) like that:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    //(...)
  },
  "variables": {
    //(...)
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      //(...)
    },
    {
      "type": "Microsoft.Web/serverfarms",
      //(...)
    },
    {
      "apiVersion": "2015-08-01",
      "type": "Microsoft.Web/sites",
      "name": "[variables('functionAppName')]",
      "location": "[resourceGroup().location]",
      "kind": "functionapp",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ],
      "resources": [
        {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "sourcecontrols",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('functionAppName'))]"
          ],
          "properties": {
            "RepoUrl": "[parameters('repoURL')]",
            "branch": "[variables('branch')]",
            "IsManualIntegration": true
          }
        }
      ],
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
        "siteConfig": {
          "appSettings": [
            {
              "name": "AzureWebJobsDashboard",
              "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
            },
            //next my app settings
          ]
        }
      }
    },
    {
      "name": "[variables('logicAppName')]",
      "type": "Microsoft.Logic/workflows",
      "location": "[resourceGroup().location]",
      "apiVersion": "2016-06-01",
      "dependsOn": [
        "[resourceId('Microsoft.Web/connections', variables('servicebusConnectionName'))]",
        "[resourceId('Microsoft.Web/sites/sourcecontrols', variables('functionAppName'), 'web')]"
      ],
      "tags": {
        "displayName": "order-create"
      },
      "properties": {
        "definition": {
          "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
          "actions": {
            //(...)
          },
          "parameters": {
            "$connections": {
              "defaultValue": {},
              "type": "Object"
            }
          },
          "triggers": {
            "manual": {
              "type": "Request",
              "kind": "Http",
              "inputs": {
                "schema": {}
              }
            }
          },
          "contentVersion": "1.0.0.0",
          "outputs": {}
        },
        "parameters": {
          "$connections": {
            "value": {
              "servicebus": {
                "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/', 'servicebus')]",
                "connectionId": "[resourceId('Microsoft.Web/connections', variables('servicebusConnectionName'))]",
                "connectionName": "[variables('servicebusConnectionName')]"
              }
            }
          }
        }
      }
    },
    {
      "type": "MICROSOFT.WEB/CONNECTIONS",
      "apiVersion": "2016-06-01",
      "name": "[variables('servicebusConnectionName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "api": {
          "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', resourceGroup().location, '/managedApis/', 'servicebus')]"
        },
        "displayName": "[parameters('servicebus_1_Connection_DisplayName')]",
        "parameterValues": {
          "connectionString": "[parameters('servicebus_1_connectionString')]"
        }
      }
    }
  ],
  "outputs": {}
}

My questions are:

  1. It's possible to enforce logic app "callbackUrl" during deployment?
  2. It's possible to get the 'logic app' callback URL after deploying the logic app and set the "app settings" in azure functions?
  3. If not - do I need to write a powershell script to work on that?
  4. How can I access this value from resources manager?

I see "accessEndpoint" in path: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}?api-version=2016-06-01

but once i use this value in my app settings i have access denied.

Callback URL from logic app site looks familiar to: https://{server}.logic.azure.com:443/workflows/{workflow}/runs/{someid}/contents/TriggerInputs?api-version=2016-06-01&se=2017-10-30T13%3A34%3A27.3219438Z&sp=%2Fruns%2someid2%2Fcontents%2FTriggerInputs%2Fread&sv=1.0&sig={someid3}

like image 225
Marek Woźniak Avatar asked Oct 30 '17 10:10

Marek Woźniak


1 Answers

Since you were asking about how to do it in ARM, here is the solution which assumes the LA has a trigger named manual:

listCallbackUrl(resourceId('resource-group-name','Microsoft.Logic/workflows', 'logic-app-name', 'manual'), '2016-06-01').value

If you're deploying the logic app and function app to the same resource group you can exclude the resource group name.

Here is how you might add the callback Url to your function settings:

{ 
  "type": "Microsoft.Web/sites",
  "kind": "functionapp",
  "name": "[variables('function_app_name')]",
  "apiVersion": "2016-08-01",
  "location": "[resourceGroup().location]",
  "identity": { "type": "SystemAssigned" },
  "properties": {
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('function_hosting_plan_name'))]",
    "siteConfig":
    {
      "alwaysOn": true,
      "appSettings": [
        {
          "name": "Logic_App_Url",
          "value": "[listCallbackUrl(resourceId('resource-group-name','Microsoft.Logic/workflows/triggers', 'logic-app-name', 'manual'), '2016-06-01').value]"
        }
      ]
    },
    "resources": [
      {
        "apiVersion": "2015-08-01",
        "name": "appsettings",
        "type": "config",
        "dependsOn": [
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storage_account_name'))]",
          "[resourceId('Microsoft.Web/Sites', variables('function_app_name'))]"
        ],
        "properties": {
          "Logic_App_Url": "[listCallbackUrl(resourceId('resource-group-name','Microsoft.Logic/workflows/triggers', 'logic-app-name', 'manual'), '2016-06-01').value]"
        }
      }
    ]
  }
}
like image 129
Josh Avatar answered Oct 20 '22 07:10

Josh