Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get CosmosDb Primary Connection String in ARM template

I have an ARM template which sources the primaryMasterKey of a cosmosDb as follows:

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

How to I modify it to get the actual connection string instead?

I've tried couple of things:

  1. changed the word primaryMasterKey to primaryConnectionString. This gives an error saying:

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

  1. changed the work listKeys to listConnectionStrings. This is red underlined in my visual studio, but seems to work when put through azure devops

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

  1. I went to https://docs.microsoft.com/en-us/rest/api/cosmos-db-resource-provider/databaseaccounts/listconnectionstrings#code-try-0 to try it out. ListKeys returns a structure like this:

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

so I get why the .primaryMasterKey worked. But 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"
}
]
}

Not sure how to "index into it"?

Any clues gratefully received.

like image 313
ubienewbie Avatar asked Mar 11 '19 18:03

ubienewbie


People also ask

How do I get my cosmos Connection String?

In an Internet browser, sign in to the Azure portal. In the Azure Cosmos DB blade, select the API. In the left pane of the account blade, click Connection String. The Connection String blade opens.

How do I connect my CosmosDB?

Access Azure Cosmos DB Explorer Sign in to Azure portal. From All resources, find and navigate to your Azure Cosmos DB account, select Keys, and copy the Primary Connection String. Go to https://cosmos.azure.com/, paste the connection string and select Connect.

Is CosmosDB a document DB?

CosmosDB is the new DocumentDB for NoSQL solution. The Azure Cosmos DB DocumentDB API or SQL (DocumentDB) API is now known as Azure Cosmos DB SQL API. You don't need to change anything to continue running your apps built with DocumentDB/DocumentDB API.

What port does CosmosDB use?

Service port ranges The port 10250 maps to a default Azure Cosmos DB for MongoDB instance without geo-replication. Whereas the ports 10255 and 10256 map to the instance that has geo-replication.


1 Answers

The answer here by oatsoda is correct but it will only work if you are within the same resource group as the Cosmos DB you are getting the connection string for. If you have the scenario where you Cosmos DB is in a different resource group to the resource you are generating an ARM template for the following snippet is what I have used to generate the connection string for an App Service and is working.

"Cosmos": {
   "value": "[listConnectionStrings(resourceId(parameters('cosmosResourceGroupName'),'Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDbName')), '2019-12-12').connectionStrings[0].connectionString]",
   "type": "Custom"
}
like image 140
Lee Avatar answered Oct 02 '22 15:10

Lee