Can i use different modules to create cosmos db account and subsequent db in it

I am using below module structure to code a modular approach for creating a cosmos-db account and subsequent database and containers respectively.
Each module has its own, and file. I am not able to use the cosmos-db-account name into modules for database and containers as “name” is not exported by cosmos-db account(azurerm_cosmos_db) resource. Can anyone suggest any mechanism through which i can use same module structure to create the respective resource.
My code snippet around is below.

account module–>

resource “azurerm_cosmosdb_account” “cosmos_db” {

name = var.cosmos_acc_name

location = var.location


offer_type = "Standard"

kind= "GlobalDocumentDB"

tags = var.tags

consistency_policy {

consistency_level       = "Session"


geo_location {

location          = var.location

failover_priority = 0




output “cosmos_acc_name” {

value =



resource “azurerm_cosmosdb_sql_database” “sql_name” {

name = var.db_name

resource_group_name = var.resource_group_name

account_name = var.cosmos_acc_name


The above code in database–> is throwing errors

What is the error you are seeing? What does the code that is calling these modules look like?

I have attached both the modules and main configuration file. Below is the error i am receiving.accounts_main.txt (404 Bytes) accounts_output.txt (84 Bytes) accounts_variables.txt (531 Bytes) database_main.txt (171 Bytes) database_output.txt (175 Bytes) database_variables.txt (371 Bytes) main.txt (1.2 KB)

For the azurerm_cosmosdb_sql_database resource the required fields are name, resource_group_name and account_name. Your module is setting those to the variables db_name, resource_group_name and cosmos_acc_name respectively.

In the module’s you are then defining all three variables as optional (by giving them default values), with the defaults for both resource_group_name and cosmos_acc_name being “” (empty string). This isn’t recommended as the empty string isn’t a valid option for either value. Instead the default should be removed for both.

Looking at the in the root module you can see that only cosmos_acc_name is being passed into the database module. As a result the values for db_name and resource_group_name are set to their defaults (DeviceManagement and empty string).

As the empty string isn’t valid for resource_group_name you are getting the error you pasted.

It is important that defaults are only set when the variable should be optional and there is a sensible valid default available. A default for db_name seems reasonable, but neither resource_group_name or cosmos_acc_name have a value that could be used as a default, so as mentioned the default line should be removed from the module’s

If that is done you would then receive an error that there is a missing required variable for the database module. It would then prompt you to add that variable, with the value from the rg_name azurerm_resource_group resource.

Thank you very much. Passing the resource-group-name in the database module resolved the issue. Also got more clear around putting in the default values for the variables defined in each modules. Cheers :slightly_smiling_face: