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

15
我有一个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'”。
2.将work listKeys更改为listConnectionStrings。这在我的Visual Studio中是红色下划线,但在通过Azure DevOps时似乎有效。
“语言表达式属性'primaryConnectionString'不存在,可用属性为'connectionStrings'”。
我访问了https://learn.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"
}
]
}

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

非常感谢任何线索。

4个回答

25

对于其他想要完整的 ARM 模板代码片段的人,这就是我使用的并且有效的代码:

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

6

像几乎所有语言一样正常使用:

ListConnectionStrings.connectionStrings[index].connectionString

索引从0开始。

你有一种更“本地”的方式来做这件事:

first(ListConnectionStrings.connectionStrings).connectionString

但是只有可用的函数是“first”和“last”


谢谢,我已经尝试过 [listConnectionStrings(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosdb_full')), '2015-04-08')[1].connectionString] 但是我漏掉了 connectionStrings 部分 [而且还以为是从1开始而不是从0开始的]。 - ubienewbie

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

你能解释一下你的JSON应该插入ARM模板的哪个位置吗? - Serj
这将进入连接字符串部分的属性,例如: { "name": "connectionstrings", "type": "config", "apiVersion": "2018-11-01", "properties": { "Cosmos": { "value": "[listConnectionStrings(resourceId(parameters('cosmosResourceGroupName'),'Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDbName')), '2019-12-12').connectionStrings[0].connectionString]", "type": "Custom" } } }` - Lee

0
在名为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]"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接