Inicio rápido: Creación de una instancia con Terraform: Instancia administrada de Azure SQL
Artículo probado con las siguientes versiones de Terraform y del proveedor de Terraform:
En este artículo se muestra cómo implementar una instancia administrada de Azure SQL en una red virtual (vNet) y una subred asociada a una tabla de rutas y un grupo de seguridad de red mediante Terraform.
Terraform habilita la definición, la previsualización y la implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de nube , como Azure, y los elementos que componen la infraestructura en la nube. Después de crear los archivos de configuración, cree un plan de ejecución que le permita obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
En este artículo, aprenderá a:
- Creación de todos los servicios auxiliares para que SQL Managed Instance se ejecute en
- Implementación de SQL Managed Instance
Nota
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de de Azure Terraform. Consulte más artículos de y código de ejemplo que muestra cómo usar Terraform para administrar recursos de Azure
Prerrequisitos
- Suscripción de Azure: Si no tiene una suscripción de Azure, antes de empezar cree una cuenta gratuita .
- Una suscripción de Azure. Si no tiene una suscripción de Azure, crear una cuenta gratuita
- En general, el usuario debe tener el rol de colaborador de SQL de instancia administrada asignado en el ámbito de la suscripción.
- Si realiza el aprovisionamiento en una subred que ya está delegada a Azure SQL Managed Instance, el usuario solo necesita el permiso Microsoft.Sql/managedInstances/write asignado en el ámbito de la suscripción.
- Instalar y configurar de Terraform
Implementación del código de Terraform
Cree un directorio en el que probar y ejecutar el código de Terraform de ejemplo y convertirlo en el directorio actual.
Cree un archivo denominado
providers.tf
e inserte el código siguiente: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 } } }
Cree un archivo denominado
main.tf
e inserte el código siguiente:# 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 }
Cree un archivo denominado
variables.tf
e inserte el código siguiente: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 }
Inicialización de Terraform
Ejecute terraform init para inicializar la implementación de Terraform. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
terraform init -upgrade
Puntos Clave de :
- El parámetro
-upgrade
actualiza los complementos de proveedor necesarios a la versión más reciente que cumple con las restricciones de versión de la configuración.
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón permite comprobar si el plan de ejecución coincide con las expectativas antes de realizar cambios en los recursos reales. - El parámetro opcional
-out
permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.
terraform apply main.tfplan
Puntos clave:
- En el comando de ejemplo
terraform apply
, se asume que previamente ejecutóterraform plan -out main.tfplan
. - Si especificó otro nombre de archivo para el parámetro
-out
, use ese mismo nombre de archivo en la llamada aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Comprobación de los resultados
Para comprobar los resultados en Azure Portal, vaya al nuevo grupo de recursos. La nueva instancia estará en el nuevo grupo de recursos una vez implementado. Para ver el progreso de la implementación, mantenga abierto powerShell o vaya a Azure Portal, busque Instancia administrada de SQL y, a continuación, filtre todas las instancias por estado).
Limpieza de recursos
Cuando ya no necesite los recursos creados a través de Terraform, siga estos pasos:
Ejecute el comando terraform plan y especifique la marca
destroy
.terraform plan -destroy -out main.destroy.tfplan
Puntos Clave de :
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón permite comprobar si el plan de ejecución coincide con las expectativas antes de realizar cambios en los recursos reales. - El parámetro opcional
-out
permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
- El comando
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.destroy.tfplan
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure