Azure создает URL-адрес для стандартного приложения логики с подключением к CosmosDB

У меня есть рабочий процесс в стандартном приложении логики с триггером HTTP. Когда рабочий процесс запущен, рабочий процесс получает некоторые данные из CosmosDB. Что-то вроде:

Предыдущий метод потребует подключения к API. Я уже создал и развернул соединение API «V2». Назовем это

Также в шаблоне ARM для моего приложения логики я уже добавил из в appSetting (конфигурация):

      ....
"siteConfig": {
      "appSettings": [
       {
          "name": "subscriptionId",
          "value": "[subscription().subscriptionId]"
       },
       {
          "name": "resourceGroup_name",
          "value": "[resourceGroup().name]"
       },
       {
            "name": "location_name",
            "value": "[resourceGroup().location]"
       },
       {
            "name": "connectionRuntimeUrl",
            "value": "[reference(resourceId('Microsoft.Web/connections', parameters('connection_name')),'2016-06-01', 'full').properties.connectionRuntimeUrl]"
      },
      .....               
      ]
    }, 

Затем я написал в файле connections.json следующее:

      {
"managedApiConnections": {
  "documentdb": {
    "api": {
      "id": "/subscriptions/@appsetting('subscriptionId')/providers/Microsoft.Web/locations/@appsetting('location_name')/managedApis/documentdb"
    },
    "connection": {
      "id": "/subscriptions/@appsetting('subscriptionId')/resourceGroups/@appsetting('resourceGroup_name')/providers/Microsoft.Web/connections/myCosmosCon"
    },
    "connectionRuntimeUrl": "@appsetting('connection_runtimeUrl')",
    "authentication": {
        "type": "ManagedServiceIdentity"
    }
  }
}

}

Теперь, когда я развертываю шаблон ARM своего приложения Logic, рабочего процесса и т. Д., Я не вижу ошибок, рабочий процесс также выглядит хорошо. Проблема только в том, что URL-ссылка на триггер HTTP не создается, я не могу запустить программу.

Однако, если я изменю в файле connections.json на фактическое значение; выглядеть примерно так:

            "connectionRuntimeUrl": "https://xxxxxxxxxxxxx.xx.common.logic-norwayeast.azure-apihub.net/apim/myCosmosCon/xxxxxxxxxxxxxxxxxxxxxxxx/",

URL-адрес создается напрямую, и я могу просто запустить рабочий процесс. ПОСЛЕ этого , если я верну как это было (вызов appsettings()), он все еще работает !! ссылка тоже останется там.

Похоже, что когда я развертываю приложение логики и рабочий процесс, файл connections.json не компилируется и не выполняет вызов, поэтому Azure считает, что произошла ошибка, и не создает ссылку.

Есть идеи, как решить проблему?

Спасибо!

2 ответа

Не уверен, но может быть проблема: когда вы создаете API подключения для стандарта приложения логики, вам также необходимо создать политику доступа на уровне API подключения для системы, назначенной удостоверением, запускающим стандарт приложения логики.

      param location string = resourceGroup().location
param cosmosDbAccountName string
param connectorName string = '${cosmosDbAccountName}-connector'

// The principalid of the logic app standard system assigned identity
param principalId string

// get a reference to the cosmos db account
resource cosmosDbAccount 'Microsoft.DocumentDB/databaseAccounts@2021-06-15' existing = {
  name: cosmosDbAccountName
}

// create the related connection api
resource cosmosDbConnector 'Microsoft.Web/connections@2016-06-01' = {
  name: connectorName
  location: location
  kind: 'V2'
  properties: {
    displayName: connectorName
    parameterValues: {
      databaseAccount: cosmosDbAccount.name
      accessKey: listKeys(cosmosDbAccount.id, cosmosDbAccount.apiVersion).primaryMasterKey
    }
    api: {
      id: 'subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${location}/managedApis/documentdb'
    }
  }
}

// Grant permission to the logic app standard to access the connection api
resource cosmosDbConnectorAccessPolicy 'Microsoft.Web/connections/accessPolicies@2016-06-01' = {
  name: '${cosmosDbConnector.name}/${principalId}'
  location: location
  properties: {
    principal: {
      type: 'ActiveDirectory'
      identity: {
        tenantId: subscription().tenantId
        objectId: principalId
      }
    }
  }
}

output connectionRuntimeUrl string = reference(cosmosDbConnector.id, cosmosDbConnector.apiVersion, 'full').properties.connectionRuntimeUrl

У меня проблема с той же проблемой / ошибкой. Единственный обходной путь, на мой взгляд, - это дважды развернуть рабочий процесс. Первый раз с фактическим URL-адресом, указывающим на фиктивное соединение, и второй раз со ссылкой на приложение.

Другие вопросы по тегам