Migración a La Cumbre de innovación:
Obtenga información sobre cómo migrar y modernizar a Azure puede aumentar el rendimiento, la resistencia y la seguridad de su empresa, lo que le permite adoptar completamente la inteligencia artificial.Regístrese ahora
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Inicio rápido: uso de Terraform para crear una máquina virtual Linux
Artículo
Se aplica a: ✔️ Máquinas virtuales Linux
Artículo probado con las siguientes versiones del proveedor de AzureRM y Terraform:
En este artículo se muestra cómo crear un entorno completo de Linux y recursos de apoyo con Terraform. Estos recursos incluyen una red virtual, una subred, una dirección IP pública, etc.
Terraform habilita la definición, vista previa e 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 la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite 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:
Cree un valor aleatorio para el nombre del grupo de recursos de Azure mediante random_pet.
Cree un archivo denominado main.tf e inserte el siguiente código:
Terraform
resource"random_pet""rg_name" {
prefix = var.resource_group_name_prefix
}
resource"azurerm_resource_group""rg" {
location = var.resource_group_location
name = random_pet.rg_name.id
}
# Create virtual networkresource"azurerm_virtual_network""my_terraform_network" {
name = "myVnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
}
# Create subnetresource"azurerm_subnet""my_terraform_subnet" {
name = "mySubnet"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.my_terraform_network.name
address_prefixes = ["10.0.1.0/24"]
}
# Create public IPsresource"azurerm_public_ip""my_terraform_public_ip" {
name = "myPublicIP"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
allocation_method = "Dynamic"
}
# Create Network Security Group and ruleresource"azurerm_network_security_group""my_terraform_nsg" {
name = "myNetworkSecurityGroup"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
# Create network interfaceresource"azurerm_network_interface""my_terraform_nic" {
name = "myNIC"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
name = "my_nic_configuration"
subnet_id = azurerm_subnet.my_terraform_subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.my_terraform_public_ip.id
}
}
# Connect the security group to the network interfaceresource"azurerm_network_interface_security_group_association""example" {
network_interface_id = azurerm_network_interface.my_terraform_nic.id
network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id
}
# Generate random text for a unique storage account nameresource"random_id""random_id" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = azurerm_resource_group.rg.name
}
byte_length = 8
}
# Create storage account for boot diagnosticsresource"azurerm_storage_account""my_storage_account" {
name = "diag${random_id.random_id.hex}"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
account_tier = "Standard"
account_replication_type = "LRS"
}
# Create virtual machineresource"azurerm_linux_virtual_machine""my_terraform_vm" {
name = "myVM"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
size = "Standard_DS1_v2"
os_disk {
name = "myOsDisk"
caching = "ReadWrite"
storage_account_type = "Premium_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts-gen2"
version = "latest"
}
computer_name = "hostname"
admin_username = var.username
admin_ssh_key {
username = var.username
public_key = azapi_resource_action.ssh_public_key_gen.output.publicKey
}
boot_diagnostics {
storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
}
}
Cree un archivo denominado variables.tf e inserte el siguiente código:
Terraform
variable"resource_group_location" {
type = string
default = "eastus"
description = "Location of the resource group."
}
variable"resource_group_name_prefix" {
type = string
default = "rg"
description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
}
variable"username" {
type = string
description = "The username for the local account that will be created on the new VM."
default = "azureadmin"
}
Cree un archivo denominado outputs.tf e inserte el siguiente código:
Terraform
output"resource_group_name" {
value = azurerm_resource_group.rg.name
}
output"public_ip_address" {
value = azurerm_linux_virtual_machine.my_terraform_vm.public_ip_address
}
Inicialización de Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
Consola
terraform init -upgrade
Puntos clave:
El parámetro -upgrade actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.
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 le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
El parámetro -out opcional 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.
Consola
terraform apply main.tfplan
Puntos clave:
El comando terraform apply de ejemplo asume que ejecutó terraform plan -out main.tfplan previamente.
Si especificó un nombre de archivo diferente para el parámetro -out, use ese mismo nombre de archivo en la llamada a terraform apply.
Si no ha utilizado el parámetro -out, llame a terraform apply sin ningún parámetro.
La información de costos no se presenta durante el proceso de creación de máquinas virtuales para Terraform, como sucede con Azure Portal. Si quiere obtener más información acerca de cómo funciona el costo de las máquinas virtuales, consulte la página Información general sobre la optimización de costos.
Ejecute Get-AzVm para mostrar los nombres de todas las máquinas virtuales del grupo de recursos.
Azure PowerShell
Get-AzVm -ResourceGroupName$resource_group_name
Limpieza de recursos
Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:
Ejecute el comando terraform plan y especifique la marca destroy.
Consola
terraform plan -destroy -out main.destroy.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 le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
El parámetro -out opcional 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.
En este inicio rápido ha implementado una máquina virtual simple mediante Terraform. Para más información acerca de las máquinas virtuales de Azure, continúe con el tutorial de máquinas virtuales Linux.