¿Qué es Terraform?
Terraform se puede usar para el aprovisionamiento de recursos. Quiere obtener más información sobre los módulos de Terraform para que pueda tomar una decisión informada sobre qué lenguaje usar.
En esta unidad se trata el lenguaje Terraform y las ventajas que aporta en la creación de módulos.
Lenguaje de Terraform: HashiCorp Configuration Language (HCL)
El idioma que utiliza Terraform se denomina HashiCorp Configuration Language, que se suele abreviar como HCL. El lenguaje HCL se usa en otras herramientas de HashiCorp, como Packer, pero se conoce más ampliamente como el lenguaje de Terraform.
El lenguaje HCL se usa para implementar de forma declarativa los recursos de Azure. HCL es un lenguaje específico de dominio. Un lenguaje específico del dominio está diseñado para un escenario o dominio específico. HCL no está pensado para usarse como lenguaje de programación estándar para escribir aplicaciones. HCL solo se usa para crear módulos de Terraform. Terraform está pensado para ser fácil de entender y de aprender, independientemente de la experiencia que se tenga con otros lenguajes de programación. En los módulos de Terraform se pueden especificar cualquier tipo de recurso y propiedades de Azure.
Nota:
Si ya ha visto el uso de plantillas ARM, se habrá dado cuenta de que Terraform simplifica la experiencia de creación de plantillas. Proporciona una sintaxis que es más fácil de entender, una mejor compatibilidad con la modularidad y el código reutilizable, y una seguridad de tipos mejorada. La creación de una plantilla de ARM JSON requiere expresiones complicadas y el resultado final podría ser detallado.
Ventajas de Terraform
Terraform proporciona muchas mejoras sobre la creación de plantillas de ARM, entre las que se incluyen:
Sintaxis más sencilla: Terraform proporciona una sintaxis más sencilla para escribir módulos. Puede hacer referencia a parámetros y variables directamente, sin usar funciones complicadas. La interpolación de cadenas se usa en lugar de la concatenación para combinar valores para nombres y otros elementos. Puede hacer referencia a las propiedades de un recurso directamente mediante su nombre simbólico en lugar de instrucciones de referencia complejas.
Módulos: puede dividir implementaciones complejas en submódulos más pequeños y hacer referencia a ellas en un módulo raíz. Estos módulos proporcionan una administración más sencilla y una mayor capacidad de uso. Incluso puede compartir sus módulos con su equipo o públicamente.
Administración automática de dependencias: en la mayoría de las situaciones, Terraform detecta automáticamente las dependencias entre los recursos. Este proceso elimina una parte del trabajo que hay que realizar al crear plantillas.
Validación de tipos e IntelliSense: las extensiones de Terraform para Visual Studio Code incluyen validación enriquecida e IntelliSense para todos los tipos de recursos de Azure. Esta característica ayuda a proporcionar una experiencia de creación más sencilla.
Consulte el ejemplo siguiente de un módulo de Terraform que define una cuenta de almacenamiento de Azure. El nombre de la cuenta de almacenamiento se genera automáticamente en el módulo. Después de la implementación, el identificador de recurso se devuelve como salida al usuario que ejecuta el módulo.
variable "name_prefix" {
type = string
default = "storage"
}
locals {
storage_account_name = "${var.name_prefix}${random_id.random_suffix.hex}"
storage_account_replication_type = "RAGRS"
}
resource "random_id" "random_suffix" {
byte_length = 4
}
resource "azurerm_resource_group" "example" {
name = "storage-resource-group"
location = "eastus"
}
resource "azurerm_storage_account" "example" {
name = local.storage_account_name
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
sku = "Standard"
account_replication_type = local.storage_account_replication_type
account_kind = "StorageV2"
access_tier = "Hot"
enable_https_traffic_only = true
}
output "storage_account_resource_id" {
value = azurerm_storage_account.example.id
}