
* fix concurrent error in cosmosdb example * change to random_string to reduce the collision rate * fix 101-cosmos-db-free-tier account name too long issue --------- Co-authored-by: zjhe <hezijie@microsoft.com>
109 lines
3.3 KiB
HCL
109 lines
3.3 KiB
HCL
data "azurerm_client_config" "current" {}
|
|
|
|
locals {
|
|
current_user_object_id = coalesce(var.msi_id, data.azurerm_client_config.current.object_id)
|
|
}
|
|
|
|
resource "azurerm_resource_group" "example" {
|
|
name = "${random_pet.prefix.id}-rg"
|
|
location = var.location
|
|
}
|
|
|
|
resource "random_string" "db_account_name" {
|
|
count = var.cosmosdb_account_name == null ? 1 : 0
|
|
|
|
length = 20
|
|
upper = false
|
|
special = false
|
|
numeric = false
|
|
}
|
|
|
|
locals {
|
|
cosmosdb_account_name = try(random_string.db_account_name[0].result, var.cosmosdb_account_name)
|
|
}
|
|
|
|
resource "azurerm_cosmosdb_account" "example" {
|
|
name = local.cosmosdb_account_name
|
|
location = var.cosmosdb_account_location
|
|
resource_group_name = azurerm_resource_group.example.name
|
|
offer_type = "Standard"
|
|
kind = "GlobalDocumentDB"
|
|
enable_automatic_failover = false
|
|
geo_location {
|
|
location = var.location
|
|
failover_priority = 0
|
|
}
|
|
|
|
consistency_policy {
|
|
consistency_level = "BoundedStaleness"
|
|
max_interval_in_seconds = 300
|
|
max_staleness_prefix = 100000
|
|
}
|
|
|
|
depends_on = [
|
|
azurerm_resource_group.example
|
|
]
|
|
}
|
|
|
|
resource "azurerm_cosmosdb_sql_database" "example" {
|
|
name = var.cosmosdb_sqldb_name
|
|
resource_group_name = azurerm_resource_group.example.name
|
|
account_name = azurerm_cosmosdb_account.example.name
|
|
throughput = var.throughput
|
|
}
|
|
|
|
resource "azurerm_cosmosdb_sql_container" "example" {
|
|
name = var.sql_container_name
|
|
resource_group_name = azurerm_resource_group.example.name
|
|
account_name = azurerm_cosmosdb_account.example.name
|
|
database_name = azurerm_cosmosdb_sql_database.example.name
|
|
partition_key_path = "/definition/id"
|
|
partition_key_version = 1
|
|
throughput = 400
|
|
|
|
indexing_policy {
|
|
indexing_mode = "consistent"
|
|
|
|
included_path {
|
|
path = "/*"
|
|
}
|
|
|
|
included_path {
|
|
path = "/included/?"
|
|
}
|
|
|
|
excluded_path {
|
|
path = "/excluded/?"
|
|
}
|
|
}
|
|
|
|
unique_key {
|
|
paths = ["/definition/idlong", "/definition/idshort"]
|
|
}
|
|
}
|
|
|
|
resource "azurerm_cosmosdb_sql_role_definition" "example" {
|
|
name = "examplesqlroledef"
|
|
resource_group_name = azurerm_resource_group.example.name
|
|
account_name = azurerm_cosmosdb_account.example.name
|
|
type = "CustomRole"
|
|
assignable_scopes = [
|
|
"/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.example.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.example.name}"
|
|
]
|
|
|
|
permissions {
|
|
data_actions = ["Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read"]
|
|
}
|
|
}
|
|
|
|
resource "azurerm_cosmosdb_sql_role_assignment" "example" {
|
|
resource_group_name = azurerm_resource_group.example.name
|
|
account_name = azurerm_cosmosdb_account.example.name
|
|
role_definition_id = azurerm_cosmosdb_sql_role_definition.example.id
|
|
principal_id = local.current_user_object_id
|
|
scope = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.example.name}/providers/Microsoft.DocumentDB/databaseAccounts/${azurerm_cosmosdb_account.example.name}"
|
|
}
|
|
|
|
resource "random_pet" "prefix" {
|
|
prefix = var.name_prefix
|
|
} |