Udostępnij przez


Microsoft.DocumentDB mongoClusters 2024-06-01-wersja zapoznawcza

Definicja zasobu Bicep

Typ zasobu mongoClusters można wdrożyć przy użyciu operacji docelowych:

Aby uzyskać listę zmienionych właściwości w każdej wersji interfejsu API, zobacz dziennika zmian.

Format zasobu

Aby utworzyć zasób Microsoft.DocumentDB/mongoClusters, dodaj następujący kod Bicep do szablonu.

resource symbolicname 'Microsoft.DocumentDB/mongoClusters@2024-06-01-preview' = {
  scope: resourceSymbolicName or scope
  location: 'string'
  name: 'string'
  properties: {
    administratorLogin: 'string'
    administratorLoginPassword: 'string'
    createMode: 'string'
    nodeGroupSpecs: [
      {
        diskSizeGB: int
        enableHa: bool
        kind: 'string'
        nodeCount: int
        sku: 'string'
      }
    ]
    previewFeatures: [
      'string'
    ]
    publicNetworkAccess: 'string'
    replicaParameters: {
      sourceLocation: 'string'
      sourceResourceId: 'string'
    }
    restoreParameters: {
      pointInTimeUTC: 'string'
      sourceResourceId: 'string'
    }
    serverVersion: 'string'
  }
  tags: {
    {customized property}: 'string'
  }
}

Wartości właściwości

Microsoft.DocumentDB/mongoClusters

Nazwa Opis Wartość
lokalizacja Lokalizacja geograficzna, w której znajduje się zasób ciąg (wymagany)
nazwa Nazwa zasobu struna

Ograniczenia:
Minimalna długość = 3
Maksymalna długość = 40
Wzorzec = ^[a-z0-9]+(-[a-z0-9]+)* (wymagane)
Właściwości Właściwości specyficzne dla zasobu dla tego zasobu. MongoClusterProperties
zakres Użyj polecenia podczas tworzenia zasobu w zakresie innym niż zakres wdrożenia. Ustaw tę właściwość na symboliczną nazwę zasobu, aby zastosować zasób rozszerzenia.
Tagi Tagi zasobów Słownik nazw tagów i wartości. Zobacz tagi w szablonach

MongoClusterProperties

Nazwa Opis Wartość
administratorZaloguj się Identyfikator logowania administratora dla klastra mongo. ciąg
administratorLoginPassword Hasło logowania administratora. struna

Ograniczenia:
Wartość wrażliwa. Przekaż jako bezpieczny parametr.
createMode (tryb tworzenia) Tryb tworzenia klastra mongo. "Wartość domyślna"
"GeoReplica"
"PointInTimeRestore"
"Replika"
Specyfikacja grupy węzłów Lista specyfikacji grupy węzłów w klastrze. Specyfikacja grupy węzłów[]
Funkcje w wersji zapoznawczej Lista połączeń prywatnych punktów końcowych. Tablica ciągów zawierająca dowolną z:
"GeoReplicas"
publicNetworkAccess Określa, czy dostęp do publicznego punktu końcowego jest dozwolony dla tego klastra mongo. "Wyłączone"
"Włączone"
replicaParameters (parametry repliki) Parametry do utworzenia repliki klastra mongo. MongoClusterReplicaParameters (Parametry repliki)
restoreParameters (parametry przywracania) Parametry do utworzenia klastra mongo przywracania do punktu w czasie. MongoClusterRestoreParameters
wersja serwera Wersja serwera Mongo DB. Wartość domyślna to najnowsza dostępna wersja, jeśli nie zostanie określona. ciąg

MongoClusterReplicaParameters (Parametry repliki)

Nazwa Opis Wartość
lokalizacja źródłowa Lokalizacja klastra źródłowego ciąg (wymagany)
sourceResourceId (identyfikator źródłowy) Identyfikator klastra źródłowego replikacji. ciąg (wymagany)

MongoClusterRestoreParameters

Nazwa Opis Wartość
pointInTimeUTC (punkt w czasie) Punkt CZASU UTC w celu przywrócenia klastra mongo ciąg
sourceResourceId (identyfikator źródłowy) Identyfikator zasobu do zlokalizowania klastra źródłowego do przywrócenia ciąg

Specyfikacja grupy węzłów

Nazwa Opis Wartość
diskSizeGB (rozmiar dysku) Rozmiar magazynu dysku dla grupy węzłów w GB. Przykładowe wartości: 128, 256, 512, 1024. Int
włączyćHa Określa, czy w grupie węzłów jest włączona wysoka dostępność. Bool
rodzaj Typ węzła wdrożony w grupie węzłów. "Fragment"
nodeCount (liczba_węzłów) Liczba węzłów w grupie węzłów. Int
Numer jednostki magazynowej Jednostka SKU zasobów dla grupy węzłów. Definiuje to rozmiar procesora CPU i pamięci, który jest aprowizowany dla każdego węzła. Przykładowe wartości: "M30", "M40". ciąg

Śledzone tagi zasobów

Nazwa Opis Wartość

Przykłady użycia

Moduły zweryfikowane na platformie Azure

Następujące moduły zweryfikowane platformy Azure mogą służyć do wdrażania tego typu zasobu.

Moduł Opis
Cosmos DB for MongoDB (rdzeń wirtualny) Moduł zasobów AVM dla usługi Cosmos DB dla bazy danych MongoDB (rdzeń wirtualny)

Definicja zasobu szablonu usługi ARM

Typ zasobu mongoClusters można wdrożyć przy użyciu operacji docelowych:

Aby uzyskać listę zmienionych właściwości w każdej wersji interfejsu API, zobacz dziennika zmian.

Format zasobu

Aby utworzyć zasób Microsoft.DocumentDB/mongoClusters, dodaj następujący kod JSON do szablonu.

{
  "type": "Microsoft.DocumentDB/mongoClusters",
  "apiVersion": "2024-06-01-preview",
  "name": "string",
  "location": "string",
  "properties": {
    "administratorLogin": "string",
    "administratorLoginPassword": "string",
    "createMode": "string",
    "nodeGroupSpecs": [
      {
        "diskSizeGB": "int",
        "enableHa": "bool",
        "kind": "string",
        "nodeCount": "int",
        "sku": "string"
      }
    ],
    "previewFeatures": [ "string" ],
    "publicNetworkAccess": "string",
    "replicaParameters": {
      "sourceLocation": "string",
      "sourceResourceId": "string"
    },
    "restoreParameters": {
      "pointInTimeUTC": "string",
      "sourceResourceId": "string"
    },
    "serverVersion": "string"
  },
  "tags": {
    "{customized property}": "string"
  }
}

Wartości właściwości

Microsoft.DocumentDB/mongoClusters

Nazwa Opis Wartość
apiVersion (wersja interfejsu api) Wersja interfejsu API "2024-06-01-preview"
lokalizacja Lokalizacja geograficzna, w której znajduje się zasób ciąg (wymagany)
nazwa Nazwa zasobu struna

Ograniczenia:
Minimalna długość = 3
Maksymalna długość = 40
Wzorzec = ^[a-z0-9]+(-[a-z0-9]+)* (wymagane)
Właściwości Właściwości specyficzne dla zasobu dla tego zasobu. MongoClusterProperties
Tagi Tagi zasobów Słownik nazw tagów i wartości. Zobacz tagi w szablonach
typ Typ zasobu "Microsoft.DocumentDB/mongoClusters"

MongoClusterProperties

Nazwa Opis Wartość
administratorZaloguj się Identyfikator logowania administratora dla klastra mongo. ciąg
administratorLoginPassword Hasło logowania administratora. struna

Ograniczenia:
Wartość wrażliwa. Przekaż jako bezpieczny parametr.
createMode (tryb tworzenia) Tryb tworzenia klastra mongo. "Wartość domyślna"
"GeoReplica"
"PointInTimeRestore"
"Replika"
Specyfikacja grupy węzłów Lista specyfikacji grupy węzłów w klastrze. Specyfikacja grupy węzłów[]
Funkcje w wersji zapoznawczej Lista połączeń prywatnych punktów końcowych. Tablica ciągów zawierająca dowolną z:
"GeoReplicas"
publicNetworkAccess Określa, czy dostęp do publicznego punktu końcowego jest dozwolony dla tego klastra mongo. "Wyłączone"
"Włączone"
replicaParameters (parametry repliki) Parametry do utworzenia repliki klastra mongo. MongoClusterReplicaParameters (Parametry repliki)
restoreParameters (parametry przywracania) Parametry do utworzenia klastra mongo przywracania do punktu w czasie. MongoClusterRestoreParameters
wersja serwera Wersja serwera Mongo DB. Wartość domyślna to najnowsza dostępna wersja, jeśli nie zostanie określona. ciąg

MongoClusterReplicaParameters (Parametry repliki)

Nazwa Opis Wartość
lokalizacja źródłowa Lokalizacja klastra źródłowego ciąg (wymagany)
sourceResourceId (identyfikator źródłowy) Identyfikator klastra źródłowego replikacji. ciąg (wymagany)

MongoClusterRestoreParameters

Nazwa Opis Wartość
pointInTimeUTC (punkt w czasie) Punkt CZASU UTC w celu przywrócenia klastra mongo ciąg
sourceResourceId (identyfikator źródłowy) Identyfikator zasobu do zlokalizowania klastra źródłowego do przywrócenia ciąg

Specyfikacja grupy węzłów

Nazwa Opis Wartość
diskSizeGB (rozmiar dysku) Rozmiar magazynu dysku dla grupy węzłów w GB. Przykładowe wartości: 128, 256, 512, 1024. Int
włączyćHa Określa, czy w grupie węzłów jest włączona wysoka dostępność. Bool
rodzaj Typ węzła wdrożony w grupie węzłów. "Fragment"
nodeCount (liczba_węzłów) Liczba węzłów w grupie węzłów. Int
Numer jednostki magazynowej Jednostka SKU zasobów dla grupy węzłów. Definiuje to rozmiar procesora CPU i pamięci, który jest aprowizowany dla każdego węzła. Przykładowe wartości: "M30", "M40". ciąg

Śledzone tagi zasobów

Nazwa Opis Wartość

Przykłady użycia

Definicja zasobu narzędzia Terraform (dostawcy AzAPI)

Typ zasobu mongoClusters można wdrożyć przy użyciu operacji docelowych:

Aby uzyskać listę zmienionych właściwości w każdej wersji interfejsu API, zobacz dziennika zmian.

Format zasobu

Aby utworzyć zasób Microsoft.DocumentDB/mongoClusters, dodaj następujący program Terraform do szablonu.

resource "azapi_resource" "symbolicname" {
  type = "Microsoft.DocumentDB/mongoClusters@2024-06-01-preview"
  name = "string"
  parent_id = "string"
  location = "string"
  tags = {
    {customized property} = "string"
  }
  body = {
    properties = {
      administratorLogin = "string"
      administratorLoginPassword = "string"
      createMode = "string"
      nodeGroupSpecs = [
        {
          diskSizeGB = int
          enableHa = bool
          kind = "string"
          nodeCount = int
          sku = "string"
        }
      ]
      previewFeatures = [
        "string"
      ]
      publicNetworkAccess = "string"
      replicaParameters = {
        sourceLocation = "string"
        sourceResourceId = "string"
      }
      restoreParameters = {
        pointInTimeUTC = "string"
        sourceResourceId = "string"
      }
      serverVersion = "string"
    }
  }
}

Wartości właściwości

Microsoft.DocumentDB/mongoClusters

Nazwa Opis Wartość
lokalizacja Lokalizacja geograficzna, w której znajduje się zasób ciąg (wymagany)
nazwa Nazwa zasobu struna

Ograniczenia:
Minimalna długość = 3
Maksymalna długość = 40
Wzorzec = ^[a-z0-9]+(-[a-z0-9]+)* (wymagane)
parent_id Identyfikator zasobu, do który ma być stosowany ten zasób rozszerzenia. ciąg (wymagany)
Właściwości Właściwości specyficzne dla zasobu dla tego zasobu. MongoClusterProperties
Tagi Tagi zasobów Słownik nazw tagów i wartości.
typ Typ zasobu "Microsoft.DocumentDB/mongoClusters@2024-06-01-preview"

MongoClusterProperties

Nazwa Opis Wartość
administratorZaloguj się Identyfikator logowania administratora dla klastra mongo. ciąg
administratorLoginPassword Hasło logowania administratora. struna

Ograniczenia:
Wartość wrażliwa. Przekaż jako bezpieczny parametr.
createMode (tryb tworzenia) Tryb tworzenia klastra mongo. "Wartość domyślna"
"GeoReplica"
"PointInTimeRestore"
"Replika"
Specyfikacja grupy węzłów Lista specyfikacji grupy węzłów w klastrze. Specyfikacja grupy węzłów[]
Funkcje w wersji zapoznawczej Lista połączeń prywatnych punktów końcowych. Tablica ciągów zawierająca dowolną z:
"GeoReplicas"
publicNetworkAccess Określa, czy dostęp do publicznego punktu końcowego jest dozwolony dla tego klastra mongo. "Wyłączone"
"Włączone"
replicaParameters (parametry repliki) Parametry do utworzenia repliki klastra mongo. MongoClusterReplicaParameters (Parametry repliki)
restoreParameters (parametry przywracania) Parametry do utworzenia klastra mongo przywracania do punktu w czasie. MongoClusterRestoreParameters
wersja serwera Wersja serwera Mongo DB. Wartość domyślna to najnowsza dostępna wersja, jeśli nie zostanie określona. ciąg

MongoClusterReplicaParameters (Parametry repliki)

Nazwa Opis Wartość
lokalizacja źródłowa Lokalizacja klastra źródłowego ciąg (wymagany)
sourceResourceId (identyfikator źródłowy) Identyfikator klastra źródłowego replikacji. ciąg (wymagany)

MongoClusterRestoreParameters

Nazwa Opis Wartość
pointInTimeUTC (punkt w czasie) Punkt CZASU UTC w celu przywrócenia klastra mongo ciąg
sourceResourceId (identyfikator źródłowy) Identyfikator zasobu do zlokalizowania klastra źródłowego do przywrócenia ciąg

Specyfikacja grupy węzłów

Nazwa Opis Wartość
diskSizeGB (rozmiar dysku) Rozmiar magazynu dysku dla grupy węzłów w GB. Przykładowe wartości: 128, 256, 512, 1024. Int
włączyćHa Określa, czy w grupie węzłów jest włączona wysoka dostępność. Bool
rodzaj Typ węzła wdrożony w grupie węzłów. "Fragment"
nodeCount (liczba_węzłów) Liczba węzłów w grupie węzłów. Int
Numer jednostki magazynowej Jednostka SKU zasobów dla grupy węzłów. Definiuje to rozmiar procesora CPU i pamięci, który jest aprowizowany dla każdego węzła. Przykładowe wartości: "M30", "M40". ciąg

Śledzone tagi zasobów

Nazwa Opis Wartość

Przykłady użycia

Przykłady programu Terraform

Podstawowy przykład wdrażania Azure Cosmos DB dla 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    = ["*"]
}