#azure-cosmosdb #arm-template
#azure-cosmosdb #azure-rm-template
Вопрос:
У меня есть шаблон ARM, который использует исходный ключ CosmosDB следующим образом:
{ «свойства»: { «включено»: true, «siteConfig»: { «AppSettings»: [ { «имя»: «MongoDB:CnnDetails», «значение»: «[listKeys(resourceId(‘Microsoft.DocumentDB/databaseAccounts’, переменные(‘cosmosdb_full’)), ‘2015-04-08’).primaryMasterKey]» } }
Как мне изменить ее, чтобы вместо нее получить фактическую строку подключения?
Я попробовал несколько вещей:
- изменил слово primaryMasterKey на primaryConnectionString. При этом выдается сообщение об ошибке:
‘Свойство выражения языка ‘primaryConnectionString’ не существует, доступными свойствами являются ‘primaryMasterKey, secondaryMasterKey, primaryReadonlyMasterKey, secondaryReadonlyMasterKey’
- изменил рабочие клавиши списка на 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»: «[ОТРЕДАКТИРОВАНО]», «secondaryMasterKey»: «[ОТРЕДАКТИРОВАНО]», «primaryReadonlyMasterKey»: «[ОТРЕДАКТИРОВАНО]», «secondaryReadonlyMasterKey»: «[ОТРЕДАКТИРОВАНО]»}
итак, я понимаю, почему сработал .primaryMasterKey. Но ListConnectionStrings возвращает:
{
"connectionStrings": [
{
"connectionString": "mongodb://[REDACTED]:10255/?ssl=trueamp;replicaSet=globaldb",
"description": "Primary MongoDB Connection String"
},
{
"connectionString": "mongodb://[REDACTED]:10255/?ssl=trueamp;replicaSet=globaldb",
"description": "Secondary MongoDB Connection String"
},
{
"connectionString": "mongodb://[REDACTED]:10255/?ssl=trueamp;replicaSet=globaldb",
"description": "Primary Read-Only MongoDB Connection String"
},
{
"connectionString": "mongodb://[REDACTED]:10255/?ssl=trueamp;replicaSet=globaldb",
"description": "Secondary Read-Only MongoDB Connection String"
}
]
}
Не уверен, как «индексировать в нее»?
Любые подсказки с благодарностью получены.
Ответ №1:
Для всех, кто еще находит этот вопрос и хочет получить полностью завершенный фрагмент шаблона ARM, это то, что я использовал и работает:
"connectionStrings": [
{
"name": "CosmosConnection",
"connectionString": "[listConnectionStrings(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDbAccountName')), '2019-12-12').connectionStrings[0].connectionString]",
"type": 3
}
]
Ответ №2:
как вы обычно делаете практически на любом языке:
ListConnectionStrings.connectionStrings[index].connectionString
индекс начинается с 0.
у вас есть более «родной» способ сделать это:
first(ListConnectionStrings.connectionStrings).connectionString
но доступны только функции first и last
Комментарии:
1. Спасибо, я попробовал [listConnectionStrings(resourceId(‘Microsoft. DocumentDB/databaseAccounts’, переменные(‘cosmosdb_full’)), ‘2015-04-08’)[1]. ConnectionString] но я пропустил бит ConnectionStrings [а также думал, что на основе единицы, а не на основе нуля].
Ответ №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"
}
Комментарии:
1. Не могли бы вы объяснить, где именно ваш JSON должен быть подключен к шаблону ARM?
2. Это вошло бы в раздел свойств строк подключения, например { «name»: «connectionstrings», «type»: «config», «apiVersion»: «2018-11-01», «properties»: { «Cosmos»: { «value»: «[listConnectionStrings(resourceId(параметры(‘cosmosResourceGroupName’), ‘Microsoft. DocumentDB/databaseAccounts’, параметры(‘cosmosDbName’)), ‘2019-12-12’).ConnectionStrings[0].ConnectionString]», «тип»: «Пользовательский» } } }`
Ответ №4:
В связанном с космосом шаблоне ARM с именем linkedTemplate_cosmos_db-gdp-event-ammi-dev-ne-001 я использовал следующий код.
"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]"