Tutorial: Creación de un conjunto de escalado de máquinas virtuales de Azure a partir de una imagen personalizada de Packer mediante Terraform
Artículo
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.
Para confirmar que tiene acceso al ejecutable de Packer, ejecute el siguiente comando: packer -v.
Dependiendo del entorno, es posible que tenga que establecer la ruta de acceso y volver a abrir la línea de comandos.
Cree un grupo de recursos con az group create para que contenga la imagen de Packer.
az group create -n myPackerImages -l eastus
Ejecute az ad sp create-for-rbac para que Packer pueda autenticarse en Azure con una entidad de servicio.
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription_id> --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
Puntos clave:
Anote los valores de salida (appId, client_secret, tenant_id).
Para ver la suscripción actual de Azure, ejecute az account show.
az account show --query "{ subscription_id: id }"
Cree un archivo de variables de plantilla de Packer denominado ubuntu.pkr.hcl e inserte el código siguiente. Actualice las líneas resaltadas con la entidad de servicio y la información de la suscripción de Azure.
Cree un archivo llamado variables.tf que contenga las variables del proyecto e inserte el código siguiente:
variable "packer_resource_group_name" {
description = "Name of the resource group in which the Packer image will be created"
default = "myPackerImages"
}
variable "packer_image_name" {
description = "Name of the Packer image"
default = "myPackerImage"
}
variable "resource_group_name" {
description = "Name of the resource group in which the Packer image will be created"
default = null
}
variable "location" {
default = "eastus"
description = "Location where resources will be created"
}
variable "tags" {
description = "Map of the tags to use for the resources that are deployed"
type = map(string)
default = {
environment = "codelab"
}
}
variable "application_port" {
description = "Port that you want to expose to the external load balancer"
default = 80
}
variable "admin_user" {
description = "User name to use as the admin account on the VMs that will be part of the VM scale set"
default = "azureuser"
}
variable "admin_password" {
description = "Default password for admin account"
default = null
}
Cree un archivo llamado output.tf para especificar qué valores muestra Terraform e inserte el código siguiente:
output "vmss_public_ip_fqdn" {
value = azurerm_public_ip.vmss.fqdn
}
output "jumpbox_public_ip_fqdn" {
value = azurerm_public_ip.jumpbox.fqdn
}
output "jumpbox_public_ip" {
value = azurerm_public_ip.jumpbox.ip_address
}
4. 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.
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.
6. 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:
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.
7. Verificación de los resultados
En la salida del comando terraform apply, verá los valores de lo siguiente:
Nombre de dominio completo de la máquina virtual
Nombre de dominio completo de Jumpbox
Dirección IP de Jumpbox
Vaya a la dirección URL de la máquina virtual para confirmar una página predeterminada con el texto Welcome to nginx! (Le damos la bienvenida a nginx!).
Use SSH para conectarse a la máquina virtual de Jumpbox con el nombre de usuario definido en el archivo de variables y la contraseña que especificó cuando ejecutó terraform apply. Por ejemplo: ssh azureuser@<ip_address>.
8. Limpieza de recursos
Eliminación del conjunto de escalado de máquinas virtuales
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.
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.