Home > Software engineering >  Deploying ARM Template for an API Connection that uses OnPrem Data Gateway succeeds but the authType
Deploying ARM Template for an API Connection that uses OnPrem Data Gateway succeeds but the authType

Time:10-27

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

CodePudding user response:

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
      }
    }
    ...
  }
}

CodePudding user response:

Suggestion:

The nonSecretParameterValues object must be in the format of a dictionary. I cannot find any hard documentation about this as a data structure, but it's mentioned several times.

    nonSecretParameterValues: {
      authType: 'anonymous'
      gateway-name: gatewayName
      gateway-id: gatewayApi.id
      gateway-type: 'Microsoft.Web/connectionGateways'
    }

Hope this helps.

  • Related