O que são módulos Terraform e como eles funcionam?

Muitos iniciantes pulam a configuração dos módulos Terraform para facilitar o processo de personalização. Pelo menos eles pensam assim, eles tornaram mais fácil para eles mesmos. Vamos dar uma olhada no que são os módulos Terraform e como eles funcionam.







Presumo que você já conheça alguns dos fundamentos do Terraform e até já tenha tentado usá-lo antes. Caso contrário, confira esta visão geral do Terraform e este tutorial em vídeo antes de continuar.







Observe que, intencionalmente, não estou usando exemplos de código reais com alguns fornecedores específicos, como AWS ou Google, para facilitar o entendimento.







Módulos Terraform



Você já está escrevendo módulos



Mesmo que você não esteja criando um módulo propositalmente, se estiver usando o Terraform, já estará escrevendo um módulo - um módulo denominado "raiz".







Qualquer arquivo de configuração Terraform ( .tf



) em um diretório, mesmo um, forma um módulo.







O que um módulo faz?



O módulo Terraform permite que você crie abstrações lógicas sobre um conjunto de recursos. Em outras palavras, um módulo permite agrupar recursos e reutilizar esse grupo posteriormente, possivelmente muitas vezes.







Digamos que temos um servidor virtual com alguns recursos hospedados na nuvem. Que conjunto de recursos este servidor pode descrever? Por exemplo:







  • ,













  • 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".







Além disso, há um excelente tutorial abrangente que cobre tudo, desde conceitos iniciantes a avançados do Terraform: Guia de estudo - Certificação de associado do Terraform .







A estrutura modular de seu código torna sua configuração mais flexível e fácil de ser entendida por outros. Este último é especialmente útil para a equipe.







Se você gostou do artigo, siga- me no Twitter (@ vasylenko ), onde ocasionalmente compartilho minhas sugestões e dicas sobre Terraform, AWS, Ansible e outras tecnologias relacionadas ao DevOps.








All Articles