在 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]"
}
}
如何修改它以获取实际的连接字符串?
我已经尝试了一些事情:
- 将单词 primaryMasterKey 更改为 primaryConnectionString。这给出了一个错误说:
'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'primaryMasterKey, secondaryMasterKey, primaryReadonlyMasterKey, secondaryReadonlyMasterKey'
- 将工作 listKeys 更改为 listConnectionStrings。这在我的 visual studio 中带有红色下划线,但在通过 azure devops
时似乎有效
'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'connectionStrings'
我去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]"
我有一个 ARM 模板,它按如下方式获取 cosmosDb 的 primaryMasterKey:
{ "properties": { "enabled": true, "siteConfig": { "appSettings": [ { "name": "MongoDb:CnnDetails", "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosdb_full')), '2015-04-08').primaryMasterKey]" } }
如何修改它以获取实际的连接字符串?
我已经尝试了一些事情:
- 将单词 primaryMasterKey 更改为 primaryConnectionString。这给出了一个错误说:
'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'primaryMasterKey, secondaryMasterKey, primaryReadonlyMasterKey, secondaryReadonlyMasterKey'
- 将工作 listKeys 更改为 listConnectionStrings。这在我的 visual studio 中带有红色下划线,但在通过 azure devops 时似乎有效
'The language expression property 'primaryConnectionString' doesn't exist, available properties are 'connectionStrings'
我去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]"