Terraform with azure cosmosdb Mongodb example (2025)

murugan

Posted on

Terraform with azure cosmosdb Mongodb example (2) Terraform with azure cosmosdb Mongodb example (3) Terraform with azure cosmosdb Mongodb example (4) Terraform with azure cosmosdb Mongodb example (5) Terraform with azure cosmosdb Mongodb example (6)

#mongodb #cosmosdb #azure #terraform

Terraform with azure cosmosdb Mongodb example

Azure Cosmos DB is a globally distributed, multi-model database services that allows you to elastically scale in both throughput and storage. You can use document, key-value, columnar and graph databases in Azure Cosmos DB thanks to their multiple API offerings

Creating an Account

Before even creating our account, we’ll need to tell Terraform that we’re deploying our resources to Azure. We can do this by using the Azure Provider. This is used to configure infrastructure in Azure. We’ll also use this provider to tell Terraform which subscription we are using. For that, we’ll need to provide our Subscription Id.

We’ll stick the Subscription Id in a file called variables.tf like so and also add the other related resource name like below

variable "subscription_id" { default = "******-*****-*****" // Add your azure subcription_id here}variable "resource_group_name" { default = "multi-cloud-tooling"}variable "resource_group_location" { default = "centralindia"}variable "cosmos_db_account_name" { default = "cosmosmongodb"}variable "failover_location" { default = "westindia"}

Then create a file called main.tf and write the following code:

terraform { required_version = ">= 0.12.6" required_providers { azurerm = { version = "~> 2.53.0" } }}provider "azurerm" { features {} subscription_id = var.subscription_id skip_provider_registration = true}resource "azurerm_cosmosdb_account" "acc" { name = var.cosmos_db_account_name location = var.resource_group_location resource_group_name = var.resource_group_name offer_type = "Standard" kind = "MongoDB" enable_automatic_failover = true capabilities { name = "EnableMongo" } consistency_policy { consistency_level = "BoundedStaleness" max_interval_in_seconds = 400 max_staleness_prefix = 200000 } geo_location { location = var.failover_location failover_priority = 1 } geo_location { location = var.resource_group_location failover_priority = 0 }}resource "azurerm_cosmosdb_mongo_database" "mongodb" { name = "cosmosmongodb" resource_group_name = azurerm_cosmosdb_account.acc.resource_group_name account_name = azurerm_cosmosdb_account.acc.name throughput = 400}resource "azurerm_cosmosdb_mongo_collection" "coll" { name = "cosmosmongodbcollection" resource_group_name = azurerm_cosmosdb_account.acc.resource_group_name account_name = azurerm_cosmosdb_account.acc.name database_name = azurerm_cosmosdb_mongo_database.mongodb.name default_ttl_seconds = "777" shard_key = "uniqueKey" throughput = 400 lifecycle { ignore_changes = [index] } depends_on = [azurerm_cosmosdb_mongo_database.mongodb]}

Let’s go through this block by block.

First up, we are setting up the terraform version and provider information

In the second block we are setting up the subscription_id, features{} to tell Terraform which Azure subscription I want to deploy my cosmos DB resources.

Then i am creating the azurerm_cosmosdb_account block to set up our Cosmos DB account. I'm giving it a name, assigning it to my resource group, giving it a location, defining the offer type, the kind of Cosmos DB account to create, defining the Consistency level of my Cosmos DB account, enabling geo_location for geo-replication and failover location priorities

Creating Databases

Now that we have our account, I’m going to create a SQL API database within that account. Add the following resource definition to your main.tf file:

resource "azurerm_cosmosdb_mongo_database" "mongodb" { name = "cosmosmongodb" resource_group_name = azurerm_cosmosdb_account.acc.resource_group_name account_name = azurerm_cosmosdb_account.acc.name throughput = 400}

Here, I’m giving my database a name called “cosmosmongodb”. I’m then telling Terraform to deploy my database in the same resource group as my Cosmos DB account as well as assigning the database to my account name.

Creating Collections:

Let’s create a collection under our database. We can do this with the azurerm_cosmosdb_sql_container resource definition. Add the following Terraform code to your main.tf file:

resource "azurerm_cosmosdb_mongo_collection" "coll" { name = "cosmosmongodbcollection" resource_group_name = azurerm_cosmosdb_account.acc.resource_group_name account_name = azurerm_cosmosdb_account.acc.name database_name = azurerm_cosmosdb_mongo_database.mongodb.name default_ttl_seconds = "777" shard_key = "uniqueKey" throughput = 400 lifecycle { ignore_changes = [index] } depends_on = [azurerm_cosmosdb_mongo_database.mongodb]}

In this resource, I’ve given my container a name ('cosmosdbcollection'), assigned it to my resource group, account and database and then given my container a Partition Key of '/CollId'.

Everything has now been set up, so let’s deploy it to Azure!

Deploying to Azure

First, we’ll need to login to Azure via the command line.
If you’ve got it already, run the following command:

az login

When we build infrastructure in Terraform, we need to perform the following three steps:

  1. Terraform Init
  2. Terraform Plan
  3. Terraform Apply

Then create a file called Makefile and write the following code:

.PHONY: initinit: terraform init.PHONY: planplan: terraform plan.PHONY: applyapply: validate terraform apply --auto-approve.PHONY: formatformat: terraform fmt.PHONY: validatevalidate: terraform validate.PHONY: destroydestroy: terraform destroy --auto-approve.PHONY: refreshrefresh: terraform refresh

Run the following commands to create the azure infrastruture.

make init will create a new configuration for our Terraform environment.It will create a directory called .terraform and download any plugins needed for the configuration. It will also configure the back-end for the Terraform state. Each Terraform provider will have it’s own binaries that are separate from Terraform itself, so the init command will download and install these based on what provider we are using

make plan terraform plan also checks our syntax and attempts to connect to our Azure account to check if there are any differences between our Terraform code and our current state.

make apply This command is used to apply our changes. We should run this command in the same directory as the main.tf file.

It will create the resources in azure which we mentioned in the main.tf.

Once done those do the following step to check the created MongoDB working

1.Follow the below screenshot to open the MongoDB shell

Terraform with azure cosmosdb Mongodb example (7)

2.select the database using the below commands

use cosmosmongodb

3.List down the collections

show collections

4.Insert the data to the collections

db.mrfirstcosmosmongodbcollection.insert({"id":1,"uniqueKey":"1"})

5.Find all records

db.mrfirstcosmosmongodbcollection.find()

6.Find the single record

db.mrfirstcosmosmongodbcollection.findOne({"uniqueKey":"1"})

Terraform with azure cosmosdb Mongodb example (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Patricia Veum II

Last Updated:

Views: 6433

Rating: 4.3 / 5 (44 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Patricia Veum II

Birthday: 1994-12-16

Address: 2064 Little Summit, Goldieton, MS 97651-0862

Phone: +6873952696715

Job: Principal Officer

Hobby: Rafting, Cabaret, Candle making, Jigsaw puzzles, Inline skating, Magic, Graffiti

Introduction: My name is Patricia Veum II, I am a vast, combative, smiling, famous, inexpensive, zealous, sparkling person who loves writing and wants to share my knowledge and understanding with you.