你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门 - 使用 Terraform 创建 Azure Cosmos DB 数据库和容器

适用范围: NoSQL

Azure Cosmos DB 是 Microsoft 的快速 NoSQL 数据库,具有适合于任何规模的开放式 API。 使用 Azure Cosmos DB,可以快速创建和查询键/值数据库、文档数据库和图形数据库。 如果没有信用卡或 Azure 订阅,可设置免费的试用 Azure Cosmos DB 帐户。 本快速入门重点介绍通过 Terraform 进行部署以创建 Azure Cosmos 数据库的过程,以及在该数据库内创建容器的过程。 稍后你可以在该容器中存储数据。

先决条件

Azure 订阅,或免费的 Azure Cosmos DB 试用帐户

应在本地计算机上安装 Terraform。 可在此处找到安装说明。

查看 Terraform 文件

本快速入门中使用的 Terraform 文件可在 terraform 示例存储库中找到。 创建以下三个文件:providers.tf、main.tf 和 variables.tf。 变量可以在命令行中设置,也可以使用 terraforms.tfvars 文件进行设置。

提供程序 terraform 文件

terraform {
  required_version = ">= 1.0"

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0, < 4.0"
    }
    random = {
      source  = "hashicorp/random"
      version = ">= 3.0"
    }
  }
}

provider "azurerm" {
  features {}
}

主 terraform 文件

resource "azurerm_resource_group" "example" {
  name     = "${random_pet.prefix.id}-rg"
  location = var.location
}

resource "azurerm_cosmosdb_account" "example" {
  name                      = "${random_pet.prefix.id}-cosmosdb"
  location                  = var.cosmosdb_account_location
  resource_group_name       = azurerm_resource_group.example.name
  offer_type                = "Standard"
  kind                      = "GlobalDocumentDB"
  enable_automatic_failover = false
  geo_location {
    location          = var.location
    failover_priority = 0
  }
  consistency_policy {
    consistency_level       = "BoundedStaleness"
    max_interval_in_seconds = 300
    max_staleness_prefix    = 100000
  }
  depends_on = [
    azurerm_resource_group.example
  ]
}

resource "azurerm_cosmosdb_sql_database" "main" {
  name                = "${random_pet.prefix.id}-sqldb"
  resource_group_name = azurerm_resource_group.example.name
  account_name        = azurerm_cosmosdb_account.example.name
  throughput          = var.throughput
}

resource "azurerm_cosmosdb_sql_container" "example" {
  name                  = "${random_pet.prefix.id}-sql-container"
  resource_group_name   = azurerm_resource_group.example.name
  account_name          = azurerm_cosmosdb_account.example.name
  database_name         = azurerm_cosmosdb_sql_database.main.name
  partition_key_path    = "/definition/id"
  partition_key_version = 1
  throughput            = var.throughput

  indexing_policy {
    indexing_mode = "consistent"

    included_path {
      path = "/*"
    }

    included_path {
      path = "/included/?"
    }

    excluded_path {
      path = "/excluded/?"
    }
  }

  unique_key {
    paths = ["/definition/idlong", "/definition/idshort"]
  }
}

resource "random_pet" "prefix" {
  prefix = var.prefix
  length = 1
}

变量 terraform 文件

variable "prefix" {
  type        = string
  default     = "cosmosdb-manualscale"
  description = "Prefix of the resource name"
}

variable "location" {
  type        = string
  default     = "eastus"
  description = "Resource group location"
}

variable "cosmosdb_account_location" {
  type        = string
  default     = "eastus"
  description = "Cosmos db account location"
}

variable "throughput" {
  type        = number
  default     = 400
  description = "Cosmos db database throughput"
  validation {
    condition     = var.throughput >= 400 && var.throughput <= 1000000
    error_message = "Cosmos db manual throughput should be equal to or greater than 400 and less than or equal to 1000000."
  }
  validation {
    condition     = var.throughput % 100 == 0
    error_message = "Cosmos db throughput should be in increments of 100."
  }
}

主 terraform 文件中定义了三个 Cosmos DB 资源。

通过 terraform 进行部署

  1. 将 terraform 文件以 main.tf、variables.tf 和 providers.tf 名称另存到本地计算机上。
  2. 通过 Azure CLI 或 PowerShell 登录到终端
  3. 通过 Terraform 命令进行部署
    • terraform init
    • terraform plan
    • terraform apply

验证部署

使用 Azure 门户、Azure CLI 或 Azure PowerShell 列出资源组中已部署的资源。

az resource list --resource-group "your resource group name"

清理资源

如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要资源组及其资源,请使用 Azure 门户、Azure CLI 或 Azure PowerShell 将其删除。

az group delete --name "your resource group name"

后续步骤

在本快速入门中,你已使用 terraform 创建了 Azure Cosmos 帐户、数据库和容器,并验证了部署。 若要详细了解 Azure Cosmos DB 和 terraform,请继续阅读以下文章。