Compartir a través de


Microsoft.DocumentDB mongoClusters 01/07/2024

Definición de recursos de Bicep

El tipo de recurso mongoClusters se puede implementar con operaciones destinadas a:

Para obtener una lista de las propiedades modificadas en cada versión de API, consulte registro de cambios.

Formato de recurso

Para crear un recurso Microsoft.DocumentDB/mongoClusters, agregue el siguiente bicep a la plantilla.

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 propiedad

Microsoft.DocumentDB/mongoClusters

Nombre Descripción Valor
ubicación Ubicación geográfica donde reside el recurso string (obligatorio)
nombre El nombre del recurso cuerda

Restricciones:
Longitud mínima = 3
Longitud máxima = 40
Patrón = ^[a-z0-9]+(-[a-z0-9]+)* (obligatorio)
Propiedades Propiedades específicas del recurso para este recurso. MongoClusterProperties
scope Use al crear un recurso en un ámbito diferente del ámbito de implementación. Establezca esta propiedad en el nombre simbólico de un recurso para aplicar el recurso de extensión .
Etiquetas Etiquetas de recursos Diccionario de nombres y valores de etiqueta. Consulte etiquetas de en plantillas

AdministratorProperties (Propiedades del administrador)

Nombre Descripción Valor
contraseña Contraseña de administrador. cuerda

Restricciones:
Valor confidencial. Pase como parámetro seguro.
nombre de usuario Nombre de usuario del administrador. cuerda

BackupProperties (Propiedades de respaldo)

Nombre Descripción Valor

ComputeProperties

Nombre Descripción Valor
nivel Nivel de proceso que se va a asignar al clúster, donde cada nivel se asigna a un tamaño de núcleo virtual y memoria. Valores de ejemplo: "M30", "M40". cuerda

HighAvailabilityProperties

Nombre Descripción Valor
targetMode Modo de alta disponibilidad de destino solicitado para el clúster. 'Deshabilitado'
'Misma zona'
'ZoneRedundantPreferred'

MongoClusterProperties

Nombre Descripción Valor
administrador Propiedades de administrador local para el clúster de mongo. AdministratorProperties
copia de seguridad Propiedades de copia de seguridad del clúster de mongo. BackupProperties (Propiedades de respaldo)
calcular Propiedades de proceso del clúster de mongo. ComputeProperties de
createMode Modo para crear un clúster de Mongo. 'Valor predeterminado'
'Réplica geográfica'
'PointInTimeRestore'
'Réplica'
alta disponibilidad Propiedades de alta disponibilidad del clúster de mongo. HighAvailabilityProperties
previewFeatures Lista de conexiones de punto de conexión privado. Matriz de cadenas que contiene cualquiera de:
'Réplicas geográficas'
publicNetworkAccess Indica si se permite o no el acceso al punto de conexión público para este clúster de Mongo. 'Deshabilitado'
'Habilitado'
replicaParameters Parámetros para crear un clúster de mongo de réplica. MongoClusterReplicaParameters
restoreParameters Los parámetros para crear un clúster de mongo de restauración a un momento dado. MongoClusterRestoreParameters
Versión del servidor Versión del servidor de Mongo DB. El valor predeterminado es la versión más reciente disponible si no se especifica. cuerda
particionamiento Propiedades de particionamiento del clúster de mongo. ShardingProperties
almacenamiento Propiedades de almacenamiento del clúster de mongo. StorageProperties (Propiedades de almacenamiento)

MongoClusterReplicaParameters

Nombre Descripción Valor
ubicaciónFuente Ubicación del clúster de origen string (obligatorio)
sourceResourceId Identificador del clúster de origen de replicación. string (obligatorio)

MongoClusterRestoreParameters

Nombre Descripción Valor
pointInTimeUTC Hora UTC a la que se va a restaurar un clúster de Mongo cuerda
sourceResourceId Identificador de recurso para buscar el clúster de origen que se va a restaurar cuerda

ShardingProperties

Nombre Descripción Valor
shardCount Número de particiones que se van a aprovisionar en el clúster. Int

StorageProperties (Propiedades de almacenamiento)

Nombre Descripción Valor
tamañoGb Tamaño del disco de datos asignado a cada servidor. Int

TrackedResourceTags

Nombre Descripción Valor

Ejemplos de uso

Módulos comprobados de Azure

Los siguientes módulos comprobados de Azure se pueden usar para implementar este tipo de recurso.

Módulo Descripción
cosmos DB para MongoDB (núcleo virtual) Módulo de recursos de AVM para Cosmos DB para MongoDB (núcleo virtual)

Definición de recursos de plantilla de ARM

El tipo de recurso mongoClusters se puede implementar con operaciones destinadas a:

Para obtener una lista de las propiedades modificadas en cada versión de API, consulte registro de cambios.

Formato de recurso

Para crear un recurso Microsoft.DocumentDB/mongoClusters, agregue el siguiente JSON a la plantilla.

{
  "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 propiedad

Microsoft.DocumentDB/mongoClusters

Nombre Descripción Valor
apiVersion La versión de api '2024-07-01'
ubicación Ubicación geográfica donde reside el recurso string (obligatorio)
nombre El nombre del recurso cuerda

Restricciones:
Longitud mínima = 3
Longitud máxima = 40
Patrón = ^[a-z0-9]+(-[a-z0-9]+)* (obligatorio)
Propiedades Propiedades específicas del recurso para este recurso. MongoClusterProperties
Etiquetas Etiquetas de recursos Diccionario de nombres y valores de etiqueta. Consulte etiquetas de en plantillas
tipo El tipo de recurso 'Microsoft.DocumentDB/mongoClusters'

AdministratorProperties (Propiedades del administrador)

Nombre Descripción Valor
contraseña Contraseña de administrador. cuerda

Restricciones:
Valor confidencial. Pase como parámetro seguro.
nombre de usuario Nombre de usuario del administrador. cuerda

BackupProperties (Propiedades de respaldo)

Nombre Descripción Valor

ComputeProperties

Nombre Descripción Valor
nivel Nivel de proceso que se va a asignar al clúster, donde cada nivel se asigna a un tamaño de núcleo virtual y memoria. Valores de ejemplo: "M30", "M40". cuerda

HighAvailabilityProperties

Nombre Descripción Valor
targetMode Modo de alta disponibilidad de destino solicitado para el clúster. 'Deshabilitado'
'Misma zona'
'ZoneRedundantPreferred'

MongoClusterProperties

Nombre Descripción Valor
administrador Propiedades de administrador local para el clúster de mongo. AdministratorProperties
copia de seguridad Propiedades de copia de seguridad del clúster de mongo. BackupProperties (Propiedades de respaldo)
calcular Propiedades de proceso del clúster de mongo. ComputeProperties de
createMode Modo para crear un clúster de Mongo. 'Valor predeterminado'
'Réplica geográfica'
'PointInTimeRestore'
'Réplica'
alta disponibilidad Propiedades de alta disponibilidad del clúster de mongo. HighAvailabilityProperties
previewFeatures Lista de conexiones de punto de conexión privado. Matriz de cadenas que contiene cualquiera de:
'Réplicas geográficas'
publicNetworkAccess Indica si se permite o no el acceso al punto de conexión público para este clúster de Mongo. 'Deshabilitado'
'Habilitado'
replicaParameters Parámetros para crear un clúster de mongo de réplica. MongoClusterReplicaParameters
restoreParameters Los parámetros para crear un clúster de mongo de restauración a un momento dado. MongoClusterRestoreParameters
Versión del servidor Versión del servidor de Mongo DB. El valor predeterminado es la versión más reciente disponible si no se especifica. cuerda
particionamiento Propiedades de particionamiento del clúster de mongo. ShardingProperties
almacenamiento Propiedades de almacenamiento del clúster de mongo. StorageProperties (Propiedades de almacenamiento)

MongoClusterReplicaParameters

Nombre Descripción Valor
ubicaciónFuente Ubicación del clúster de origen string (obligatorio)
sourceResourceId Identificador del clúster de origen de replicación. string (obligatorio)

MongoClusterRestoreParameters

Nombre Descripción Valor
pointInTimeUTC Hora UTC a la que se va a restaurar un clúster de Mongo cuerda
sourceResourceId Identificador de recurso para buscar el clúster de origen que se va a restaurar cuerda

ShardingProperties

Nombre Descripción Valor
shardCount Número de particiones que se van a aprovisionar en el clúster. Int

StorageProperties (Propiedades de almacenamiento)

Nombre Descripción Valor
tamañoGb Tamaño del disco de datos asignado a cada servidor. Int

TrackedResourceTags

Nombre Descripción Valor

Ejemplos de uso

Definición de recursos de Terraform (proveedor AzAPI)

El tipo de recurso mongoClusters se puede implementar con operaciones destinadas a:

Para obtener una lista de las propiedades modificadas en cada versión de API, consulte registro de cambios.

Formato de recurso

Para crear un recurso Microsoft.DocumentDB/mongoClusters, agregue el siguiente Terraform a la plantilla.

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 propiedad

Microsoft.DocumentDB/mongoClusters

Nombre Descripción Valor
ubicación Ubicación geográfica donde reside el recurso string (obligatorio)
nombre El nombre del recurso cuerda

Restricciones:
Longitud mínima = 3
Longitud máxima = 40
Patrón = ^[a-z0-9]+(-[a-z0-9]+)* (obligatorio)
parent_id Identificador del recurso al que se va a aplicar este recurso de extensión. string (obligatorio)
Propiedades Propiedades específicas del recurso para este recurso. MongoClusterProperties
Etiquetas Etiquetas de recursos Diccionario de nombres y valores de etiqueta.
tipo El tipo de recurso "Microsoft.DocumentDB/mongoClusters@2024-07-01"

AdministratorProperties (Propiedades del administrador)

Nombre Descripción Valor
contraseña Contraseña de administrador. cuerda

Restricciones:
Valor confidencial. Pase como parámetro seguro.
nombre de usuario Nombre de usuario del administrador. cuerda

BackupProperties (Propiedades de respaldo)

Nombre Descripción Valor

ComputeProperties

Nombre Descripción Valor
nivel Nivel de proceso que se va a asignar al clúster, donde cada nivel se asigna a un tamaño de núcleo virtual y memoria. Valores de ejemplo: "M30", "M40". cuerda

HighAvailabilityProperties

Nombre Descripción Valor
targetMode Modo de alta disponibilidad de destino solicitado para el clúster. 'Deshabilitado'
'Misma zona'
'ZoneRedundantPreferred'

MongoClusterProperties

Nombre Descripción Valor
administrador Propiedades de administrador local para el clúster de mongo. AdministratorProperties
copia de seguridad Propiedades de copia de seguridad del clúster de mongo. BackupProperties (Propiedades de respaldo)
calcular Propiedades de proceso del clúster de mongo. ComputeProperties de
createMode Modo para crear un clúster de Mongo. 'Valor predeterminado'
'Réplica geográfica'
'PointInTimeRestore'
'Réplica'
alta disponibilidad Propiedades de alta disponibilidad del clúster de mongo. HighAvailabilityProperties
previewFeatures Lista de conexiones de punto de conexión privado. Matriz de cadenas que contiene cualquiera de:
'Réplicas geográficas'
publicNetworkAccess Indica si se permite o no el acceso al punto de conexión público para este clúster de Mongo. 'Deshabilitado'
'Habilitado'
replicaParameters Parámetros para crear un clúster de mongo de réplica. MongoClusterReplicaParameters
restoreParameters Los parámetros para crear un clúster de mongo de restauración a un momento dado. MongoClusterRestoreParameters
Versión del servidor Versión del servidor de Mongo DB. El valor predeterminado es la versión más reciente disponible si no se especifica. cuerda
particionamiento Propiedades de particionamiento del clúster de mongo. ShardingProperties
almacenamiento Propiedades de almacenamiento del clúster de mongo. StorageProperties (Propiedades de almacenamiento)

MongoClusterReplicaParameters

Nombre Descripción Valor
ubicaciónFuente Ubicación del clúster de origen string (obligatorio)
sourceResourceId Identificador del clúster de origen de replicación. string (obligatorio)

MongoClusterRestoreParameters

Nombre Descripción Valor
pointInTimeUTC Hora UTC a la que se va a restaurar un clúster de Mongo cuerda
sourceResourceId Identificador de recurso para buscar el clúster de origen que se va a restaurar cuerda

ShardingProperties

Nombre Descripción Valor
shardCount Número de particiones que se van a aprovisionar en el clúster. Int

StorageProperties (Propiedades de almacenamiento)

Nombre Descripción Valor
tamañoGb Tamaño del disco de datos asignado a cada servidor. Int

TrackedResourceTags

Nombre Descripción Valor

Ejemplos de uso

Ejemplos de Terraform

Un ejemplo básico de despliegue de 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    = ["*"]
}