Sdílet prostřednictvím


Clustery Microsoft.DocumentDB mongoClusters

Definice prostředku Bicep

Typ prostředku mongoClusters je možné nasadit s operacemi, které cílí:

Seznam změněných vlastností v jednotlivých verzích rozhraní API najdete v protokolu změn.

Formát prostředku

Pokud chcete vytvořit prostředek Microsoft.DocumentDB/mongoClusters, přidejte do šablony následující bicep.

resource symbolicname 'Microsoft.DocumentDB/mongoClusters@2025-09-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'
    }
    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'
  }
}

Hodnoty vlastností

Microsoft.DocumentDB/mongoClusters

Jméno Popis Hodnota
identita Identity spravované služby přiřazené k tomuto prostředku. ManagedServiceIdentity
poloha Geografické umístění, ve kterém se nachází zdroj string (povinné)
Jméno Název prostředku řetězec

Omezení:
Minimální délka = 3
Maximální délka = 40
Model = ^[a-z0-9]+(-[a-z0-9]+)* (povinné)
vlastnosti Vlastnosti specifické pro prostředek pro tento prostředek. MongoClusterProperties
visačky Značky prostředků Slovník názvů a hodnot značek Viz Značky v šablonách

Vlastnosti správce

Jméno Popis Hodnota
heslo Heslo správce. řetězec

Omezení:
Citlivá hodnota. Předejte ho jako zabezpečený parametr.
uživatelské_jméno Uživatelské jméno správce. řetězec

AuthConfigProperties

Jméno Popis Hodnota
allowedModes Povolené režimy ověřování pro přístup k datům v clusteru. Řetězcové pole obsahující některou z těchto možností:
'MicrosoftEntraID'
'NativeAuth'

Zálohováníproperties

Jméno Popis Hodnota

ComputeProperties

Jméno Popis Hodnota
přesunout do jiné vrstvy Úroveň výpočetních prostředků, která se má přiřadit ke clusteru, kde se každá vrstva mapuje na virtuální jádro a velikost paměti. Příklady hodnot: M30, M40. řetězec

CustomerManagedKeyEncryptionProperties

Jméno Popis Hodnota
keyEncryptionKeyIdentity Identita použitá pro přístup k šifrovacímu klíči klíče. KlíčováŠifrovaKlíčIdentita
keyEncryptionKeyUrl Identifikátor URI klíče trezoru klíčů použitého k šifrování. řetězec

Vlastnosti rozhraní DataApi

Jméno Popis Hodnota
režim Režim označující, jestli je pro cluster povolené rozhraní Mongo Data API. Zakázáno
Povoleno

EncryptionProperties

Jméno Popis Hodnota
customerManagedKeyEncryption Nastavení šifrování klíče spravovaného zákazníkem. Vlastnosti šifrování spravovaného klíče zákazníka

Vlastnosti vysoké dostupnosti

Jméno Popis Hodnota
Režim targetMode Cílový režim vysoké dostupnosti požadovaný pro cluster. Zakázáno
SameZone
ZoneRedundantPreferred

KeyEncryptionKeyIdentity

Jméno Popis Hodnota
Typ identity Typ identity. Podporována je pouze UserAssignedIdentity. UserAssignedIdentity
userAssignedIdentityResourceId ID prostředku identity přiřazené uživatelem. řetězec

ManagedServiceIdentity

Jméno Popis Hodnota
typ Typ identity spravované služby (kde jsou povolené typy SystemAssigned i UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (povinné)
uživatelem přiřazené identity Sada identit přiřazených uživatelem přidružená k prostředku. Klíče slovníku userAssignedIdentities budou ID prostředků ARM ve formuláři: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. Hodnoty slovníku můžou být prázdné objekty ({}) v požadavcích. UserAssignedIdentities

MongoClusterProperties

Jméno Popis Hodnota
správce Vlastnosti místního správce clusteru Mongo. správce
Konfigurace authConfig Konfigurace ověřování pro cluster. AuthConfigProperties
záloha Vlastnosti zálohování clusteru Mongo. BackupProperties
vypočítat Vlastnosti výpočetních prostředků clusteru Mongo. ComputeProperties
Režim createMode Režim vytvoření clusteru Mongo. Výchozí
"GeoReplica"
PointInTimeRestore
Replika
datové rozhraní API Vlastnosti rozhraní DATA API clusteru Mongo. dataApiProperties
šifrování Konfigurace šifrování pro cluster. Závisí na konfiguraci identity. encryptionProperties
vysoká dostupnost Vlastnosti vysoké dostupnosti clusteru Mongo. HighAvailabilityProperties
PreviewFeatures Seznam připojení privátních koncových bodů Řetězcové pole obsahující některou z těchto možností:
"GeoReplicas"
přístup k veřejné síti Určuje, jestli je pro tento cluster Mongo povolený přístup k veřejnému koncovému bodu nebo ne. Zakázáno
Povoleno
Parametry repliky Parametry pro vytvoření clusteru Mongo repliky. MongoClusterReplicaParameters
Parametry obnovení Parametry pro vytvoření clusteru Mongo k určitému bodu v čase. MongoClusterRestoreParameters
verze serveru Verze serveru Mongo DB. Výchozí hodnota je nejnovější dostupná verze, pokud není zadána. řetězec
Sharding Vlastnosti horizontálního dělení clusteru Mongo. ShardingProperties
úložiště Vlastnosti úložiště clusteru Mongo. storageProperties

Parametry repliky mongoClusteru

Jméno Popis Hodnota
sourceLocation Umístění zdrojového clusteru string (povinné)
ID zdroje ID zdrojového clusteru replikace. string (povinné)

MongoClusterRestoreParameters

Jméno Popis Hodnota
pointInTimeUTC Obnovení clusteru Mongo k určitému bodu v čase UTC řetězec
ID zdroje ID prostředku pro vyhledání zdrojového clusteru pro obnovení řetězec

Vlastnosti horizontálního dělení

Jméno Popis Hodnota
shardCount Počet horizontálních oddílů, které se mají zřídit v clusteru Int

Vlastnosti úložiště

Jméno Popis Hodnota
VelikostGb Velikost datového disku přiřazeného každému serveru. Int
typ Typ úložiště, se kterým se mají servery clusteru zřídit. "PremiumSSD"
"PremiumSSDv2"

TrackedResourceTags

Jméno Popis Hodnota

UserAssignedIdentities

Jméno Popis Hodnota

Identita přiřazená uživatelem (UserAssignedIdentity)

Jméno Popis Hodnota

Příklady použití

Ověřené moduly Azure

K nasazení tohoto typu prostředku je možné použít následující ověřené moduly Azure.

Modul Popis
Cosmos DB pro MongoDB (virtuální jádra) Modul prostředků AVM pro Cosmos DB pro MongoDB (virtuální jádra)

Definice prostředku šablony ARM

Typ prostředku mongoClusters je možné nasadit s operacemi, které cílí:

Seznam změněných vlastností v jednotlivých verzích rozhraní API najdete v protokolu změn.

Formát prostředku

Pokud chcete vytvořit prostředek Microsoft.DocumentDB/mongoClusters, přidejte do šablony následující JSON.

{
  "type": "Microsoft.DocumentDB/mongoClusters",
  "apiVersion": "2025-09-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"
    },
    "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"
  }
}

Hodnoty vlastností

Microsoft.DocumentDB/mongoClusters

Jméno Popis Hodnota
Verze rozhraní apiVersion Verze rozhraní API '2025-09-01'
identita Identity spravované služby přiřazené k tomuto prostředku. ManagedServiceIdentity
poloha Geografické umístění, ve kterém se nachází zdroj string (povinné)
Jméno Název prostředku řetězec

Omezení:
Minimální délka = 3
Maximální délka = 40
Model = ^[a-z0-9]+(-[a-z0-9]+)* (povinné)
vlastnosti Vlastnosti specifické pro prostředek pro tento prostředek. MongoClusterProperties
visačky Značky prostředků Slovník názvů a hodnot značek Viz Značky v šablonách
typ Typ prostředku Microsoft.DocumentDB/mongoClusters

Vlastnosti správce

Jméno Popis Hodnota
heslo Heslo správce. řetězec

Omezení:
Citlivá hodnota. Předejte ho jako zabezpečený parametr.
uživatelské_jméno Uživatelské jméno správce. řetězec

AuthConfigProperties

Jméno Popis Hodnota
allowedModes Povolené režimy ověřování pro přístup k datům v clusteru. Řetězcové pole obsahující některou z těchto možností:
'MicrosoftEntraID'
'NativeAuth'

Zálohováníproperties

Jméno Popis Hodnota

ComputeProperties

Jméno Popis Hodnota
přesunout do jiné vrstvy Úroveň výpočetních prostředků, která se má přiřadit ke clusteru, kde se každá vrstva mapuje na virtuální jádro a velikost paměti. Příklady hodnot: M30, M40. řetězec

CustomerManagedKeyEncryptionProperties

Jméno Popis Hodnota
keyEncryptionKeyIdentity Identita použitá pro přístup k šifrovacímu klíči klíče. KlíčováŠifrovaKlíčIdentita
keyEncryptionKeyUrl Identifikátor URI klíče trezoru klíčů použitého k šifrování. řetězec

Vlastnosti rozhraní DataApi

Jméno Popis Hodnota
režim Režim označující, jestli je pro cluster povolené rozhraní Mongo Data API. Zakázáno
Povoleno

EncryptionProperties

Jméno Popis Hodnota
customerManagedKeyEncryption Nastavení šifrování klíče spravovaného zákazníkem. Vlastnosti šifrování spravovaného klíče zákazníka

Vlastnosti vysoké dostupnosti

Jméno Popis Hodnota
Režim targetMode Cílový režim vysoké dostupnosti požadovaný pro cluster. Zakázáno
SameZone
ZoneRedundantPreferred

KeyEncryptionKeyIdentity

Jméno Popis Hodnota
Typ identity Typ identity. Podporována je pouze UserAssignedIdentity. UserAssignedIdentity
userAssignedIdentityResourceId ID prostředku identity přiřazené uživatelem. řetězec

ManagedServiceIdentity

Jméno Popis Hodnota
typ Typ identity spravované služby (kde jsou povolené typy SystemAssigned i UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (povinné)
uživatelem přiřazené identity Sada identit přiřazených uživatelem přidružená k prostředku. Klíče slovníku userAssignedIdentities budou ID prostředků ARM ve formuláři: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. Hodnoty slovníku můžou být prázdné objekty ({}) v požadavcích. UserAssignedIdentities

MongoClusterProperties

Jméno Popis Hodnota
správce Vlastnosti místního správce clusteru Mongo. správce
Konfigurace authConfig Konfigurace ověřování pro cluster. AuthConfigProperties
záloha Vlastnosti zálohování clusteru Mongo. BackupProperties
vypočítat Vlastnosti výpočetních prostředků clusteru Mongo. ComputeProperties
Režim createMode Režim vytvoření clusteru Mongo. Výchozí
"GeoReplica"
PointInTimeRestore
Replika
datové rozhraní API Vlastnosti rozhraní DATA API clusteru Mongo. dataApiProperties
šifrování Konfigurace šifrování pro cluster. Závisí na konfiguraci identity. encryptionProperties
vysoká dostupnost Vlastnosti vysoké dostupnosti clusteru Mongo. HighAvailabilityProperties
PreviewFeatures Seznam připojení privátních koncových bodů Řetězcové pole obsahující některou z těchto možností:
"GeoReplicas"
přístup k veřejné síti Určuje, jestli je pro tento cluster Mongo povolený přístup k veřejnému koncovému bodu nebo ne. Zakázáno
Povoleno
Parametry repliky Parametry pro vytvoření clusteru Mongo repliky. MongoClusterReplicaParameters
Parametry obnovení Parametry pro vytvoření clusteru Mongo k určitému bodu v čase. MongoClusterRestoreParameters
verze serveru Verze serveru Mongo DB. Výchozí hodnota je nejnovější dostupná verze, pokud není zadána. řetězec
Sharding Vlastnosti horizontálního dělení clusteru Mongo. ShardingProperties
úložiště Vlastnosti úložiště clusteru Mongo. storageProperties

Parametry repliky mongoClusteru

Jméno Popis Hodnota
sourceLocation Umístění zdrojového clusteru string (povinné)
ID zdroje ID zdrojového clusteru replikace. string (povinné)

MongoClusterRestoreParameters

Jméno Popis Hodnota
pointInTimeUTC Obnovení clusteru Mongo k určitému bodu v čase UTC řetězec
ID zdroje ID prostředku pro vyhledání zdrojového clusteru pro obnovení řetězec

Vlastnosti horizontálního dělení

Jméno Popis Hodnota
shardCount Počet horizontálních oddílů, které se mají zřídit v clusteru Int

Vlastnosti úložiště

Jméno Popis Hodnota
VelikostGb Velikost datového disku přiřazeného každému serveru. Int
typ Typ úložiště, se kterým se mají servery clusteru zřídit. "PremiumSSD"
"PremiumSSDv2"

TrackedResourceTags

Jméno Popis Hodnota

UserAssignedIdentities

Jméno Popis Hodnota

Identita přiřazená uživatelem (UserAssignedIdentity)

Jméno Popis Hodnota

Příklady použití

Definice prostředku Terraformu (poskytovatel AzAPI)

Typ prostředku mongoClusters je možné nasadit s operacemi, které cílí:

  • skupiny prostředků

Seznam změněných vlastností v jednotlivých verzích rozhraní API najdete v protokolu změn.

Formát prostředku

Pokud chcete vytvořit prostředek Microsoft.DocumentDB/mongoClusters, přidejte do šablony následující Terraform.

resource "azapi_resource" "symbolicname" {
  type = "Microsoft.DocumentDB/mongoClusters@2025-09-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"
      }
      previewFeatures = [
        "string"
      ]
      publicNetworkAccess = "string"
      replicaParameters = {
        sourceLocation = "string"
        sourceResourceId = "string"
      }
      restoreParameters = {
        pointInTimeUTC = "string"
        sourceResourceId = "string"
      }
      serverVersion = "string"
      sharding = {
        shardCount = int
      }
      storage = {
        sizeGb = int
        type = "string"
      }
    }
  }
}

Hodnoty vlastností

Microsoft.DocumentDB/mongoClusters

Jméno Popis Hodnota
identita Identity spravované služby přiřazené k tomuto prostředku. ManagedServiceIdentity
poloha Geografické umístění, ve kterém se nachází zdroj string (povinné)
Jméno Název prostředku řetězec

Omezení:
Minimální délka = 3
Maximální délka = 40
Model = ^[a-z0-9]+(-[a-z0-9]+)* (povinné)
vlastnosti Vlastnosti specifické pro prostředek pro tento prostředek. MongoClusterProperties
visačky Značky prostředků Slovník názvů a hodnot značek
typ Typ prostředku "Microsoft.DocumentDB/mongoClusters@2025-09-01"

Vlastnosti správce

Jméno Popis Hodnota
heslo Heslo správce. řetězec

Omezení:
Citlivá hodnota. Předejte ho jako zabezpečený parametr.
uživatelské_jméno Uživatelské jméno správce. řetězec

AuthConfigProperties

Jméno Popis Hodnota
allowedModes Povolené režimy ověřování pro přístup k datům v clusteru. Řetězcové pole obsahující některou z těchto možností:
'MicrosoftEntraID'
'NativeAuth'

Zálohováníproperties

Jméno Popis Hodnota

ComputeProperties

Jméno Popis Hodnota
přesunout do jiné vrstvy Úroveň výpočetních prostředků, která se má přiřadit ke clusteru, kde se každá vrstva mapuje na virtuální jádro a velikost paměti. Příklady hodnot: M30, M40. řetězec

CustomerManagedKeyEncryptionProperties

Jméno Popis Hodnota
keyEncryptionKeyIdentity Identita použitá pro přístup k šifrovacímu klíči klíče. KlíčováŠifrovaKlíčIdentita
keyEncryptionKeyUrl Identifikátor URI klíče trezoru klíčů použitého k šifrování. řetězec

Vlastnosti rozhraní DataApi

Jméno Popis Hodnota
režim Režim označující, jestli je pro cluster povolené rozhraní Mongo Data API. Zakázáno
Povoleno

EncryptionProperties

Jméno Popis Hodnota
customerManagedKeyEncryption Nastavení šifrování klíče spravovaného zákazníkem. Vlastnosti šifrování spravovaného klíče zákazníka

Vlastnosti vysoké dostupnosti

Jméno Popis Hodnota
Režim targetMode Cílový režim vysoké dostupnosti požadovaný pro cluster. Zakázáno
SameZone
ZoneRedundantPreferred

KeyEncryptionKeyIdentity

Jméno Popis Hodnota
Typ identity Typ identity. Podporována je pouze UserAssignedIdentity. UserAssignedIdentity
userAssignedIdentityResourceId ID prostředku identity přiřazené uživatelem. řetězec

ManagedServiceIdentity

Jméno Popis Hodnota
typ Typ identity spravované služby (kde jsou povolené typy SystemAssigned i UserAssigned). 'None'
'SystemAssigned'
'SystemAssigned,UserAssigned'
'UserAssigned' (povinné)
uživatelem přiřazené identity Sada identit přiřazených uživatelem přidružená k prostředku. Klíče slovníku userAssignedIdentities budou ID prostředků ARM ve formuláři: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. Hodnoty slovníku můžou být prázdné objekty ({}) v požadavcích. UserAssignedIdentities

MongoClusterProperties

Jméno Popis Hodnota
správce Vlastnosti místního správce clusteru Mongo. správce
Konfigurace authConfig Konfigurace ověřování pro cluster. AuthConfigProperties
záloha Vlastnosti zálohování clusteru Mongo. BackupProperties
vypočítat Vlastnosti výpočetních prostředků clusteru Mongo. ComputeProperties
Režim createMode Režim vytvoření clusteru Mongo. Výchozí
"GeoReplica"
PointInTimeRestore
Replika
datové rozhraní API Vlastnosti rozhraní DATA API clusteru Mongo. dataApiProperties
šifrování Konfigurace šifrování pro cluster. Závisí na konfiguraci identity. encryptionProperties
vysoká dostupnost Vlastnosti vysoké dostupnosti clusteru Mongo. HighAvailabilityProperties
PreviewFeatures Seznam připojení privátních koncových bodů Řetězcové pole obsahující některou z těchto možností:
"GeoReplicas"
přístup k veřejné síti Určuje, jestli je pro tento cluster Mongo povolený přístup k veřejnému koncovému bodu nebo ne. Zakázáno
Povoleno
Parametry repliky Parametry pro vytvoření clusteru Mongo repliky. MongoClusterReplicaParameters
Parametry obnovení Parametry pro vytvoření clusteru Mongo k určitému bodu v čase. MongoClusterRestoreParameters
verze serveru Verze serveru Mongo DB. Výchozí hodnota je nejnovější dostupná verze, pokud není zadána. řetězec
Sharding Vlastnosti horizontálního dělení clusteru Mongo. ShardingProperties
úložiště Vlastnosti úložiště clusteru Mongo. storageProperties

Parametry repliky mongoClusteru

Jméno Popis Hodnota
sourceLocation Umístění zdrojového clusteru string (povinné)
ID zdroje ID zdrojového clusteru replikace. string (povinné)

MongoClusterRestoreParameters

Jméno Popis Hodnota
pointInTimeUTC Obnovení clusteru Mongo k určitému bodu v čase UTC řetězec
ID zdroje ID prostředku pro vyhledání zdrojového clusteru pro obnovení řetězec

Vlastnosti horizontálního dělení

Jméno Popis Hodnota
shardCount Počet horizontálních oddílů, které se mají zřídit v clusteru Int

Vlastnosti úložiště

Jméno Popis Hodnota
VelikostGb Velikost datového disku přiřazeného každému serveru. Int
typ Typ úložiště, se kterým se mají servery clusteru zřídit. "PremiumSSD"
"PremiumSSDv2"

TrackedResourceTags

Jméno Popis Hodnota

UserAssignedIdentities

Jméno Popis Hodnota

Identita přiřazená uživatelem (UserAssignedIdentity)

Jméno Popis Hodnota

Příklady použití

Ukázky Terraformu

Základní příklad nasazení Azure Cosmos DB pro 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    = ["*"]
}

Ověřené moduly Azure

K nasazení tohoto typu prostředku je možné použít následující ověřené moduly Azure.

Modul Popis
Cosmos DB pro MongoDB (virtuální jádra) Modul prostředků AVM pro Cosmos DB pro MongoDB (virtuální jádra)