# saif-resources / cosmosdb

Provisions a Cosmos DB NoSQL account with serverless billing, private endpoint, and RBAC for the service principal.

## Usage

```hcl
module "cosmosdb" {
  source  = "app.terraform.io/SAIFCorp/resources/saif//modules/cosmosdb"
  version = "~> 1.0.0"

  context  = module.environment.context
  identity = module.identity.identity

  resource_group_name     = module.resource_group.resource_group_name
  resource_group_location = module.resource_group.location

  containers = {
    conversations = {
      partition_key_path = "/id"
      default_ttl        = 2592000 # 30 days
    }
  }
}
```

## Outputs

| Name               | Description                                   |
| ------------------ | --------------------------------------------- |
| `account_endpoint` | Cosmos DB account endpoint                    |
| `account_id`       | Cosmos DB account resource ID                 |
| `database_name`    | Cosmos DB database name                       |
| `app_settings`     | Map of app settings for web app configuration |

<!-- BEGIN_TF_DOCS -->
## Providers

No providers.

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_containers"></a> [containers](#input\_containers) | Map of container definitions | <pre>map(object({<br/>    partition_key_path = string<br/>    unique_keys        = optional(list(list(string)), [])<br/>    default_ttl        = optional(number)<br/>  }))</pre> | n/a | yes |
| <a name="input_context"></a> [context](#input\_context) | Platform context from the environment module | `any` | n/a | yes |
| <a name="input_data_reader_identities"></a> [data\_reader\_identities](#input\_data\_reader\_identities) | Map of identities granted Cosmos DB Built-in Data Reader role. Each entry specifies either object\_id (direct) or group\_name (resolved by inner module). Ignored when context.is\_production is true; reader access is suppressed in production. | <pre>map(object({<br/>    object_id  = optional(string)<br/>    group_name = optional(string)<br/>  }))</pre> | `{}` | no |
| <a name="input_database_name"></a> [database\_name](#input\_database\_name) | The Cosmos DB database name (defaults to project\_id) | `string` | `""` | no |
| <a name="input_identity"></a> [identity](#input\_identity) | Identity bundle from the identity module | `any` | n/a | yes |
| <a name="input_is_serverless"></a> [is\_serverless](#input\_is\_serverless) | Whether to use serverless billing mode | `bool` | `true` | no |
| <a name="input_resource_group_location"></a> [resource\_group\_location](#input\_resource\_group\_location) | The Azure region for the Cosmos DB account | `string` | n/a | yes |
| <a name="input_resource_group_name"></a> [resource\_group\_name](#input\_resource\_group\_name) | The resource group for the Cosmos DB account | `string` | n/a | yes |

## Outputs

| Name | Description |
|------|-------------|
| <a name="output_account_endpoint"></a> [account\_endpoint](#output\_account\_endpoint) | The Cosmos DB account endpoint |
| <a name="output_account_id"></a> [account\_id](#output\_account\_id) | The Cosmos DB account resource ID |
| <a name="output_account_name"></a> [account\_name](#output\_account\_name) | The Cosmos DB account name |
| <a name="output_app_settings"></a> [app\_settings](#output\_app\_settings) | App settings map for web app configuration |
| <a name="output_database_name"></a> [database\_name](#output\_database\_name) | The Cosmos DB database name |

## Resources
    
<!-- END_TF_DOCS -->

---

[View source on GitHub](https://github.com/saif-corp/forge/blob/main/src/terraform/saif-resources/modules/cosmosdb/README.md)
