Microsoft. DocumentDB mongoClusters 2026-06-01

Definizione della risorsa Bicep

Il tipo di risorsa mongoClusters può essere distribuito con operazioni destinate a:

  • Resource groups - Vedi resource group

Per un elenco delle proprietà modificate in ogni versione dell'API, vedere log delle modifiche.

Formato di risorsa

Per creare una risorsa Microsoft.DocumentDB/mongoClusters, aggiungere il bicep seguente al modello.

resource symbolicname 'Microsoft.DocumentDB/mongoClusters@2026-06-01' = {
  identity: {
    type: 'string'
    userAssignedIdentities: {
      {customized property}: {}
    }
  }
  location: 'string'
  name: 'string'
  properties: {
    administrator: {
      password: 'string'
      userName: 'string'
    }
    authConfig: {
      allowedModes: [
        'string'
      ]
    }
    backup: {}
    compute: {
      tier: 'string'
    }
    createMode: 'string'
    dataApi: {
      mode: 'string'
    }
    encryption: {
      customerManagedKeyEncryption: {
        keyEncryptionKeyIdentity: {
          identityType: 'string'
          userAssignedIdentityResourceId: 'string'
        }
        keyEncryptionKeyUrl: 'string'
      }
    }
    highAvailability: {
      targetMode: 'string'
    }
    networkBypassMode: 'string'
    previewFeatures: [
      'string'
    ]
    publicNetworkAccess: 'string'
    replicaParameters: {
      sourceLocation: 'string'
      sourceResourceId: 'string'
    }
    restoreParameters: {
      pointInTimeUTC: 'string'
      sourceResourceId: 'string'
    }
    serverVersion: 'string'
    sharding: {
      shardCount: int
    }
    storage: {
      sizeGb: int
      type: 'string'
    }
  }
  tags: {
    {customized property}: 'string'
  }
}

Valori delle proprietà

Microsoft. DocumentDB/mongoClusters

Name Description Value
identity Identità del servizio gestito assegnate a questa risorsa. ManagedServiceIdentity
posizione Posizione geografica in cui risiede la risorsa stringa (obbligatorio)
nome Nome della risorsa string

Vincoli:
Lunghezza minima = 3
Lunghezza massima = 40
Pattern = ^[a-z0-9]+(-[a-z0-9]+)* (obbligatorio)
properties Proprietà specifiche della risorsa. Proprietà MongoCluster
tags Tag delle risorse Dizionario di nomi e valori di tag. Vedi tag nei template

Proprietà dell'amministratore

Name Description Value
password Password amministratore. string

Vincoli:
Valore sensibile. Passare come parametro sicuro.
userName Nome utente amministratore. string

AuthConfigProperties

Name Description Value
allowedModes Modalità di autenticazione consentite per l'accesso ai dati nel cluster. Matrice di stringhe contenente uno dei seguenti elementi:
'MicrosoftEntraID'
'NativeAuth'

BackupProprietà

Name Description Value

Proprietà di calcolo

Name Description Value
tier Livello di calcolo da assegnare al cluster, in cui ogni livello esegue il mapping a una dimensione di memoria e core virtuale. Valori di esempio: 'M30', 'M40'. string

CustomerManagedKeyEncryptionProperties

Name Description Value
keyEncryptionKeyIdentity L'identità utilizzata per accedere alla chiave di crittografia della chiave. KeyEncryptionKeyIdentity
keyEncryptionKeyUrl URI della chiave dell'insieme di credenziali delle chiavi usata per la crittografia. string

DataApiProperties

Name Description Value
mode Modalità per indicare se l'API Dati Mongo è abilitata per un cluster. 'Disabilitato'
'Abilitato'

Proprietà di crittografia

Name Description Value
customerManagedKeyEncryption Impostazioni di crittografia delle chiavi gestite dal cliente. Proprietà CustomerManagedKeyEncryptionProperties

Proprietà HighAvailabilityProperties

Name Description Value
targetMode Modalità di disponibilità elevata di destinazione richiesta per il cluster. 'Disabilitato'
'SameZone'
'Zona ridondantePreferito'

KeyEncryptionKeyIdentity

Name Description Value
identityType Tipo di identità. È supportato solo 'UserAssignedIdentity'. 'IdentitàAssegnataUtente'
userAssignedIdentityResourceId ID risorsa di identità assegnato dall'utente. string

Identità dei Servizi Gestiti

Name Description Value
type Tipo di identità del servizio gestito (in cui sono consentiti sia i tipi SystemAssigned che UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (obbligatorio)
identità assegnate dall'utente Set di identità assegnate dall'utente associate alla risorsa. Le chiavi del dizionario userAssignedIdentities saranno ID di risorsa ARM nel modulo: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft. ManagedIdentity/userAssignedIdentities/{identityName}. I valori del dizionario possono essere oggetti vuoti ({}) nelle richieste. UserAssignedIdentities

Proprietà MongoCluster

Name Description Value
amministratore Proprietà dell'amministratore locale per il cluster mongo. Proprietà dell'amministratore
authConfig Configurazione dell'autenticazione per il cluster. AuthConfigProperties
backup Proprietà di backup del cluster mongo. BackupProperties
calcolare Proprietà di calcolo del cluster mongo. ComputeProperties
createMode Modalità per creare un cluster mongo. 'Default'
'GeoReplica'
'PointInTimeRestore'
'Replica'
dataApi Proprietà dell'API dati del cluster mongo. DataApiProperties
encryption Configurazione della crittografia per il cluster. Dipende dall'identità configurata. Proprietà di crittografia
alta disponibilità Proprietà a disponibilità elevata del cluster mongo. HighAvailabilityProperties
networkBypassMode La modalità bypass di rete per il cluster. Impostando su 'AzureCosmosDB' il servizio Azure Cosmos DB consente di bypassare le restrizioni di rete. 'AzureCosmosDB'
'None'
anteprimaCaratteristiche Elenco delle connessioni endpoint private. Matrice di stringhe contenente uno dei seguenti elementi:
'Repliche geografiche'
publicNetworkAccess Indica se l'accesso all'endpoint pubblico è consentito per questo cluster mongo. 'Disabilitato'
'Abilitato'
replicaParameters Parametri per creare un cluster mongo di replica. Parametri MongoClusterReplicaReplica
restoreParameters Parametri per creare un cluster mongo di ripristino temporizzato. MongoClusterRestoreParameters
serverVersion Versione del server Mongo DB. L'impostazione predefinita è la versione disponibile più recente, se non specificata. string
partizionamento orizzontale Proprietà di partizionamento orizzontale del cluster mongo. proprietà di partizionamento orizzontale
immagazzinamento Proprietà di archiviazione del cluster mongo. Proprietà di archiviazione

Parametri MongoClusterReplicaReplica

Name Description Value
sourceLocation Percorso del cluster di origine stringa (obbligatorio)
sourceResourceId ID del cluster di origine della replica. stringa (obbligatorio)

MongoClusterRestoreParameters

Name Description Value
pointInTimeUTC Ora UTC per ripristinare un cluster mongo string
sourceResourceId ID risorsa per individuare il cluster di origine da ripristinare string

Proprietà partizionamento orizzontale

Name Description Value
Conteggio frammenti Numero di partizioni di cui eseguire il provisioning nel cluster. int

Proprietà di archiviazione

Name Description Value
dimensioneGb Dimensioni del disco dati assegnato a ogni server. int
type Tipo di archiviazione con cui eseguire il provisioning dei server cluster. 'SSD premium'
'PremiumSSDv2'

TrackedResourceTags

Name Description Value

UserAssignedIdentities

Name Description Value

UserAssignedIdentity

Name Description Value

Esempi di utilizzo

Moduli verificati di Azure

I seguenti Azure Moduli Verificati possono essere utilizzati per distribuire questo tipo di risorsa.

Modulo Description
Cosmos DB per MongoDB (vCore) Modulo di risorse AVM per Cosmos DB per MongoDB (vCore)

Definizione di risorsa del modello di Resource Manager

Il tipo di risorsa mongoClusters può essere distribuito con operazioni destinate a:

  • Resource groups - Vedi resource group

Per un elenco delle proprietà modificate in ogni versione dell'API, vedere log delle modifiche.

Formato di risorsa

Per creare una risorsa Microsoft.DocumentDB/mongoClusters, aggiungere il codice JSON seguente al modello.

{
  "type": "Microsoft.DocumentDB/mongoClusters",
  "apiVersion": "2026-06-01",
  "name": "string",
  "identity": {
    "type": "string",
    "userAssignedIdentities": {
      "{customized property}": {
      }
    }
  },
  "location": "string",
  "properties": {
    "administrator": {
      "password": "string",
      "userName": "string"
    },
    "authConfig": {
      "allowedModes": [ "string" ]
    },
    "backup": {
    },
    "compute": {
      "tier": "string"
    },
    "createMode": "string",
    "dataApi": {
      "mode": "string"
    },
    "encryption": {
      "customerManagedKeyEncryption": {
        "keyEncryptionKeyIdentity": {
          "identityType": "string",
          "userAssignedIdentityResourceId": "string"
        },
        "keyEncryptionKeyUrl": "string"
      }
    },
    "highAvailability": {
      "targetMode": "string"
    },
    "networkBypassMode": "string",
    "previewFeatures": [ "string" ],
    "publicNetworkAccess": "string",
    "replicaParameters": {
      "sourceLocation": "string",
      "sourceResourceId": "string"
    },
    "restoreParameters": {
      "pointInTimeUTC": "string",
      "sourceResourceId": "string"
    },
    "serverVersion": "string",
    "sharding": {
      "shardCount": "int"
    },
    "storage": {
      "sizeGb": "int",
      "type": "string"
    }
  },
  "tags": {
    "{customized property}": "string"
  }
}

Valori delle proprietà

Microsoft. DocumentDB/mongoClusters

Name Description Value
apiVersion Versione dell'API '2026-06-01'
identity Identità del servizio gestito assegnate a questa risorsa. ManagedServiceIdentity
posizione Posizione geografica in cui risiede la risorsa stringa (obbligatorio)
nome Nome della risorsa string

Vincoli:
Lunghezza minima = 3
Lunghezza massima = 40
Pattern = ^[a-z0-9]+(-[a-z0-9]+)* (obbligatorio)
properties Proprietà specifiche della risorsa. Proprietà MongoCluster
tags Tag delle risorse Dizionario di nomi e valori di tag. Vedi tag nei template
type Tipo di risorsa 'Microsoft.DocumentDB/mongoClusters'

Proprietà dell'amministratore

Name Description Value
password Password amministratore. string

Vincoli:
Valore sensibile. Passare come parametro sicuro.
userName Nome utente amministratore. string

AuthConfigProperties

Name Description Value
allowedModes Modalità di autenticazione consentite per l'accesso ai dati nel cluster. Matrice di stringhe contenente uno dei seguenti elementi:
'MicrosoftEntraID'
'NativeAuth'

BackupProprietà

Name Description Value

Proprietà di calcolo

Name Description Value
tier Livello di calcolo da assegnare al cluster, in cui ogni livello esegue il mapping a una dimensione di memoria e core virtuale. Valori di esempio: 'M30', 'M40'. string

CustomerManagedKeyEncryptionProperties

Name Description Value
keyEncryptionKeyIdentity L'identità utilizzata per accedere alla chiave di crittografia della chiave. KeyEncryptionKeyIdentity
keyEncryptionKeyUrl URI della chiave dell'insieme di credenziali delle chiavi usata per la crittografia. string

DataApiProperties

Name Description Value
mode Modalità per indicare se l'API Dati Mongo è abilitata per un cluster. 'Disabilitato'
'Abilitato'

Proprietà di crittografia

Name Description Value
customerManagedKeyEncryption Impostazioni di crittografia delle chiavi gestite dal cliente. Proprietà CustomerManagedKeyEncryptionProperties

Proprietà HighAvailabilityProperties

Name Description Value
targetMode Modalità di disponibilità elevata di destinazione richiesta per il cluster. 'Disabilitato'
'SameZone'
'Zona ridondantePreferito'

KeyEncryptionKeyIdentity

Name Description Value
identityType Tipo di identità. È supportato solo 'UserAssignedIdentity'. 'IdentitàAssegnataUtente'
userAssignedIdentityResourceId ID risorsa di identità assegnato dall'utente. string

Identità dei Servizi Gestiti

Name Description Value
type Tipo di identità del servizio gestito (in cui sono consentiti sia i tipi SystemAssigned che UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (obbligatorio)
identità assegnate dall'utente Set di identità assegnate dall'utente associate alla risorsa. Le chiavi del dizionario userAssignedIdentities saranno ID di risorsa ARM nel modulo: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft. ManagedIdentity/userAssignedIdentities/{identityName}. I valori del dizionario possono essere oggetti vuoti ({}) nelle richieste. UserAssignedIdentities

Proprietà MongoCluster

Name Description Value
amministratore Proprietà dell'amministratore locale per il cluster mongo. Proprietà dell'amministratore
authConfig Configurazione dell'autenticazione per il cluster. AuthConfigProperties
backup Proprietà di backup del cluster mongo. BackupProperties
calcolare Proprietà di calcolo del cluster mongo. ComputeProperties
createMode Modalità per creare un cluster mongo. 'Default'
'GeoReplica'
'PointInTimeRestore'
'Replica'
dataApi Proprietà dell'API dati del cluster mongo. DataApiProperties
encryption Configurazione della crittografia per il cluster. Dipende dall'identità configurata. Proprietà di crittografia
alta disponibilità Proprietà a disponibilità elevata del cluster mongo. HighAvailabilityProperties
networkBypassMode La modalità bypass di rete per il cluster. Impostando su 'AzureCosmosDB' il servizio Azure Cosmos DB consente di bypassare le restrizioni di rete. 'AzureCosmosDB'
'None'
anteprimaCaratteristiche Elenco delle connessioni endpoint private. Matrice di stringhe contenente uno dei seguenti elementi:
'Repliche geografiche'
publicNetworkAccess Indica se l'accesso all'endpoint pubblico è consentito per questo cluster mongo. 'Disabilitato'
'Abilitato'
replicaParameters Parametri per creare un cluster mongo di replica. Parametri MongoClusterReplicaReplica
restoreParameters Parametri per creare un cluster mongo di ripristino temporizzato. MongoClusterRestoreParameters
serverVersion Versione del server Mongo DB. L'impostazione predefinita è la versione disponibile più recente, se non specificata. string
partizionamento orizzontale Proprietà di partizionamento orizzontale del cluster mongo. proprietà di partizionamento orizzontale
immagazzinamento Proprietà di archiviazione del cluster mongo. Proprietà di archiviazione

Parametri MongoClusterReplicaReplica

Name Description Value
sourceLocation Percorso del cluster di origine stringa (obbligatorio)
sourceResourceId ID del cluster di origine della replica. stringa (obbligatorio)

MongoClusterRestoreParameters

Name Description Value
pointInTimeUTC Ora UTC per ripristinare un cluster mongo string
sourceResourceId ID risorsa per individuare il cluster di origine da ripristinare string

Proprietà partizionamento orizzontale

Name Description Value
Conteggio frammenti Numero di partizioni di cui eseguire il provisioning nel cluster. int

Proprietà di archiviazione

Name Description Value
dimensioneGb Dimensioni del disco dati assegnato a ogni server. int
type Tipo di archiviazione con cui eseguire il provisioning dei server cluster. 'SSD premium'
'PremiumSSDv2'

TrackedResourceTags

Name Description Value

UserAssignedIdentities

Name Description Value

UserAssignedIdentity

Name Description Value

Esempi di utilizzo

Definizione di risorsa Terraform (provider AzAPI)

Il tipo di risorsa mongoClusters può essere distribuito con operazioni destinate a:

  • Gruppi di risorse

Per un elenco delle proprietà modificate in ogni versione dell'API, vedere log delle modifiche.

Formato di risorsa

Per creare una risorsa Microsoft.DocumentDB/mongoClusters, aggiungere il file Terraform seguente al modello.

resource "azapi_resource" "symbolicname" {
  type = "Microsoft.DocumentDB/mongoClusters@2026-06-01"
  name = "string"
  parent_id = "string"
  identity {
    type = "string"
    identity_ids = [
      "string"
    ]
  }
  location = "string"
  tags = {
    {customized property} = "string"
  }
  body = {
    properties = {
      administrator = {
        password = "string"
        userName = "string"
      }
      authConfig = {
        allowedModes = [
          "string"
        ]
      }
      backup = {
      }
      compute = {
        tier = "string"
      }
      createMode = "string"
      dataApi = {
        mode = "string"
      }
      encryption = {
        customerManagedKeyEncryption = {
          keyEncryptionKeyIdentity = {
            identityType = "string"
            userAssignedIdentityResourceId = "string"
          }
          keyEncryptionKeyUrl = "string"
        }
      }
      highAvailability = {
        targetMode = "string"
      }
      networkBypassMode = "string"
      previewFeatures = [
        "string"
      ]
      publicNetworkAccess = "string"
      replicaParameters = {
        sourceLocation = "string"
        sourceResourceId = "string"
      }
      restoreParameters = {
        pointInTimeUTC = "string"
        sourceResourceId = "string"
      }
      serverVersion = "string"
      sharding = {
        shardCount = int
      }
      storage = {
        sizeGb = int
        type = "string"
      }
    }
  }
}

Valori delle proprietà

Microsoft. DocumentDB/mongoClusters

Name Description Value
identity Identità del servizio gestito assegnate a questa risorsa. ManagedServiceIdentity
posizione Posizione geografica in cui risiede la risorsa stringa (obbligatorio)
nome Nome della risorsa string

Vincoli:
Lunghezza minima = 3
Lunghezza massima = 40
Pattern = ^[a-z0-9]+(-[a-z0-9]+)* (obbligatorio)
properties Proprietà specifiche della risorsa. Proprietà MongoCluster
tags Tag delle risorse Dizionario di nomi e valori di tag.
type Tipo di risorsa "Microsoft. DocumentDB/mongoClusters@2026-06-01"

Proprietà dell'amministratore

Name Description Value
password Password amministratore. string

Vincoli:
Valore sensibile. Passare come parametro sicuro.
userName Nome utente amministratore. string

AuthConfigProperties

Name Description Value
allowedModes Modalità di autenticazione consentite per l'accesso ai dati nel cluster. Matrice di stringhe contenente uno dei seguenti elementi:
'MicrosoftEntraID'
'NativeAuth'

BackupProprietà

Name Description Value

Proprietà di calcolo

Name Description Value
tier Livello di calcolo da assegnare al cluster, in cui ogni livello esegue il mapping a una dimensione di memoria e core virtuale. Valori di esempio: 'M30', 'M40'. string

CustomerManagedKeyEncryptionProperties

Name Description Value
keyEncryptionKeyIdentity L'identità utilizzata per accedere alla chiave di crittografia della chiave. KeyEncryptionKeyIdentity
keyEncryptionKeyUrl URI della chiave dell'insieme di credenziali delle chiavi usata per la crittografia. string

DataApiProperties

Name Description Value
mode Modalità per indicare se l'API Dati Mongo è abilitata per un cluster. 'Disabilitato'
'Abilitato'

Proprietà di crittografia

Name Description Value
customerManagedKeyEncryption Impostazioni di crittografia delle chiavi gestite dal cliente. Proprietà CustomerManagedKeyEncryptionProperties

Proprietà HighAvailabilityProperties

Name Description Value
targetMode Modalità di disponibilità elevata di destinazione richiesta per il cluster. 'Disabilitato'
'SameZone'
'Zona ridondantePreferito'

KeyEncryptionKeyIdentity

Name Description Value
identityType Tipo di identità. È supportato solo 'UserAssignedIdentity'. 'IdentitàAssegnataUtente'
userAssignedIdentityResourceId ID risorsa di identità assegnato dall'utente. string

Identità dei Servizi Gestiti

Name Description Value
type Tipo di identità del servizio gestito (in cui sono consentiti sia i tipi SystemAssigned che UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (obbligatorio)
identità assegnate dall'utente Set di identità assegnate dall'utente associate alla risorsa. Le chiavi del dizionario userAssignedIdentities saranno ID di risorsa ARM nel modulo: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft. ManagedIdentity/userAssignedIdentities/{identityName}. I valori del dizionario possono essere oggetti vuoti ({}) nelle richieste. UserAssignedIdentities

Proprietà MongoCluster

Name Description Value
amministratore Proprietà dell'amministratore locale per il cluster mongo. Proprietà dell'amministratore
authConfig Configurazione dell'autenticazione per il cluster. AuthConfigProperties
backup Proprietà di backup del cluster mongo. BackupProperties
calcolare Proprietà di calcolo del cluster mongo. ComputeProperties
createMode Modalità per creare un cluster mongo. 'Default'
'GeoReplica'
'PointInTimeRestore'
'Replica'
dataApi Proprietà dell'API dati del cluster mongo. DataApiProperties
encryption Configurazione della crittografia per il cluster. Dipende dall'identità configurata. Proprietà di crittografia
alta disponibilità Proprietà a disponibilità elevata del cluster mongo. HighAvailabilityProperties
networkBypassMode La modalità bypass di rete per il cluster. Impostando su 'AzureCosmosDB' il servizio Azure Cosmos DB consente di bypassare le restrizioni di rete. 'AzureCosmosDB'
'None'
anteprimaCaratteristiche Elenco delle connessioni endpoint private. Matrice di stringhe contenente uno dei seguenti elementi:
'Repliche geografiche'
publicNetworkAccess Indica se l'accesso all'endpoint pubblico è consentito per questo cluster mongo. 'Disabilitato'
'Abilitato'
replicaParameters Parametri per creare un cluster mongo di replica. Parametri MongoClusterReplicaReplica
restoreParameters Parametri per creare un cluster mongo di ripristino temporizzato. MongoClusterRestoreParameters
serverVersion Versione del server Mongo DB. L'impostazione predefinita è la versione disponibile più recente, se non specificata. string
partizionamento orizzontale Proprietà di partizionamento orizzontale del cluster mongo. proprietà di partizionamento orizzontale
immagazzinamento Proprietà di archiviazione del cluster mongo. Proprietà di archiviazione

Parametri MongoClusterReplicaReplica

Name Description Value
sourceLocation Percorso del cluster di origine stringa (obbligatorio)
sourceResourceId ID del cluster di origine della replica. stringa (obbligatorio)

MongoClusterRestoreParameters

Name Description Value
pointInTimeUTC Ora UTC per ripristinare un cluster mongo string
sourceResourceId ID risorsa per individuare il cluster di origine da ripristinare string

Proprietà partizionamento orizzontale

Name Description Value
Conteggio frammenti Numero di partizioni di cui eseguire il provisioning nel cluster. int

Proprietà di archiviazione

Name Description Value
dimensioneGb Dimensioni del disco dati assegnato a ogni server. int
type Tipo di archiviazione con cui eseguire il provisioning dei server cluster. 'SSD premium'
'PremiumSSDv2'

TrackedResourceTags

Name Description Value

UserAssignedIdentities

Name Description Value

UserAssignedIdentity

Name Description Value

Esempi di utilizzo

Esempi di Terraform

Un esempio base di distribuzione di Azure Cosmos DB per 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    = ["*"]
}

Moduli verificati di Azure

I seguenti Azure Moduli Verificati possono essere utilizzati per distribuire questo tipo di risorsa.

Modulo Description
Cosmos DB per MongoDB (vCore) Modulo di risorse AVM per Cosmos DB per MongoDB (vCore)