Partilhar via


Microsoft.DocumentDB mongoClusters 2024-07-01

Definição de recursos do bíceps

O tipo de recurso mongoClusters pode ser implantado com operações que visam:

Para obter uma lista de propriedades alteradas em cada versão da API, consulte log de alterações.

Formato do recurso

Para criar um recurso Microsoft.DocumentDB/mongoClusters, adicione o seguinte Bicep ao seu modelo.

resource symbolicname 'Microsoft.DocumentDB/mongoClusters@2024-07-01' = {
  scope: resourceSymbolicName or scope
  location: 'string'
  name: 'string'
  properties: {
    administrator: {
      password: 'string'
      userName: 'string'
    }
    backup: {}
    compute: {
      tier: 'string'
    }
    createMode: 'string'
    highAvailability: {
      targetMode: 'string'
    }
    previewFeatures: [
      'string'
    ]
    publicNetworkAccess: 'string'
    replicaParameters: {
      sourceLocation: 'string'
      sourceResourceId: 'string'
    }
    restoreParameters: {
      pointInTimeUTC: 'string'
      sourceResourceId: 'string'
    }
    serverVersion: 'string'
    sharding: {
      shardCount: int
    }
    storage: {
      sizeGb: int
    }
  }
  tags: {
    {customized property}: 'string'
  }
}

Valores de propriedade

Microsoft.DocumentDB/mongoClusters

Designação Descrição Valor
localização A geolocalização onde o recurso vive string (obrigatório)
Designação O nome do recurso cadeia de caracteres

Restrições:
Comprimento mínimo = 3
Comprimento máximo = 40
Padrão = ^[a-z0-9]+(-[a-z0-9]+)* (obrigatório)
propriedades As propriedades específicas do recurso para este recurso. MongoClusterProperties
âmbito Use ao criar um recurso em um escopo diferente do escopo de implantação. Defina essa propriedade como o nome simbólico de um recurso para aplicar o recurso de extensão .
Etiquetas Tags de recursos Dicionário de nomes e valores de tags. Consulte Tags em modelos

AdministradorPropriedades

Designação Descrição Valor
palavra-passe A senha de administrador. cadeia de caracteres

Restrições:
Valor sensível. Passe como um parâmetro seguro.
nome de utilizador O nome de usuário do administrador. cadeia (de caracteres)

BackupPropriedades

Designação Descrição Valor

ComputeProperties

Designação Descrição Valor
escalão A camada de computação a ser atribuída ao cluster, onde cada camada é mapeada para um núcleo virtual e tamanho de memória. Valores de exemplo: 'M30', 'M40'. cadeia (de caracteres)

HighAvailabilityProperties

Designação Descrição Valor
targetMode O modo de alta disponibilidade de destino solicitado para o cluster. 'Desativado'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Designação Descrição Valor
administrador As propriedades do administrador local para o cluster mongo. AdministradorPropriedades
cópia de segurança As propriedades de backup do cluster mongo. BackupPropriedades
Calcular As propriedades de computação do cluster mongo. ComputeProperties
createMode O modo para criar um cluster mongo. 'Inadimplência'
'GeoRéplica'
'PointInTimeRestore'
'Réplica'
alta disponibilidade As propriedades de alta disponibilidade do cluster mongo. HighAvailabilityProperties
pré-visualizaçãoFuncionalidades Lista de conexões de ponto de extremidade privadas. Matriz de cadeia de caracteres contendo qualquer uma das:
'GeoRéplicas'
acesso à rede pública Se o acesso público ao endpoint é permitido ou não para este cluster mongo. 'Desativado'
'Habilitado'
replicaParameters Os parâmetros para criar uma réplica mongo cluster. MongoClusterReplicaParameters
restoreParameters Os parâmetros para criar um cluster mongo de restauração point-in-time. MongoClusterRestoreParameters
versão do servidor A versão do servidor Mongo DB. O padrão é a versão mais recente disponível, se não for especificado. cadeia (de caracteres)
fragmentação As propriedades de fragmentação do aglomerado mongo. ShardingProperties
armazenamento As propriedades de armazenamento do cluster mongo. Propriedades de armazenamento

MongoClusterReplicaParameters

Designação Descrição Valor
fonteLocalização O local do cluster de origem string (obrigatório)
sourceResourceId A id do cluster de origem de replicação. string (obrigatório)

MongoClusterRestoreParameters

Designação Descrição Valor
pointInTimeUTC UTC ponto no tempo para restaurar um cluster mongo cadeia (de caracteres)
sourceResourceId ID do recurso para localizar o cluster de origem a ser restaurado cadeia (de caracteres)

ShardingProperties

Designação Descrição Valor
Contagem de fragmentos Número de fragmentos a serem provisionados no cluster. Int

Propriedades de armazenamento

Designação Descrição Valor
tamanhoGb O tamanho do disco de dados atribuído a cada servidor. Int

TrackedResourceTags

Designação Descrição Valor

Exemplos de uso

Módulos verificados do Azure

Os seguintes de Módulos Verificados do Azure podem ser usados para implantar esse tipo de recurso.

Módulo Descrição
Cosmos DB para MongoDB (vCore) Módulo de recursos AVM para Cosmos DB para MongoDB (vCore)

Definição de recurso de modelo ARM

O tipo de recurso mongoClusters pode ser implantado com operações que visam:

Para obter uma lista de propriedades alteradas em cada versão da API, consulte log de alterações.

Formato do recurso

Para criar um recurso Microsoft.DocumentDB/mongoClusters, adicione o seguinte JSON ao seu modelo.

{
  "type": "Microsoft.DocumentDB/mongoClusters",
  "apiVersion": "2024-07-01",
  "name": "string",
  "location": "string",
  "properties": {
    "administrator": {
      "password": "string",
      "userName": "string"
    },
    "backup": {
    },
    "compute": {
      "tier": "string"
    },
    "createMode": "string",
    "highAvailability": {
      "targetMode": "string"
    },
    "previewFeatures": [ "string" ],
    "publicNetworkAccess": "string",
    "replicaParameters": {
      "sourceLocation": "string",
      "sourceResourceId": "string"
    },
    "restoreParameters": {
      "pointInTimeUTC": "string",
      "sourceResourceId": "string"
    },
    "serverVersion": "string",
    "sharding": {
      "shardCount": "int"
    },
    "storage": {
      "sizeGb": "int"
    }
  },
  "tags": {
    "{customized property}": "string"
  }
}

Valores de propriedade

Microsoft.DocumentDB/mongoClusters

Designação Descrição Valor
Versão da API A versão api '2024-07-01'
localização A geolocalização onde o recurso vive string (obrigatório)
Designação O nome do recurso cadeia de caracteres

Restrições:
Comprimento mínimo = 3
Comprimento máximo = 40
Padrão = ^[a-z0-9]+(-[a-z0-9]+)* (obrigatório)
propriedades As propriedades específicas do recurso para este recurso. MongoClusterProperties
Etiquetas Tags de recursos Dicionário de nomes e valores de tags. Consulte Tags em modelos
tipo O tipo de recurso 'Microsoft.DocumentDB/mongoClusters'

AdministradorPropriedades

Designação Descrição Valor
palavra-passe A senha de administrador. cadeia de caracteres

Restrições:
Valor sensível. Passe como um parâmetro seguro.
nome de utilizador O nome de usuário do administrador. cadeia (de caracteres)

BackupPropriedades

Designação Descrição Valor

ComputeProperties

Designação Descrição Valor
escalão A camada de computação a ser atribuída ao cluster, onde cada camada é mapeada para um núcleo virtual e tamanho de memória. Valores de exemplo: 'M30', 'M40'. cadeia (de caracteres)

HighAvailabilityProperties

Designação Descrição Valor
targetMode O modo de alta disponibilidade de destino solicitado para o cluster. 'Desativado'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Designação Descrição Valor
administrador As propriedades do administrador local para o cluster mongo. AdministradorPropriedades
cópia de segurança As propriedades de backup do cluster mongo. BackupPropriedades
Calcular As propriedades de computação do cluster mongo. ComputeProperties
createMode O modo para criar um cluster mongo. 'Inadimplência'
'GeoRéplica'
'PointInTimeRestore'
'Réplica'
alta disponibilidade As propriedades de alta disponibilidade do cluster mongo. HighAvailabilityProperties
pré-visualizaçãoFuncionalidades Lista de conexões de ponto de extremidade privadas. Matriz de cadeia de caracteres contendo qualquer uma das:
'GeoRéplicas'
acesso à rede pública Se o acesso público ao endpoint é permitido ou não para este cluster mongo. 'Desativado'
'Habilitado'
replicaParameters Os parâmetros para criar uma réplica mongo cluster. MongoClusterReplicaParameters
restoreParameters Os parâmetros para criar um cluster mongo de restauração point-in-time. MongoClusterRestoreParameters
versão do servidor A versão do servidor Mongo DB. O padrão é a versão mais recente disponível, se não for especificado. cadeia (de caracteres)
fragmentação As propriedades de fragmentação do aglomerado mongo. ShardingProperties
armazenamento As propriedades de armazenamento do cluster mongo. Propriedades de armazenamento

MongoClusterReplicaParameters

Designação Descrição Valor
fonteLocalização O local do cluster de origem string (obrigatório)
sourceResourceId A id do cluster de origem de replicação. string (obrigatório)

MongoClusterRestoreParameters

Designação Descrição Valor
pointInTimeUTC UTC ponto no tempo para restaurar um cluster mongo cadeia (de caracteres)
sourceResourceId ID do recurso para localizar o cluster de origem a ser restaurado cadeia (de caracteres)

ShardingProperties

Designação Descrição Valor
Contagem de fragmentos Número de fragmentos a serem provisionados no cluster. Int

Propriedades de armazenamento

Designação Descrição Valor
tamanhoGb O tamanho do disco de dados atribuído a cada servidor. Int

TrackedResourceTags

Designação Descrição Valor

Exemplos de uso

Definição de recursos Terraform (provedor AzAPI)

O tipo de recurso mongoClusters pode ser implantado com operações que visam:

Para obter uma lista de propriedades alteradas em cada versão da API, consulte log de alterações.

Formato do recurso

Para criar um recurso Microsoft.DocumentDB/mongoClusters, adicione o seguinte Terraform ao seu modelo.

resource "azapi_resource" "symbolicname" {
  type = "Microsoft.DocumentDB/mongoClusters@2024-07-01"
  name = "string"
  parent_id = "string"
  location = "string"
  tags = {
    {customized property} = "string"
  }
  body = {
    properties = {
      administrator = {
        password = "string"
        userName = "string"
      }
      backup = {
      }
      compute = {
        tier = "string"
      }
      createMode = "string"
      highAvailability = {
        targetMode = "string"
      }
      previewFeatures = [
        "string"
      ]
      publicNetworkAccess = "string"
      replicaParameters = {
        sourceLocation = "string"
        sourceResourceId = "string"
      }
      restoreParameters = {
        pointInTimeUTC = "string"
        sourceResourceId = "string"
      }
      serverVersion = "string"
      sharding = {
        shardCount = int
      }
      storage = {
        sizeGb = int
      }
    }
  }
}

Valores de propriedade

Microsoft.DocumentDB/mongoClusters

Designação Descrição Valor
localização A geolocalização onde o recurso vive string (obrigatório)
Designação O nome do recurso cadeia de caracteres

Restrições:
Comprimento mínimo = 3
Comprimento máximo = 40
Padrão = ^[a-z0-9]+(-[a-z0-9]+)* (obrigatório)
parent_id A ID do recurso ao qual aplicar esse recurso de extensão. string (obrigatório)
propriedades As propriedades específicas do recurso para este recurso. MongoClusterProperties
Etiquetas Tags de recursos Dicionário de nomes e valores de tags.
tipo O tipo de recurso "Microsoft.DocumentDB/mongoClusters@2024-07-01"

AdministradorPropriedades

Designação Descrição Valor
palavra-passe A senha de administrador. cadeia de caracteres

Restrições:
Valor sensível. Passe como um parâmetro seguro.
nome de utilizador O nome de usuário do administrador. cadeia (de caracteres)

BackupPropriedades

Designação Descrição Valor

ComputeProperties

Designação Descrição Valor
escalão A camada de computação a ser atribuída ao cluster, onde cada camada é mapeada para um núcleo virtual e tamanho de memória. Valores de exemplo: 'M30', 'M40'. cadeia (de caracteres)

HighAvailabilityProperties

Designação Descrição Valor
targetMode O modo de alta disponibilidade de destino solicitado para o cluster. 'Desativado'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Designação Descrição Valor
administrador As propriedades do administrador local para o cluster mongo. AdministradorPropriedades
cópia de segurança As propriedades de backup do cluster mongo. BackupPropriedades
Calcular As propriedades de computação do cluster mongo. ComputeProperties
createMode O modo para criar um cluster mongo. 'Inadimplência'
'GeoRéplica'
'PointInTimeRestore'
'Réplica'
alta disponibilidade As propriedades de alta disponibilidade do cluster mongo. HighAvailabilityProperties
pré-visualizaçãoFuncionalidades Lista de conexões de ponto de extremidade privadas. Matriz de cadeia de caracteres contendo qualquer uma das:
'GeoRéplicas'
acesso à rede pública Se o acesso público ao endpoint é permitido ou não para este cluster mongo. 'Desativado'
'Habilitado'
replicaParameters Os parâmetros para criar uma réplica mongo cluster. MongoClusterReplicaParameters
restoreParameters Os parâmetros para criar um cluster mongo de restauração point-in-time. MongoClusterRestoreParameters
versão do servidor A versão do servidor Mongo DB. O padrão é a versão mais recente disponível, se não for especificado. cadeia (de caracteres)
fragmentação As propriedades de fragmentação do aglomerado mongo. ShardingProperties
armazenamento As propriedades de armazenamento do cluster mongo. Propriedades de armazenamento

MongoClusterReplicaParameters

Designação Descrição Valor
fonteLocalização O local do cluster de origem string (obrigatório)
sourceResourceId A id do cluster de origem de replicação. string (obrigatório)

MongoClusterRestoreParameters

Designação Descrição Valor
pointInTimeUTC UTC ponto no tempo para restaurar um cluster mongo cadeia (de caracteres)
sourceResourceId ID do recurso para localizar o cluster de origem a ser restaurado cadeia (de caracteres)

ShardingProperties

Designação Descrição Valor
Contagem de fragmentos Número de fragmentos a serem provisionados no cluster. Int

Propriedades de armazenamento

Designação Descrição Valor
tamanhoGb O tamanho do disco de dados atribuído a cada servidor. Int

TrackedResourceTags

Designação Descrição Valor

Exemplos de uso

Amostras Terraform

Um exemplo básico de implementação do Azure Cosmos DB para MongoDB (vCore).

terraform {
  required_providers {
    azapi = {
      source = "Azure/azapi"
    }
    time = {
      source = "hashicorp/time"
    }
  }
}

provider "azapi" {
  skip_provider_registration = false
}

variable "resource_name" {
  type    = string
  default = "acctest0001"
}

variable "location" {
  type    = string
  default = "westus3"
}

variable "replica_location" {
  type    = string
  default = "centralus"
}

variable "mongo_admin_username" {
  type    = string
  default = "mongoAdmin"
}

variable "mongo_admin_password" {
  type        = string
  description = "The administrator password for the MongoDB cluster"
  sensitive   = true
}

variable "mongo_restore_admin_password" {
  type        = string
  description = "The administrator password for the restored MongoDB cluster"
  sensitive   = true
}

resource "azapi_resource" "resourceGroup" {
  type     = "Microsoft.Resources/resourceGroups@2020-06-01"
  name     = var.resource_name
  location = var.location
}

resource "azapi_resource" "userAssignedIdentity" {
  type                      = "Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31"
  parent_id                 = azapi_resource.resourceGroup.id
  name                      = var.resource_name
  location                  = var.location
  schema_validation_enabled = false
  response_export_values    = ["*"]
}

data "azapi_client_config" "current" {}

resource "azapi_resource" "vault" {
  type      = "Microsoft.KeyVault/vaults@2023-02-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-kv"
  location  = var.location
  body = {
    properties = {
      createMode                   = "default"
      enablePurgeProtection        = true
      enableSoftDelete             = true
      enableRbacAuthorization      = true
      enabledForDeployment         = true
      enabledForDiskEncryption     = true
      enabledForTemplateDeployment = true
      publicNetworkAccess          = "Enabled"
      accessPolicies               = []
      sku = {
        family = "A"
        name   = "standard"
      }
      tenantId = data.azapi_client_config.current.tenant_id
    }
  }
}

data "azapi_resource_list" "kvCertificatesOfficerRoleDefinition" {
  type      = "Microsoft.Authorization/roleDefinitions@2022-04-01"
  parent_id = azapi_resource.vault.id
  response_export_values = {
    definition_id = "value[?properties.roleName == 'Key Vault Crypto Officer'].id | [0]"
  }
}

resource "azapi_resource" "kvRoleAssignmentTf" {
  type      = "Microsoft.Authorization/roleAssignments@2022-04-01"
  parent_id = azapi_resource.vault.id
  name      = uuid()
  body = {
    properties = {
      principalId      = data.azapi_client_config.current.object_id
      roleDefinitionId = data.azapi_resource_list.kvCertificatesOfficerRoleDefinition.output.definition_id
    }
  }
  lifecycle {
    ignore_changes = [name]
  }
}

data "azapi_resource_list" "kvCertificatesUserRoleDefinition" {
  type      = "Microsoft.Authorization/roleDefinitions@2022-04-01"
  parent_id = azapi_resource.vault.id
  response_export_values = {
    definition_id = "value[?properties.roleName == 'Key Vault Crypto Service Encryption User'].id | [0]"
  }
}

resource "azapi_resource" "kvRoleAssignmentIdentity" {
  type      = "Microsoft.Authorization/roleAssignments@2022-04-01"
  parent_id = azapi_resource.vault.id
  name      = uuid()
  body = {
    properties = {
      principalId      = azapi_resource.userAssignedIdentity.output.properties.principalId
      roleDefinitionId = data.azapi_resource_list.kvCertificatesUserRoleDefinition.output.definition_id
    }
  }
  lifecycle {
    ignore_changes = [name]
  }
}

data "azapi_resource_id" "key" {
  type      = "Microsoft.KeyVault/vaults/keys@2023-02-01"
  parent_id = azapi_resource.vault.id
  name      = var.resource_name
}

resource "azapi_resource_action" "key" {
  type        = "Microsoft.KeyVault/vaults/keys@2023-02-01"
  resource_id = data.azapi_resource_id.key.id
  method      = "PUT"
  body = {
    properties = {
      keySize = 2048
      kty     = "RSA"
      keyOps  = ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"]
    }
  }
  response_export_values = ["*"]
  depends_on = [
    azapi_resource.kvRoleAssignmentTf,
    azapi_resource.kvRoleAssignmentIdentity,
  ]
}

# replica key vault

resource "azapi_resource" "vault_replica" {
  type      = "Microsoft.KeyVault/vaults@2023-02-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-kv-replica"
  location  = var.replica_location
  body = {
    properties = {
      createMode                   = "default"
      enablePurgeProtection        = true
      enableSoftDelete             = true
      enableRbacAuthorization      = true
      enabledForDeployment         = true
      enabledForDiskEncryption     = true
      enabledForTemplateDeployment = true
      publicNetworkAccess          = "Enabled"
      accessPolicies               = []
      sku = {
        family = "A"
        name   = "standard"
      }
      tenantId = data.azapi_client_config.current.tenant_id
    }
  }
}

data "azapi_resource_list" "kvCertificatesOfficerRoleDefinition_replica" {
  type      = "Microsoft.Authorization/roleDefinitions@2022-04-01"
  parent_id = azapi_resource.vault_replica.id
  response_export_values = {
    definition_id = "value[?properties.roleName == 'Key Vault Crypto Officer'].id | [0]"
  }
}

resource "azapi_resource" "kvRoleAssignmentTf_replica" {
  type      = "Microsoft.Authorization/roleAssignments@2022-04-01"
  parent_id = azapi_resource.vault_replica.id
  name      = uuid()
  body = {
    properties = {
      principalId      = data.azapi_client_config.current.object_id
      roleDefinitionId = data.azapi_resource_list.kvCertificatesOfficerRoleDefinition.output.definition_id
    }
  }
  lifecycle {
    ignore_changes = [name]
  }
}

data "azapi_resource_list" "kvCertificatesUserRoleDefinition_replica" {
  type      = "Microsoft.Authorization/roleDefinitions@2022-04-01"
  parent_id = azapi_resource.vault_replica.id
  response_export_values = {
    definition_id = "value[?properties.roleName == 'Key Vault Crypto Service Encryption User'].id | [0]"
  }
}

resource "azapi_resource" "kvRoleAssignmentIdentity_replica" {
  type      = "Microsoft.Authorization/roleAssignments@2022-04-01"
  parent_id = azapi_resource.vault_replica.id
  name      = uuid()
  body = {
    properties = {
      principalId      = azapi_resource.userAssignedIdentity.output.properties.principalId
      roleDefinitionId = data.azapi_resource_list.kvCertificatesUserRoleDefinition.output.definition_id
    }
  }
  lifecycle {
    ignore_changes = [name]
  }
}

data "azapi_resource_id" "key_replica" {
  type      = "Microsoft.KeyVault/vaults/keys@2023-02-01"
  parent_id = azapi_resource.vault_replica.id
  name      = var.resource_name
}

resource "azapi_resource_action" "key_replica" {
  type        = "Microsoft.KeyVault/vaults/keys@2023-02-01"
  resource_id = data.azapi_resource_id.key_replica.id
  method      = "PUT"
  body = {
    properties = {
      keySize = 2048
      kty     = "RSA"
      keyOps  = ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"]
    }
  }
  response_export_values = ["*"]
  depends_on = [
    azapi_resource.kvRoleAssignmentTf_replica,
    azapi_resource.kvRoleAssignmentIdentity_replica,
  ]
}

resource "azapi_resource" "mongoCluster" {
  type      = "Microsoft.DocumentDB/mongoClusters@2025-09-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = var.resource_name
  location  = var.location
  identity {
    type         = "UserAssigned"
    identity_ids = [azapi_resource.userAssignedIdentity.id]
  }
  body = {
    properties = {
      administrator = {
        userName = var.mongo_admin_username
      }
      authConfig = {
        allowedModes = ["MicrosoftEntraID", "NativeAuth"]
      }
      compute = {
        tier = "M30"
      }
      encryption = {
        customerManagedKeyEncryption = {
          keyEncryptionKeyIdentity = {
            identityType                   = "UserAssignedIdentity"
            userAssignedIdentityResourceId = azapi_resource.userAssignedIdentity.id
          }
          keyEncryptionKeyUrl = azapi_resource_action.key.output.properties.keyUri
        }
      }
      highAvailability = {
        targetMode = "Disabled"
      }
      previewFeatures = [
        "ShardRebalancer"
      ]
      publicNetworkAccess = "Enabled"
      serverVersion       = "5.0"
      sharding = {
        shardCount = 1
      }
      storage = {
        sizeGb = 32
      }
    }
  }
  sensitive_body = {
    properties = {
      administrator = {
        password = var.mongo_admin_password
      }
    }
  }
  tags = {
    Environment = "Test"
  }
  schema_validation_enabled = false
  response_export_values    = ["*"]
}

# Wait for the MongoDB cluster to have backup capability available
resource "time_sleep" "wait_for_backup_ready" {
  depends_on = [azapi_resource.mongoCluster]

  # Wait 5 minutes for backup to be available - MongoDB clusters typically need time to enable backup
  create_duration = "300s"
}

# Data source to get the updated cluster info with backup details
data "azapi_resource" "mongoCluster_backup_check" {
  type        = "Microsoft.DocumentDB/mongoClusters@2025-09-01"
  resource_id = azapi_resource.mongoCluster.id

  response_export_values = ["properties.backup.earliestRestoreTime"]
  depends_on             = [time_sleep.wait_for_backup_ready]
}

resource "azapi_resource" "mongoCluster_PointInTimeRestore" {
  type      = "Microsoft.DocumentDB/mongoClusters@2025-09-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-restore"
  location  = var.location
  identity {
    type         = "UserAssigned"
    identity_ids = [azapi_resource.userAssignedIdentity.id]
  }
  body = {
    properties = {
      createMode = "PointInTimeRestore"
      administrator = {
        userName = var.mongo_admin_username
      }
      encryption = {
        customerManagedKeyEncryption = {
          keyEncryptionKeyIdentity = {
            identityType                   = "UserAssignedIdentity"
            userAssignedIdentityResourceId = azapi_resource.userAssignedIdentity.id
          }
          keyEncryptionKeyUrl = azapi_resource_action.key.output.properties.keyUri
        }
      }
      restoreParameters = {
        pointInTimeUTC   = data.azapi_resource.mongoCluster_backup_check.output.properties.backup.earliestRestoreTime
        sourceResourceId = azapi_resource.mongoCluster.id
      }
    }
  }
  sensitive_body = {
    properties = {
      administrator = {
        password = var.mongo_restore_admin_password
      }
    }
  }
  schema_validation_enabled = false
  ignore_casing             = false
  ignore_missing_property   = false

  depends_on = [
    data.azapi_resource.mongoCluster_backup_check
  ]
}

resource "azapi_resource" "mongoCluster_GeoReplica" {
  type      = "Microsoft.DocumentDB/mongoClusters@2025-09-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-repl"
  location  = var.replica_location
  identity {
    type         = "UserAssigned"
    identity_ids = [azapi_resource.userAssignedIdentity.id]
  }
  body = {
    properties = {
      createMode = "GeoReplica"
      encryption = {
        customerManagedKeyEncryption = {
          keyEncryptionKeyIdentity = {
            identityType                   = "UserAssignedIdentity"
            userAssignedIdentityResourceId = azapi_resource.userAssignedIdentity.id
          }
          keyEncryptionKeyUrl = azapi_resource_action.key_replica.output.properties.keyUri
        }
      }
      replicaParameters = {
        sourceLocation   = var.location # Source location matches the primary cluster
        sourceResourceId = azapi_resource.mongoCluster.id
      }
    }
  }
  schema_validation_enabled = false
  response_export_values    = ["*"]
}