¿Qué son los módulos Terraform y cómo funcionan?

Muchos principiantes se saltan la configuración de módulos Terraform para facilitar el proceso de personalización. Al menos eso creen, se lo pusieron más fácil. Echemos un vistazo a qué son los módulos Terraform y cómo funcionan.







Supongo que ya conoce algunos de los conceptos básicos de Terraform e incluso ha intentado usarlo antes. De lo contrario, consulte esta descripción general de Terraform y este video tutorial antes de continuar.







Tenga en cuenta que intencionalmente no estoy usando ejemplos de código real con algunos proveedores específicos como AWS o Google para facilitar la comprensión.







Módulos terraform



Ya estás escribiendo módulos



Incluso si no está creando un módulo a propósito, si está utilizando Terraform, ya está escribiendo un módulo, un módulo llamado "raíz".







Cualquier archivo de configuración de Terraform ( .tf



) en un directorio, incluso uno, forma un módulo.







¿Qué hace un módulo?



El módulo Terraform le permite crear abstracción lógica sobre un conjunto de recursos. En otras palabras, un módulo le permite agrupar recursos y reutilizar ese grupo más tarde, posiblemente muchas veces.







Digamos que tenemos un servidor virtual con algunas características alojadas en la nube. ¿Qué conjunto de recursos puede describir este servidor? Por ejemplo:







  • ,













  • IP-,







  • ,







  • , , . .















, . . , ?







, , «» .







« » .







5 «», ( ):







module "server" {

    count         = 5

    source        = "./module_server"
    some_variable = some_value
}
      
      





Terraform "" , 0.13.







:



, , , . :







  • , (VPC)







  • (.. bucket)



















  • - ,









, : «» «» . «» :







module "server" {
    source        = "./module_server"
    some_variable = some_value
}

module "network" {  
    source              = "./module_network"
    some_other_variable = some_other_value
}
      
      





,







, «» . , , .













:













  • Terraform — , Docker,







  • Git ( GitHub/BitBucket)







  • HTTP URL- .zip









?







. , «» , «»?







.









Terraform : .







Scope ( )



, , , . , «A» «B».







, , , . , 5 «»:







module.server[0].resource_type.resource_name
module.server[1].resource_type.resource_name
module.server[2].resource_type.resource_name
...
      
      





, - count







, :







module "server-alpha" {    
    source        = "./module_server"
    some_variable = some_value
}
module "server-beta" {
    source        = "./module_server"
    some_variable = some_value
}
      
      





— ,







:







module.server-alpha.resource_type.resource_name

module.server-beta.resource_type.resource_name
      
      







, .







«» , «».













output



«» , .







«» variable



, :













output



variable



, .







— ( ) — «» , .







, «» , «» «»:



network_id = module.network.network_id
      
      





'network_id



' — ,







:







module "server" {
    count         = 5
    source        = "./module_server"
    some_variable = some_value
    network_id    = module.network.network_id
}

module "network" {  
    source              = "./module_network"
    some_other_variable = some_other_value
}
      
      





5 , .









, .







Terraform, .







HashiCorp, Terraform, : "Organize Configuration".







Además, hay un excelente tutorial completo que cubre todo, desde conceptos para principiantes hasta avanzados de Terraform: Guía de estudio - Certificación de asociado de Terraform .







La estructura modular de su código hace que su configuración sea más flexible y más fácil de entender para otros. Este último es especialmente útil para el equipo.







Si te gustó el artículo, sígueme en Twitter (@ vasylenko ), donde ocasionalmente comparto mis conclusiones y consejos sobre Terraform, AWS, Ansible y otras tecnologías relacionadas con DevOps.








All Articles