Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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-07-01' = {
scope: resourceSymbolicName or scope
location: 'string'
name: 'string'
properties: {
administrator: {
password: 'string'
userName: 'string'
}
backup: {}
compute: {
tier: 'string'
}
createMode: 'string'
highAvailability: {
targetMode: 'string'
}
previewFeatures: [
'string'
]
publicNetworkAccess: 'string'
replicaParameters: {
sourceLocation: 'string'
sourceResourceId: 'string'
}
restoreParameters: {
pointInTimeUTC: 'string'
sourceResourceId: 'string'
}
serverVersion: 'string'
sharding: {
shardCount: int
}
storage: {
sizeGb: int
}
}
tags: {
{customized property}: 'string'
}
}
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 |
Właściwości administratora
| Nazwa | Opis | Wartość |
|---|---|---|
| hasło | Hasło administratora. | struna Ograniczenia: Wartość wrażliwa. Przekaż jako bezpieczny parametr. |
| userName (nazwa użytkownika) | Nazwa użytkownika administratora. | ciąg |
Właściwości kopii zapasowej
| Nazwa | Opis | Wartość |
|---|
Właściwości obliczeniowe
| Nazwa | Opis | Wartość |
|---|---|---|
| warstwa | Warstwa obliczeniowa do przypisania do klastra, w której każda warstwa jest mapowana na rozmiar rdzenia wirtualnego i pamięci. Przykładowe wartości: "M30", "M40". | ciąg |
HighAvailabilityProperties (Właściwości wysokiej dostępności)
| Nazwa | Opis | Wartość |
|---|---|---|
| targetMode (tryb docelowy) | Docelowy tryb wysokiej dostępności żądany dla klastra. | "Wyłączone" "Ta sama strefa" "ZoneRedundantPreferred" |
MongoClusterProperties
| Nazwa | Opis | Wartość |
|---|---|---|
| administrator | Właściwości administratora lokalnego dla klastra mongo. | administrator |
| kopia zapasowa | Właściwości kopii zapasowej klastra mongo. | Właściwości kopii zapasowej |
| obliczanie | Właściwości obliczeniowe klastra mongo. | Właściwości obliczeniowe |
| createMode (tryb tworzenia) | Tryb tworzenia klastra mongo. | "Wartość domyślna" "GeoReplica" "PointInTimeRestore" "Replika" |
| wysoka dostępność | Właściwości wysokiej dostępności klastra mongo. | HighAvailabilityProperties (Właściwości wysokiej dostępności) |
| Funkcje w wersji zapoznawczej | Lista połączeń prywatnych punktów końcowych. | Tablica ciągów zawierająca dowolną z: "GeoReplicas" |
| dostęp do sieci publicznej | 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 |
| fragmentowanie | Właściwości fragmentowania klastra mongo. | Właściwości fragmentowania |
| magazyn | Właściwości magazynu klastra mongo. | StorageWłaściwości |
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 |
Właściwości fragmentowania
| Nazwa | Opis | Wartość |
|---|---|---|
| shardCount (liczba odłamków) | Liczba fragmentów do aprowizacji w klastrze. | Int |
Właściwości magazynu
| Nazwa | Opis | Wartość |
|---|---|---|
| rozmiarGb | Rozmiar dysku danych przypisany do każdego serwera. | Int |
Ś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-07-01",
"name": "string",
"location": "string",
"properties": {
"administrator": {
"password": "string",
"userName": "string"
},
"backup": {
},
"compute": {
"tier": "string"
},
"createMode": "string",
"highAvailability": {
"targetMode": "string"
},
"previewFeatures": [ "string" ],
"publicNetworkAccess": "string",
"replicaParameters": {
"sourceLocation": "string",
"sourceResourceId": "string"
},
"restoreParameters": {
"pointInTimeUTC": "string",
"sourceResourceId": "string"
},
"serverVersion": "string",
"sharding": {
"shardCount": "int"
},
"storage": {
"sizeGb": "int"
}
},
"tags": {
"{customized property}": "string"
}
}
Wartości właściwości
Microsoft.DocumentDB/mongoClusters
| Nazwa | Opis | Wartość |
|---|---|---|
| apiVersion (wersja interfejsu api) | Wersja interfejsu API | '2024-07-01' |
| 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" |
Właściwości administratora
| Nazwa | Opis | Wartość |
|---|---|---|
| hasło | Hasło administratora. | struna Ograniczenia: Wartość wrażliwa. Przekaż jako bezpieczny parametr. |
| userName (nazwa użytkownika) | Nazwa użytkownika administratora. | ciąg |
Właściwości kopii zapasowej
| Nazwa | Opis | Wartość |
|---|
Właściwości obliczeniowe
| Nazwa | Opis | Wartość |
|---|---|---|
| warstwa | Warstwa obliczeniowa do przypisania do klastra, w której każda warstwa jest mapowana na rozmiar rdzenia wirtualnego i pamięci. Przykładowe wartości: "M30", "M40". | ciąg |
HighAvailabilityProperties (Właściwości wysokiej dostępności)
| Nazwa | Opis | Wartość |
|---|---|---|
| targetMode (tryb docelowy) | Docelowy tryb wysokiej dostępności żądany dla klastra. | "Wyłączone" "Ta sama strefa" "ZoneRedundantPreferred" |
MongoClusterProperties
| Nazwa | Opis | Wartość |
|---|---|---|
| administrator | Właściwości administratora lokalnego dla klastra mongo. | administrator |
| kopia zapasowa | Właściwości kopii zapasowej klastra mongo. | Właściwości kopii zapasowej |
| obliczanie | Właściwości obliczeniowe klastra mongo. | Właściwości obliczeniowe |
| createMode (tryb tworzenia) | Tryb tworzenia klastra mongo. | "Wartość domyślna" "GeoReplica" "PointInTimeRestore" "Replika" |
| wysoka dostępność | Właściwości wysokiej dostępności klastra mongo. | HighAvailabilityProperties (Właściwości wysokiej dostępności) |
| Funkcje w wersji zapoznawczej | Lista połączeń prywatnych punktów końcowych. | Tablica ciągów zawierająca dowolną z: "GeoReplicas" |
| dostęp do sieci publicznej | 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 |
| fragmentowanie | Właściwości fragmentowania klastra mongo. | Właściwości fragmentowania |
| magazyn | Właściwości magazynu klastra mongo. | StorageWłaściwości |
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 |
Właściwości fragmentowania
| Nazwa | Opis | Wartość |
|---|---|---|
| shardCount (liczba odłamków) | Liczba fragmentów do aprowizacji w klastrze. | Int |
Właściwości magazynu
| Nazwa | Opis | Wartość |
|---|---|---|
| rozmiarGb | Rozmiar dysku danych przypisany do każdego serwera. | Int |
Ś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-07-01"
name = "string"
parent_id = "string"
location = "string"
tags = {
{customized property} = "string"
}
body = {
properties = {
administrator = {
password = "string"
userName = "string"
}
backup = {
}
compute = {
tier = "string"
}
createMode = "string"
highAvailability = {
targetMode = "string"
}
previewFeatures = [
"string"
]
publicNetworkAccess = "string"
replicaParameters = {
sourceLocation = "string"
sourceResourceId = "string"
}
restoreParameters = {
pointInTimeUTC = "string"
sourceResourceId = "string"
}
serverVersion = "string"
sharding = {
shardCount = int
}
storage = {
sizeGb = int
}
}
}
}
Wartości właściwości
Microsoft.DocumentDB/mongoClusters
Właściwości administratora
| Nazwa | Opis | Wartość |
|---|---|---|
| hasło | Hasło administratora. | struna Ograniczenia: Wartość wrażliwa. Przekaż jako bezpieczny parametr. |
| userName (nazwa użytkownika) | Nazwa użytkownika administratora. | ciąg |
Właściwości kopii zapasowej
| Nazwa | Opis | Wartość |
|---|
Właściwości obliczeniowe
| Nazwa | Opis | Wartość |
|---|---|---|
| warstwa | Warstwa obliczeniowa do przypisania do klastra, w której każda warstwa jest mapowana na rozmiar rdzenia wirtualnego i pamięci. Przykładowe wartości: "M30", "M40". | ciąg |
HighAvailabilityProperties (Właściwości wysokiej dostępności)
| Nazwa | Opis | Wartość |
|---|---|---|
| targetMode (tryb docelowy) | Docelowy tryb wysokiej dostępności żądany dla klastra. | "Wyłączone" "Ta sama strefa" "ZoneRedundantPreferred" |
MongoClusterProperties
| Nazwa | Opis | Wartość |
|---|---|---|
| administrator | Właściwości administratora lokalnego dla klastra mongo. | administrator |
| kopia zapasowa | Właściwości kopii zapasowej klastra mongo. | Właściwości kopii zapasowej |
| obliczanie | Właściwości obliczeniowe klastra mongo. | Właściwości obliczeniowe |
| createMode (tryb tworzenia) | Tryb tworzenia klastra mongo. | "Wartość domyślna" "GeoReplica" "PointInTimeRestore" "Replika" |
| wysoka dostępność | Właściwości wysokiej dostępności klastra mongo. | HighAvailabilityProperties (Właściwości wysokiej dostępności) |
| Funkcje w wersji zapoznawczej | Lista połączeń prywatnych punktów końcowych. | Tablica ciągów zawierająca dowolną z: "GeoReplicas" |
| dostęp do sieci publicznej | 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 |
| fragmentowanie | Właściwości fragmentowania klastra mongo. | Właściwości fragmentowania |
| magazyn | Właściwości magazynu klastra mongo. | StorageWłaściwości |
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 |
Właściwości fragmentowania
| Nazwa | Opis | Wartość |
|---|---|---|
| shardCount (liczba odłamków) | Liczba fragmentów do aprowizacji w klastrze. | Int |
Właściwości magazynu
| Nazwa | Opis | Wartość |
|---|---|---|
| rozmiarGb | Rozmiar dysku danych przypisany do każdego serwera. | Int |
Ś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 = ["*"]
}