Partager via


Microsoft.DocumentDB mongoClusters 2024-07-01

Définition de ressource Bicep

Le type de ressource mongoClusters peut être déployé avec des opérations qui ciblent :

Pour obtenir la liste des propriétés modifiées dans chaque version de l’API, consultez journal des modifications.

Format de ressource

Pour créer une ressource Microsoft.DocumentDB/mongoClusters, ajoutez le bicep suivant à votre modèle.

resource symbolicname 'Microsoft.DocumentDB/mongoClusters@2024-07-01' = {
  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'
  }
}

Valeurs de propriété

Microsoft.DocumentDB/mongoClusters

Nom Descriptif Valeur
emplacement Emplacement géographique où réside la ressource chaîne (obligatoire)
nom Nom de la ressource corde

Contraintes:
Longueur minimale = 3
Longueur maximale = 40
Modèle = ^[a-z0-9]+(-[a-z0-9]+)* (obligatoire)
Propriétés Propriétés spécifiques à la ressource pour cette ressource. MongoClusterProperties
étiquettes Balises de ressource Dictionnaire de noms et de valeurs d’étiquettes. Consultez les balises dans les modèles

AdministratorProperties

Nom Descriptif Valeur
mot de passe Mot de passe administrateur. corde

Contraintes:
Valeur sensible. Passez en tant que paramètre sécurisé.
nom d’utilisateur Nom d’utilisateur administrateur. corde

BackupProperties

Nom Descriptif Valeur

ComputeProperties

Nom Descriptif Valeur
niveau Niveau de calcul à affecter au cluster, où chaque niveau est mappé à une taille de cœur virtuel et de mémoire. Exemples de valeurs : « M30 », « M40 ». corde

HighAvailabilityProperties

Nom Descriptif Valeur
targetMode Mode de haute disponibilité cible demandé pour le cluster. 'Désactivé'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Nom Descriptif Valeur
administrateur Propriétés de l’administrateur local pour le cluster mongo. AdministratorProperties
sauvegarde Propriétés de sauvegarde du cluster mongo. BackupProperties
calculer Propriétés de calcul du cluster mongo. ComputeProperties
createMode Mode de création d’un cluster mongo. Valeur par défaut
'GeoReplica'
'PointInTimeRestore'
'Réplique'
highAvailability Propriétés de haute disponibilité du cluster mongo. HighAvailabilityProperties
aperçuFonctionnalités Liste des connexions de point de terminaison privé. Tableau de chaînes contenant l’un des éléments suivants :
'GeoReplicas'
publicNetworkAccess Indique si l’accès au point de terminaison public est autorisé pour ce cluster mongo. 'Désactivé'
'Activé'
replicaParameters Paramètres permettant de créer un cluster mongo de réplica. MongoClusterReplicaParameters
restoreParameters Paramètres permettant de créer un cluster mongo de restauration à un point dans le temps. MongoClusterRestoreParameters
version serveur Version du serveur Mongo DB. La valeur par défaut est la dernière version disponible si elle n’est pas spécifiée. corde
partitionnement Propriétés de partitionnement du cluster mongo. ShardingProperties
stockage Propriétés de stockage du cluster mongo. StorageProperties

MongoClusterReplicaParameters

Nom Descriptif Valeur
sourceLocation Emplacement du cluster source chaîne (obligatoire)
sourceResourceId ID du cluster source de réplication. chaîne (obligatoire)

MongoClusterRestoreParameters

Nom Descriptif Valeur
pointInTimeUTC Point UTC dans le temps pour restaurer un cluster mongo corde
sourceResourceId ID de ressource pour localiser le cluster source à restaurer corde

ShardingProperties

Nom Descriptif Valeur
shardCount Nombre de partitions à provisionner sur le cluster. Int

StorageProperties

Nom Descriptif Valeur
tailleGb Taille du disque de données affecté à chaque serveur. Int

TrackedResourceTags

Nom Descriptif Valeur

Exemples d’utilisation

Modules vérifiés Azure

Les modules vérifiés Azure suivants peuvent être utilisés pour déployer ce type de ressource.

Module Descriptif
Cosmos DB pour MongoDB (vCore) Module de ressource AVM pour Cosmos DB pour MongoDB (vCore)

Définition de ressource de modèle ARM

Le type de ressource mongoClusters peut être déployé avec des opérations qui ciblent :

Pour obtenir la liste des propriétés modifiées dans chaque version de l’API, consultez journal des modifications.

Format de ressource

Pour créer une ressource Microsoft.DocumentDB/mongoClusters, ajoutez le code JSON suivant à votre modèle.

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

Valeurs de propriété

Microsoft.DocumentDB/mongoClusters

Nom Descriptif Valeur
apiVersion Version de l’API '2024-07-01'
emplacement Emplacement géographique où réside la ressource chaîne (obligatoire)
nom Nom de la ressource corde

Contraintes:
Longueur minimale = 3
Longueur maximale = 40
Modèle = ^[a-z0-9]+(-[a-z0-9]+)* (obligatoire)
Propriétés Propriétés spécifiques à la ressource pour cette ressource. MongoClusterProperties
étiquettes Balises de ressource Dictionnaire de noms et de valeurs d’étiquettes. Consultez les balises dans les modèles
type Type de ressource 'Microsoft.DocumentDB/mongoClusters'

AdministratorProperties

Nom Descriptif Valeur
mot de passe Mot de passe administrateur. corde

Contraintes:
Valeur sensible. Passez en tant que paramètre sécurisé.
nom d’utilisateur Nom d’utilisateur administrateur. corde

BackupProperties

Nom Descriptif Valeur

ComputeProperties

Nom Descriptif Valeur
niveau Niveau de calcul à affecter au cluster, où chaque niveau est mappé à une taille de cœur virtuel et de mémoire. Exemples de valeurs : « M30 », « M40 ». corde

HighAvailabilityProperties

Nom Descriptif Valeur
targetMode Mode de haute disponibilité cible demandé pour le cluster. 'Désactivé'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Nom Descriptif Valeur
administrateur Propriétés de l’administrateur local pour le cluster mongo. AdministratorProperties
sauvegarde Propriétés de sauvegarde du cluster mongo. BackupProperties
calculer Propriétés de calcul du cluster mongo. ComputeProperties
createMode Mode de création d’un cluster mongo. Valeur par défaut
'GeoReplica'
'PointInTimeRestore'
'Réplique'
highAvailability Propriétés de haute disponibilité du cluster mongo. HighAvailabilityProperties
aperçuFonctionnalités Liste des connexions de point de terminaison privé. Tableau de chaînes contenant l’un des éléments suivants :
'GeoReplicas'
publicNetworkAccess Indique si l’accès au point de terminaison public est autorisé pour ce cluster mongo. 'Désactivé'
'Activé'
replicaParameters Paramètres permettant de créer un cluster mongo de réplica. MongoClusterReplicaParameters
restoreParameters Paramètres permettant de créer un cluster mongo de restauration à un point dans le temps. MongoClusterRestoreParameters
version serveur Version du serveur Mongo DB. La valeur par défaut est la dernière version disponible si elle n’est pas spécifiée. corde
partitionnement Propriétés de partitionnement du cluster mongo. ShardingProperties
stockage Propriétés de stockage du cluster mongo. StorageProperties

MongoClusterReplicaParameters

Nom Descriptif Valeur
sourceLocation Emplacement du cluster source chaîne (obligatoire)
sourceResourceId ID du cluster source de réplication. chaîne (obligatoire)

MongoClusterRestoreParameters

Nom Descriptif Valeur
pointInTimeUTC Point UTC dans le temps pour restaurer un cluster mongo corde
sourceResourceId ID de ressource pour localiser le cluster source à restaurer corde

ShardingProperties

Nom Descriptif Valeur
shardCount Nombre de partitions à provisionner sur le cluster. Int

StorageProperties

Nom Descriptif Valeur
tailleGb Taille du disque de données affecté à chaque serveur. Int

TrackedResourceTags

Nom Descriptif Valeur

Exemples d’utilisation

Définition de ressource Terraform (fournisseur AzAPI)

Le type de ressource mongoClusters peut être déployé avec des opérations qui ciblent :

  • Groupes de ressources

Pour obtenir la liste des propriétés modifiées dans chaque version de l’API, consultez journal des modifications.

Format de ressource

Pour créer une ressource Microsoft.DocumentDB/mongoClusters, ajoutez le terraform suivant à votre modèle.

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
      }
    }
  }
}

Valeurs de propriété

Microsoft.DocumentDB/mongoClusters

Nom Descriptif Valeur
emplacement Emplacement géographique où réside la ressource chaîne (obligatoire)
nom Nom de la ressource corde

Contraintes:
Longueur minimale = 3
Longueur maximale = 40
Modèle = ^[a-z0-9]+(-[a-z0-9]+)* (obligatoire)
Propriétés Propriétés spécifiques à la ressource pour cette ressource. MongoClusterProperties
étiquettes Balises de ressource Dictionnaire de noms et de valeurs d’étiquettes.
type Type de ressource « Microsoft.DocumentDB/mongoClusters@2024-07-01 »

AdministratorProperties

Nom Descriptif Valeur
mot de passe Mot de passe administrateur. corde

Contraintes:
Valeur sensible. Passez en tant que paramètre sécurisé.
nom d’utilisateur Nom d’utilisateur administrateur. corde

BackupProperties

Nom Descriptif Valeur

ComputeProperties

Nom Descriptif Valeur
niveau Niveau de calcul à affecter au cluster, où chaque niveau est mappé à une taille de cœur virtuel et de mémoire. Exemples de valeurs : « M30 », « M40 ». corde

HighAvailabilityProperties

Nom Descriptif Valeur
targetMode Mode de haute disponibilité cible demandé pour le cluster. 'Désactivé'
'SameZone'
'ZoneRedundantPreferred'

MongoClusterProperties

Nom Descriptif Valeur
administrateur Propriétés de l’administrateur local pour le cluster mongo. AdministratorProperties
sauvegarde Propriétés de sauvegarde du cluster mongo. BackupProperties
calculer Propriétés de calcul du cluster mongo. ComputeProperties
createMode Mode de création d’un cluster mongo. Valeur par défaut
'GeoReplica'
'PointInTimeRestore'
'Réplique'
highAvailability Propriétés de haute disponibilité du cluster mongo. HighAvailabilityProperties
aperçuFonctionnalités Liste des connexions de point de terminaison privé. Tableau de chaînes contenant l’un des éléments suivants :
'GeoReplicas'
publicNetworkAccess Indique si l’accès au point de terminaison public est autorisé pour ce cluster mongo. 'Désactivé'
'Activé'
replicaParameters Paramètres permettant de créer un cluster mongo de réplica. MongoClusterReplicaParameters
restoreParameters Paramètres permettant de créer un cluster mongo de restauration à un point dans le temps. MongoClusterRestoreParameters
version serveur Version du serveur Mongo DB. La valeur par défaut est la dernière version disponible si elle n’est pas spécifiée. corde
partitionnement Propriétés de partitionnement du cluster mongo. ShardingProperties
stockage Propriétés de stockage du cluster mongo. StorageProperties

MongoClusterReplicaParameters

Nom Descriptif Valeur
sourceLocation Emplacement du cluster source chaîne (obligatoire)
sourceResourceId ID du cluster source de réplication. chaîne (obligatoire)

MongoClusterRestoreParameters

Nom Descriptif Valeur
pointInTimeUTC Point UTC dans le temps pour restaurer un cluster mongo corde
sourceResourceId ID de ressource pour localiser le cluster source à restaurer corde

ShardingProperties

Nom Descriptif Valeur
shardCount Nombre de partitions à provisionner sur le cluster. Int

StorageProperties

Nom Descriptif Valeur
tailleGb Taille du disque de données affecté à chaque serveur. Int

TrackedResourceTags

Nom Descriptif Valeur

Exemples d’utilisation

Échantillons Terraform

Un exemple de base de déploiement d’Azure Cosmos DB pour 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    = ["*"]
}