Краткое руководство. Создание экземпляра с помощью Terraform — Управляемый экземпляр SQL Azure
Статья протестирована со следующими версиями Terraform и провайдера Terraform:
В этой статье показано, как развернуть управляемый экземпляр Azure SQL в виртуальной сети (vNet) и подсети, связанной с таблицей маршрутов и группой безопасности сети, с помощью Terraform.
Terraform включает определение, предварительный просмотр и развертывание облачной инфраструктуры. Используя Terraform, вы создаете файлы конфигурации с помощью синтаксиса HCL HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После проверки изменений примените план выполнения для развертывания инфраструктуры.
В этой статье описано, как:
- Создать все вспомогательные службы для управляемого экземпляра SQL для работы на
- Развертывание управляемого экземпляра SQL
Заметка
Пример кода в этой статье находится в репозитории Azure Terraform GitHub. Посмотрите больше статей и примеры кода, демонстрирующие использование Terraform для управления ресурсами Azure
Необходимые условия
- подписка Azure: Если у вас нет подписки Azure, создайте бесплатный аккаунт перед началом работы.
- Подписка Azure. Если у вас нет подписки Azure, создать бесплатную учетную запись
- В общем случае пользователю должна быть назначена роль участника управляемого экземпляра SQL в области подписки.
- Если в подсети, уже делегированной управляемому экземпляру Azure SQL, выполняется настройка, пользователю требуется только разрешение Microsoft.Sql/managedInstances/write, которое назначается на уровне подписки.
- Установка и настройка Terraform
Реализация кода Terraform
Создайте каталог, в котором необходимо протестировать и запустить пример кода Terraform и сделать его текущим каталогом.
Создайте файл с именем
providers.tf
и вставьте следующий код: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 } } }
Создайте файл с именем
main.tf
и вставьте следующий код:# TODO set the variables below either enter them in plain text after = sign, or change them in variables.tf # (var.xyz will take the default value from variables.tf if you don't change it) # Create resource group resource "azurerm_resource_group" "example" { name = "${random_pet.prefix.id}-rg" location = var.location } # Create security group resource "azurerm_network_security_group" "example" { name = "${random_pet.prefix.id}-nsg" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } # Create a virtual network resource "azurerm_virtual_network" "example" { name = "${random_pet.prefix.id}-vnet" resource_group_name = azurerm_resource_group.example.name address_space = ["10.0.0.0/24"] location = azurerm_resource_group.example.location } # Create a subnet resource "azurerm_subnet" "example" { name = "${random_pet.prefix.id}-subnet" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.0.0/27"] delegation { name = "managedinstancedelegation" service_delegation { name = "Microsoft.Sql/managedInstances" actions = [ "Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action" ] } } } # Associate subnet and the security group resource "azurerm_subnet_network_security_group_association" "example" { subnet_id = azurerm_subnet.example.id network_security_group_id = azurerm_network_security_group.example.id } # Create a route table resource "azurerm_route_table" "example" { name = "${random_pet.prefix.id}-rt" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name disable_bgp_route_propagation = false } # Associate subnet and the route table resource "azurerm_subnet_route_table_association" "example" { subnet_id = azurerm_subnet.example.id route_table_id = azurerm_route_table.example.id depends_on = [azurerm_subnet_network_security_group_association.example] } # Create managed instance resource "azurerm_mssql_managed_instance" "main" { name = "${random_pet.prefix.id}-mssql" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location subnet_id = azurerm_subnet.example.id administrator_login = "${replace(random_pet.prefix.id, "-", "")}admin" administrator_login_password = random_password.password.result license_type = var.license_type sku_name = var.sku_name vcores = var.vcores storage_size_in_gb = var.storage_size_in_gb depends_on = [azurerm_subnet_route_table_association.example] } resource "random_password" "password" { length = 20 min_lower = 1 min_upper = 1 min_numeric = 1 min_special = 1 special = true } resource "random_pet" "prefix" { prefix = var.prefix length = 1 }
Создайте файл с именем
variables.tf
и вставьте следующий код:variable "prefix" { type = string default = "mi" description = "Prefix of the resource name" } variable "location" { type = string description = "Enter the location where you want to deploy the resources" default = "eastus" } variable "sku_name" { type = string description = "Enter SKU" default = "GP_Gen5" } variable "license_type" { type = string description = "Enter license type" default = "BasePrice" } variable "vcores" { type = number description = "Enter number of vCores you want to deploy" default = 8 } variable "storage_size_in_gb" { type = number description = "Enter storage size in GB" default = 32 }
Инициализация 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
без параметров.
Проверка результатов
Чтобы проверить результаты на портале Azure, перейдите к новой группе ресурсов. Новый экземпляр будет находиться в новой группе ресурсов после его развертывания. Чтобы просмотреть ход развертывания, откройте PowerShell или перейдите на портал Azure, найдите управляемый экземпляр SQL и отфильтруйте все экземпляры по состоянию).
Очистка ресурсов
Если ресурсы, созданные с помощью Terraform, больше не нужны, сделайте следующее:
Запустите terraform plan , и укажите флаг
destroy
.terraform plan -destroy -out main.destroy.tfplan
ключевые моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в файлах конфигурации. Этот шаблон позволяет проверить соответствие плана выполнения ожиданиям перед внесением изменений в фактические ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
гарантирует, что проверенный план является именно тем, что применяется.
- Команда
Выполните команду terraform apply для применения плана выполнения.
terraform apply main.destroy.tfplan
Устранение неполадок Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure