Поделиться через


Краткое руководство. Создание сервера и базы данных База данных SQL Azure с помощью Terraform

Применимо к:База данных SQL Azure

Создание одной базы данных — самый быстрый и простой вариант для создания базы данных в Базе данных SQL Azure. В этом кратком руководстве показано, как создать одну базу данных с помощью Terraform.

Terraform включает определение, предварительную версию и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После проверки изменений примените план выполнения для развертывания инфраструктуры.

Вы узнаете, как выполнять следующие задачи:

Необходимые компоненты

Разрешения

Для создания баз данных с помощью Transact-SQLCREATE DATABASE необходимы разрешения. Чтобы создать базу данных, имя для входа должно быть именем администратора сервера (созданное при подготовке База данных SQL Azure логического сервера), администратор Microsoft Entra сервера, член роли базы данных dbmanager в master. Дополнительные сведения см. в разделе CREATE DATABASE.

Для создания баз данных через портал Azure, PowerShell, Azure CLI или REST API необходимы разрешения Azure RBAC, в частности роли Contributor, SQL DB Contributor или SQL Server Contributor. Дополнительные сведения см. в статье о встроенных ролях Azure RBAC.

Реализация кода Terraform

Примечание.

Пример кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете просмотреть файл журнала, содержащий результаты теста из текущих и предыдущих версий Terraform.

Дополнительные статьи и пример кода, демонстрирующие использование Terraform для управления ресурсами Azure

  1. Создайте каталог для тестирования и выполнения примера кода Terraform и сделайте его текущим каталогом.

  2. Создайте файл с именем providers.tf и вставьте следующий код:

    terraform {
      required_version = ">=1.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
  3. Создайте файл с именем main.tf и вставьте следующий код:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_pet" "azurerm_mssql_server_name" {
      prefix = "sql"
    }
    
    resource "random_password" "admin_password" {
      count       = var.admin_password == null ? 1 : 0
      length      = 20
      special     = true
      min_numeric = 1
      min_upper   = 1
      min_lower   = 1
      min_special = 1
    }
    
    locals {
      admin_password = try(random_password.admin_password[0].result, var.admin_password)
    }
    
    resource "azurerm_mssql_server" "server" {
      name                         = random_pet.azurerm_mssql_server_name.id
      resource_group_name          = azurerm_resource_group.rg.name
      location                     = azurerm_resource_group.rg.location
      administrator_login          = var.admin_username
      administrator_login_password = local.admin_password
      version                      = "12.0"
    }
    
    resource "azurerm_mssql_database" "db" {
      name      = var.sql_db_name
      server_id = azurerm_mssql_server.server.id
    }
    
  4. Создайте файл с именем variables.tf и вставьте следующий код:

    variable "resource_group_location" {
      type        = string
      description = "Location for all resources."
      default     = "eastus"
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
      default     = "rg"
    }
    
    variable "sql_db_name" {
      type        = string
      description = "The name of the SQL Database."
      default     = "SampleDB"
    }
    
    variable "admin_username" {
      type        = string
      description = "The administrator username of the SQL logical server."
      default     = "azureadmin"
    }
    
    variable "admin_password" {
      type        = string
      description = "The administrator password of the SQL logical server."
      sensitive   = true
      default     = null
    }
    
  5. Создайте файл с именем outputs.tf и вставьте следующий код:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "sql_server_name" {
      value = azurerm_mssql_server.server.name
    }
    
    
    output "admin_password" {
      sensitive = true
      value     = local.admin_password
    }
    

Инициализация Terraform

Запустите terraform init , чтобы инициализировать развертывание Terraform. Эта команда скачивает поставщик Azure, необходимый для управления ресурсами Azure.

terraform init -upgrade

Ключевые моменты:

  • Параметр -upgrade обновляет необходимые подключаемые модули поставщика до последней версии, которая соответствует ограничениям версии конфигурации.

Создание плана выполнения Terraform

Выполните terraform plan, чтобы создать план исполнения.

terraform plan -out main.tfplan

Ключевые моменты:

  • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
  • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.

Применение плана выполнения Terraform

Запустите terraform apply, чтобы применить план выполнения к облачной инфраструктуре.

terraform apply main.tfplan

Ключевые моменты:

  • В примере terraform apply команды предполагается, что вы ранее выполнили.terraform plan -out main.tfplan
  • Если для параметра -out указано другое имя файла, используйте то же имя в вызове к terraform apply.
  • Если вы не использовали параметр -out, вызовите terraform apply без параметров.

Проверка результатов

  1. Получите имя группы ресурсов Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Получите новое имя логического сервера.

    sql_server_name=$(terraform output -raw sql_server_name)
    
  3. Запустите az sql db list , чтобы отобразить имена всех баз данных на сервере.

    az sql db list \
    --resource-group $resource_group_name \
    --server $sql_server_name \
    --output table
    

Очистка ресурсов

Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:

  1. Запустите terraform plan и укажите флаг destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Ключевые моменты:

    • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
    • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.
  2. Чтобы применить план выполнения, запустите terraform apply.

    terraform apply main.destroy.tfplan
    

Устранение неполадок с Terraform в Azure

Устранение распространенных проблем при использовании Terraform в Azure

Следующий шаг