Um módulo é um contêiner para vários recursos usados juntos. Os módulos podem ser usados para criar abstrações leves, para que você possa descrever sua infraestrutura em termos de arquitetura, em vez de diretamente em termos de objetos físicos.
Os arquivos .tf em seu diretório de trabalho formam juntos o módulo raiz. Esse módulo pode chamar outros módulos e conectá-los, passando os valores de saída (outputs) de um para os valores de entrada (inputs) de outro.
Módulos reutilizáveis são definidos usando todos os mesmos conceitos de linguagem de configuração que usamos nos módulos raiz. Mais comumente, os módulos usam:
Para definir um módulo, basta criar um novo diretório para ele e coloque um ou mais arquivos .tf dentro, da mesma forma que faria em um root module.
O Terraform pode carregar módulos de forma local ou de repositórios remotos. Se um módulo for reutilizado por várias configurações, você pode colocá-lo em seu próprio repositório de controle de versão(git).
Após entender como funciona e qual a estrutura de um módulo, iremos criar um diretório chamado "modules" dentro do nosso projeto e iremos criar os seguintes arquivos:
O nosso arquivo variables.tf terá a declaração das variáveis porém sem nenhuma configuração pré ajustada:
Feito isso, já temos o nosso módulo em branco para receber as variáveis como input através do carregamento do módulo. Nosso arquivo main.tf na raiz do projeto deverá carregar o módulo e repassar as variáveis:
Dessa forma, iremos carregar o módulo "ec2" e repassaremos os valores das variáveis que o módulo espera receber, com isso conseguimos reutilizar a mesma estrutura e chamar o módulo várias vezes para aplicações diferentes, por exemplo, subir duas máquinas com configurações diferentes:
Bom, esse foi um modo rápido e simples de demostrar com criar um modulo no terraform, recurso essencial para o dia a dia, breve farei um post com usar o console do terraform para debugar e obter dados da cloud antes de aprovisionar sua infraestrutura.