다음을 통해 공유


Microsoft.DocumentDB mongoClusters 2023-09-15-미리보기

Bicep 리소스 정의

mongoClusters 리소스 종류는 다음을 대상으로 하는 작업으로 배포할 수 있습니다.

각 API 버전에서 변경된 속성 목록은 변경 로그참조하세요.

리소스 형식

Microsoft.DocumentDB/mongoClusters 리소스를 만들려면 템플릿에 다음 Bicep을 추가합니다.

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

속성 값

Microsoft.DocumentDB/mongoClusters

이름 묘사
위치 리소스가 있는 지리적 위치 string(필수)
이름 리소스 이름 문자열

제약 조건:
최소 길이 = 3
최대 길이 = 40
패턴 = ^[a-z0-9]+(-[a-z0-9]+)*(필수)
속성 mongo 클러스터의 속성입니다. MongoClusterProperties
scope 배포 범위와 다른 범위에서 리소스를 만들 때 사용합니다. 이 속성을 리소스의 기호 이름으로 설정하여 확장 리소스를 적용합니다.
태그 리소스 태그 태그 이름 및 값의 사전입니다. 템플릿 태그를 참조하세요.

MongoClusterProperties

이름 묘사
관리자로그인 mongo 클러스터에 대한 관리자의 로그인입니다. 문자열
administratorLoginPassword 관리자 로그인의 암호입니다. 문자열

제약 조건:
중요한 값입니다. 보안 매개 변수로 전달합니다.
크리에이션모드 mongo 클러스터를 만드는 모드입니다. '기본값'
'PointInTimeRestore'
'복원'
nodeGroupSpecs 클러스터의 노드 그룹 사양 목록입니다. nodeGroupSpec[]
restoreParameters 복원 작업에 사용되는 매개 변수 MongoClusterRestoreParameters
서버 버전 Mongo DB 서버 버전입니다. 지정하지 않으면 기본적으로 사용 가능한 최신 버전으로 설정됩니다. 문자열

MongoClusterRestoreParameters

이름 묘사
포인트인타임UTC MONgo 클러스터를 복원하기 위한 UTC 지정 시간 문자열
sourceResourceId 복원할 원본 클러스터를 찾는 리소스 ID 문자열

노드 그룹 사양

이름 묘사
디스크 크기GB 노드 그룹의 디스크 스토리지 크기(GB)입니다. 예제 값: 128, 256, 512, 1024. 정수 (int)
인에이블하 노드 그룹에서 고가용성을 사용할 수 있는지 여부입니다. bool
종류 노드 그룹에 배포된 노드 유형입니다. '분할'
노드 개수 노드 그룹의 노드 수입니다. 정수 (int)
SKU (재고 관리 코드) 노드 그룹의 리소스 sku입니다. 각 노드에 대해 프로비전되는 CPU 및 메모리의 크기를 정의합니다. 예제 값: 'M30', 'M40'. 문자열

TrackedResource태그

이름 묘사

사용 예제

Azure 확인된 모듈

다음 Azure 확인된 모듈 사용하여 이 리소스 유형을 배포할 수 있습니다.

모듈 묘사
Cosmos DB for MongoDB(vCore) MongoDB용 Cosmos DB용 AVM 리소스 모듈(vCore)

ARM 템플릿 리소스 정의

mongoClusters 리소스 종류는 다음을 대상으로 하는 작업으로 배포할 수 있습니다.

각 API 버전에서 변경된 속성 목록은 변경 로그참조하세요.

리소스 형식

Microsoft.DocumentDB/mongoClusters 리소스를 만들려면 템플릿에 다음 JSON을 추가합니다.

{
  "type": "Microsoft.DocumentDB/mongoClusters",
  "apiVersion": "2023-09-15-preview",
  "name": "string",
  "location": "string",
  "properties": {
    "administratorLogin": "string",
    "administratorLoginPassword": "string",
    "createMode": "string",
    "nodeGroupSpecs": [
      {
        "diskSizeGB": "int",
        "enableHa": "bool",
        "kind": "string",
        "nodeCount": "int",
        "sku": "string"
      }
    ],
    "restoreParameters": {
      "pointInTimeUTC": "string",
      "sourceResourceId": "string"
    },
    "serverVersion": "string"
  },
  "tags": {
    "{customized property}": "string"
  }
}

속성 값

Microsoft.DocumentDB/mongoClusters

이름 묘사
API버전 api 버전 '2023-09-15-미리보기'
위치 리소스가 있는 지리적 위치 string(필수)
이름 리소스 이름 문자열

제약 조건:
최소 길이 = 3
최대 길이 = 40
패턴 = ^[a-z0-9]+(-[a-z0-9]+)*(필수)
속성 mongo 클러스터의 속성입니다. MongoClusterProperties
태그 리소스 태그 태그 이름 및 값의 사전입니다. 템플릿 태그를 참조하세요.
리소스 종류 'Microsoft.DocumentDB/mongoClusters'

MongoClusterProperties

이름 묘사
관리자로그인 mongo 클러스터에 대한 관리자의 로그인입니다. 문자열
administratorLoginPassword 관리자 로그인의 암호입니다. 문자열

제약 조건:
중요한 값입니다. 보안 매개 변수로 전달합니다.
크리에이션모드 mongo 클러스터를 만드는 모드입니다. '기본값'
'PointInTimeRestore'
'복원'
nodeGroupSpecs 클러스터의 노드 그룹 사양 목록입니다. nodeGroupSpec[]
restoreParameters 복원 작업에 사용되는 매개 변수 MongoClusterRestoreParameters
서버 버전 Mongo DB 서버 버전입니다. 지정하지 않으면 기본적으로 사용 가능한 최신 버전으로 설정됩니다. 문자열

MongoClusterRestoreParameters

이름 묘사
포인트인타임UTC MONgo 클러스터를 복원하기 위한 UTC 지정 시간 문자열
sourceResourceId 복원할 원본 클러스터를 찾는 리소스 ID 문자열

노드 그룹 사양

이름 묘사
디스크 크기GB 노드 그룹의 디스크 스토리지 크기(GB)입니다. 예제 값: 128, 256, 512, 1024. 정수 (int)
인에이블하 노드 그룹에서 고가용성을 사용할 수 있는지 여부입니다. bool
종류 노드 그룹에 배포된 노드 유형입니다. '분할'
노드 개수 노드 그룹의 노드 수입니다. 정수 (int)
SKU (재고 관리 코드) 노드 그룹의 리소스 sku입니다. 각 노드에 대해 프로비전되는 CPU 및 메모리의 크기를 정의합니다. 예제 값: 'M30', 'M40'. 문자열

TrackedResource태그

이름 묘사

사용 예제

Terraform(AzAPI 공급자) 리소스 정의

mongoClusters 리소스 종류는 다음을 대상으로 하는 작업으로 배포할 수 있습니다.

각 API 버전에서 변경된 속성 목록은 변경 로그참조하세요.

리소스 형식

Microsoft.DocumentDB/mongoClusters 리소스를 만들려면 템플릿에 다음 Terraform을 추가합니다.

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

속성 값

Microsoft.DocumentDB/mongoClusters

이름 묘사
위치 리소스가 있는 지리적 위치 string(필수)
이름 리소스 이름 문자열

제약 조건:
최소 길이 = 3
최대 길이 = 40
패턴 = ^[a-z0-9]+(-[a-z0-9]+)*(필수)
parent_id 이 확장 리소스를 적용할 리소스의 ID입니다. string(필수)
속성 mongo 클러스터의 속성입니다. MongoClusterProperties
태그 리소스 태그 태그 이름 및 값의 사전입니다.
리소스 종류 "Microsoft.DocumentDB/mongoClusters@2023-09-15-preview"

MongoClusterProperties

이름 묘사
관리자로그인 mongo 클러스터에 대한 관리자의 로그인입니다. 문자열
administratorLoginPassword 관리자 로그인의 암호입니다. 문자열

제약 조건:
중요한 값입니다. 보안 매개 변수로 전달합니다.
크리에이션모드 mongo 클러스터를 만드는 모드입니다. '기본값'
'PointInTimeRestore'
'복원'
nodeGroupSpecs 클러스터의 노드 그룹 사양 목록입니다. nodeGroupSpec[]
restoreParameters 복원 작업에 사용되는 매개 변수 MongoClusterRestoreParameters
서버 버전 Mongo DB 서버 버전입니다. 지정하지 않으면 기본적으로 사용 가능한 최신 버전으로 설정됩니다. 문자열

MongoClusterRestoreParameters

이름 묘사
포인트인타임UTC MONgo 클러스터를 복원하기 위한 UTC 지정 시간 문자열
sourceResourceId 복원할 원본 클러스터를 찾는 리소스 ID 문자열

노드 그룹 사양

이름 묘사
디스크 크기GB 노드 그룹의 디스크 스토리지 크기(GB)입니다. 예제 값: 128, 256, 512, 1024. 정수 (int)
인에이블하 노드 그룹에서 고가용성을 사용할 수 있는지 여부입니다. bool
종류 노드 그룹에 배포된 노드 유형입니다. '분할'
노드 개수 노드 그룹의 노드 수입니다. 정수 (int)
SKU (재고 관리 코드) 노드 그룹의 리소스 sku입니다. 각 노드에 대해 프로비전되는 CPU 및 메모리의 크기를 정의합니다. 예제 값: 'M30', 'M40'. 문자열

TrackedResource태그

이름 묘사

사용 예제

Terraform 샘플

Azure Cosmos DB를 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    = ["*"]
}