1

我在具有 HTTP 触发器的标准逻辑应用程序中有一个工作流。当工作流被触发时,工作流会从 CosmosDB 中检索一些数据。就像是:

在此处输入图像描述

前一种方法需要有一个 API 连接。我已经创建并部署了一个“V2”API 连接。让我们称之为myCosmosCon

同样在我的逻辑应用程序的 ARM 模板中,我已经将connectionRuntimeUrl我的连接 API(to myCosmosCon)添加到 appSettings(配置):

....
"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 模板时,我没有发现任何错误,工作流看起来也不错。唯一的问题是没有生成指向 HTTP 触发器的 URL 链接,我无法运行该程序。

但是,如果我connection_runtimeUrl将connections.json 文件中的 更改为具有实际值;看起来像:

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

URL 是直接生成的,我可以简单地运行工作流。之后,如果我按connection_runtimeUrl原样返回(调用 appsettings()),它仍然有效!链接也留在那里。

看起来当我部署逻辑应用程序和连接.json 的工作流时,没有编译或调用,所以 Azure 认为有错误并且不生成链接。

关于如何解决问题的任何想法?

谢谢!

4

2 回答 2

0

不确定但可能是问题所在:为逻辑应用标准创建连接 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

于 2021-08-24T05:50:49.797 回答
0

我遇到了完全相同的问题/错误。我看到的唯一解决方法是将工作流程部署两次。第一次使用指向虚拟连接的实际 URL,第二次使用 appsetting 引用。

于 2021-09-02T09:22:59.113 回答