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

适用范围: NoSQL

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

先决条件

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

  • 如果没有 Azure 订阅,可在开始前创建一个试用帐户

应在本地计算机上安装 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     = "chinaeast"
  description = "Resource group location"
}

variable "cosmosdb_account_location" {
  type        = string
  default     = "chinaeast"
  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 登录到终端

    导出 Terraform 环境变量

     export ARM_ENVIRONMENT=china
    
     $env:ARM_ENVIRONMENT = "china"
    
  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,请继续阅读以下文章。