在 ARM 模板中获取 CosmosDb 主连接字符串

Get CosmosDb Primary Connection String in ARM template

我有一个 ARM 模板,它按如下方式获取 cosmosDb 的 primaryMasterKey:

{ "properties": { "enabled": true, "siteConfig": { "appSettings": [ { "name": "MongoDb:CnnDetails", "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosdb_full')), '2015-04-08').primaryMasterKey]" } }

如何修改它以获取实际的连接字符串?

我已经尝试了一些事情:

  1. 将单词 primaryMasterKey 更改为 primaryConnectionString。这给出了一个错误说:

'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'primaryMasterKey, secondaryMasterKey, primaryReadonlyMasterKey, secondaryReadonlyMasterKey'

  1. 将工作 listKeys 更改为 listConnectionStrings。这在我的 visual studio 中带有红色下划线,但在通过 azure devops
  2. 时似乎有效

'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'connectionStrings'

  1. 我去https://docs.microsoft.com/en-us/rest/api/cosmos-db-resource-provider/databaseaccounts/listconnectionstrings#code-try-0试了一下。 ListKeys returns 结构如下:

    { "primaryMasterKey": "[已编辑]", "secondaryMasterKey": "[已编辑]", "primaryReadonlyMasterKey": "[已编辑]", "secondaryReadonlyMasterKey":“[已编辑]” }

所以我明白了 .primaryMasterKey 起作用的原因。但是 ListConnectionStrings returns:

{
  "connectionStrings": [
{
  "connectionString": "mongodb://[REDACTED]:10255/?ssl=true&replicaSet=globaldb",
  "description": "Primary MongoDB Connection String"
},
{
  "connectionString": "mongodb://[REDACTED]:10255/?ssl=true&replicaSet=globaldb",
  "description": "Secondary MongoDB Connection String"
},
{
  "connectionString": "mongodb://[REDACTED]:10255/?ssl=true&replicaSet=globaldb",
  "description": "Primary Read-Only MongoDB Connection String"
},
{
  "connectionString": "mongodb://[REDACTED]:10255/?ssl=true&replicaSet=globaldb",
  "description": "Secondary Read-Only MongoDB Connection String"
}
]
}

不确定如何 "index into it"?

感谢收到任何线索。

就像您通常使用几乎任何语言一样:

ListConnectionStrings.connectionStrings[index].connectionString

索引从 0 开始。

你有更多"native"的方式来做到这一点:

first(ListConnectionStrings.connectionStrings).connectionString

但只有 first 和 last 可用的函数

对于发现此问题并想要完整的 ARM 模板片段的任何其他人,这是我已经使用并正在工作的内容:

"connectionStrings": [
 {
   "name": "CosmosConnection",
   "connectionString": "[listConnectionStrings(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDbAccountName')), '2019-12-12').connectionStrings[0].connectionString]",
   "type": 3
 }
]

oatsoda 在此处的回答是正确的,但只有当您与要为其获取连接字符串的 Cosmos DB 在同一资源组中时,它才会起作用。如果您的 Cosmos DB 与您正在为以下代码段生成 ARM 模板的资源位于不同的资源组中,这就是我用来为应用服务生成连接字符串并且正在运行的模板。

"Cosmos": {
   "value": "[listConnectionStrings(resourceId(parameters('cosmosResourceGroupName'),'Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDbName')), '2019-12-12').connectionStrings[0].connectionString]",
   "type": "Custom"
}

在名为 linkedTemplate_cosmos_db-gdp-event-ammi-dev-ne-001 的 Cosmos 链接 ARM 模板中,我使用了以下代码。

"outputs": {
"ConnectionString": {
  "value": "[listConnectionStrings(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName')), '2019-12-12').connectionStrings[0].connectionString]",
  "name": "CosmosConnection",
  "type": "string"
}
},

然后在使用输出参数的 ARM 模板 (linkedTemplate_Main) 中,如下,例如函数应用程序配置设置

 "COSMOS_CONNECTION_STRING": {
        "value": "[reference('linkedTemplate_cosmos_db-gdp-event-ammi-dev-ne-001').outputs.ConnectionString.value]"