Search code examples
azureazure-logic-appsazure-resource-managerazure-bicep

Deploying ARM Template for an API Connection that uses OnPrem Data Gateway succeeds but the authType and gateway parameters are missing


I've been banging my head against a brick wall on this.

I'm trying to deploy via Azure DevOps pipeline, a bicep/ARM Template an API Connection that uses a Custom Connector that is linked to an On-prem API via a Data Gateway.

Here is my bicep file...

param connectionName string
param displayName string
param gatewayResourceGroup string
param gatewayName string
param connectorName string
param location string = resourceGroup().location

resource connector 'Microsoft.Web/customApis@2016-06-01' existing = {
  name: connectorName
}

resource gatewayApi 'Microsoft.Web/connectionGateways@2016-06-01' existing = {
  name: gatewayName
  scope: resourceGroup(gatewayResourceGroup)
}

resource apiConnection 'Microsoft.Web/connections@2016-06-01' = {
  name: connectionName
  location: location
  properties: {
    displayName: displayName
    nonSecretParameterValues: {
      authType: 'anonymous'
#disable-next-line BCP036
      gateway: {
        name: gatewayName
        id: gatewayApi.id
        type: 'Microsoft.Web/connectionGateways'
      }
    }
    api: {
      name: connector.name
      displayName: 'CONNECTOR ${connectorName}'
      id: connector.id
      type: 'Microsoft.Web/customApis'
    }
  }
}

I issue is the nonSecretParameterValues.

They don't go anywhere.

The API Connection is deployed like... authType and gateway values are missing

What makes this a little worse is the deployment is successful... Deployment status

But if I drill into the Operation details I can see there were two issues... Request and Response

            "overallStatus": "Error",
            "statuses": [
                {
                    "status": "Error",
                    "target": "authType",
                    "error": {
                        "code": "ConfigurationNeeded",
                        "message": "Parameter value missing."
                    }
                },
                {
                    "status": "Error",
                    "target": "gateway",
                    "error": {
                        "code": "ConfigurationNeeded",
                        "message": "Parameter value missing."
                    }
                }
            ],

Very frustrating.

Now I can manually add the values I intended to be there for the authType and gateway parameters after the deployment is "successful". Then my logic app that uses this API Connection and Custom Connector to Onprem Gateway works as expected.

But the exported template for the API Connection does not change between the connection having missing parameters (in the UI) or after I manually enter the values.

I have also tried added some Powershell after the deployment to pick up the connection and to try settings the "missing" values and updating the resource from there.

I can see another API Connection via Powershell which is correctly set with the authType and gateway parameters.

But when I try, to set these on the resource I need to "fix" it also complains... No go from Powershell either :(

I would really like to have the API Connection deployment fully via Azure DevOps pipeline.

NOTE: I find it very odd to have to use the #disable-next-line BCP036 to disable the warning in VSCode. And even opening the built ARM Template will give a warning on the "gateway" property name. I even tried replacing the "object" with just the resource id and that didn't help. ARM Template warning


Solution

  • The parameters should be in a parameterValues property object:

    resource apiConnection 'Microsoft.Web/connections@2016-06-01' = {
      name: connectionName
      location: location
      properties: {
        displayName: displayName    
        parameterValues: {
          authType: 'anonymous'
          gateway: {
            id: gatewayApi.id
          }
        }
        ...
      }
    }