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.