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

ubi*_*bie 10 azure-rm-template azure-cosmosdb

我有一个 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。这给出了一个错误说:

'语言表达式属性'primaryConnectionString'不存在,可用属性为'primaryMasterKey、secondaryMasterKey、primaryReadonlyMasterKey、secondaryReadonlyMasterKey'

  1. 将工作 listKeys 更改为 listConnectionStrings。这是我的视觉工作室中的红色下划线,但在通过 azure devops 时似乎可以工作

'语言表达式属性 'primaryConnectionString' 不存在,可用属性为 'connectionStrings'

  1. 我去https://docs.microsoft.com/en-us/rest/api/cosmos-db-resource-provider/databaseaccounts/listconnectionstrings#code-try-0尝试一下。ListKeys 返回这样的结构:

    { "primaryMasterKey": "[REDACTED]", "secondaryMasterKey": "[REDACTED]", "primaryReadonlyMasterKey": "[REDACTED]", "secondaryReadonlyMasterKey": "[REDACTED]" }

所以我明白为什么 .primaryMasterKey 起作用了。但 ListConnectionStrings 返回:

{
  "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"
}
]
}
Run Code Online (Sandbox Code Playgroud)

不确定如何“索引到它”?

任何线索都感激地收到。

Off*_*oes 18

对于其他人发现这个问题并想要一个完整的 ARM 模板片段,这就是我使用过的并且正在工作:

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


4c7*_*b41 5

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

ListConnectionStrings.connectionStrings[index].connectionString
Run Code Online (Sandbox Code Playgroud)

索引从 0 开始。

你有一个更“本地”的方式来做到这一点:

first(ListConnectionStrings.connectionStrings).connectionString
Run Code Online (Sandbox Code Playgroud)

但只有可用的功能是 first 和 last


小智 5

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"
}
Run Code Online (Sandbox Code Playgroud)