Condividi tramite


Avvio rapido: creare un database Azure Cosmos DB e un contenitore usando Terraform

Azure Cosmos DB è il database NoSQL veloce di Microsoft con API aperte per qualsiasi scala. È possibile usare Azure Cosmos DB per creare rapidamente database di chiavi/valori, di documenti e a grafo ed eseguire query su di essi. È possibile configurare un account Azure Cosmos DB di prova gratuito anche senza una carta di credito o una sottoscrizione di Azure. Questo argomento di avvio rapido illustra il processo di distribuzione tramite Terraform per creare un database Azure Cosmos e un contenitore al suo interno. Sarà quindi possibile archiviare dati in questo contenitore.

Prerequisiti

Una sottoscrizione di Azure o un account di prova gratuito di Azure Cosmos DB

Terraform deve essere installato nel computer locale. Le istruzioni per l'installazione sono consultabili qui.

Esaminare il file Terraform

I file Terraform usati in questa guida introduttiva sono disponibili nel repository di esempi di terraform . Creare i tre file seguenti: providers.tf, main.tf e variables.tf. Le variabili possono essere impostate nella riga di comando o in alternativa con un file terraforms.tfvars.

Parametri chiave di Terraform

La tabella seguente riepiloga le variabili critiche usate in questo argomento di avvio rapido, il relativo ambito, i vincoli e i valori di esempio.

Parametro Ambito Descrizione e vincoli Valore di esempio
prefix Denominazione Prefisso usato per tutti i nomi delle risorse. Deve essere minuscolo, alfanumerico e univoco per ogni sottoscrizione. cosmosdemo
location Gruppo di risorse Area di Azure per il gruppo di risorse. Questa posizione si applica solo al gruppo di risorse, non all'account di Cosmos DB. eastus
cosmosdb_account_location Account Cosmos DB Area di Azure per l'account Azure Cosmos DB. Questo può differire dalla posizione del gruppo di risorse. eastus
throughput Database (UR/s) Throughput allocato per il database SQL in unità di richiesta al secondo (RU/s). Deve essere compreso tra 400 e 1.000.000 UR/sec. 400

File Terraform Provider

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 {
    resource_group {
      prevent_deletion_if_contains_resources = false
    }
  }
}

File Terraform Main

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
}

Nel file Terraform principale sono definite tre risorse di Cosmos DB.

File Terraform Variables

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

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

variable "cosmosdb_account_location" {
  type        = string
  default     = "Canada Central"
  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."
  }
}

Eseguire la distribuzione tramite Terraform

  1. Salvare i file Terraform come main.tf, variables.tf e providers.tf nel computer locale.
  2. Accedere al terminale tramite l'interfaccia della riga di comando di Azure o PowerShell
  3. Eseguire la distribuzione tramite i comandi Terraform
    • terraform init
      Risultato previsto: Terraform inizializza correttamente e scarica il provider azurerm.
    • terraform plan
      Risultato previsto: L'output del piano mostra 3 per aggiungere, 0 per modificare, 0 per eliminare definitivamente.
    • terraform apply
      Risultato previsto: L'output finale include Applicazione completata! Risorse: 3 aggiunte, 0 modificate, 0 distrutte.

Convalidare la distribuzione

Usare il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell per elencare le risorse distribuite nel gruppo di risorse.

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

Risultato previsto: L'output elenca una Microsoft.DocumentDB/databaseAccounts risorsa insieme al relativo database e contenitore.

Pulire le risorse

Se hai intenzione di continuare a lavorare con le seguenti guide di avvio rapido e i tutorial, potrebbe essere utile lasciare queste risorse al loro posto. Quando non sono più necessari, usare il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell per eliminare il gruppo di risorse e le relative risorse.

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

Risultato previsto: L'interfaccia della riga di comando di Azure conferma l'eliminazione del gruppo di risorse e non la elenca più nella sottoscrizione.

Passaggi successivi

In questo argomento di avvio rapido sono stati creati un account, un database e un contenitore Azure Cosmos DB usando Terraform ed è stata convalidata la distribuzione. Per altre informazioni su Azure Cosmos DB e Terraform, continuare con gli articoli seguenti.