Entenda o Terraform e como ele se encaixa na Infraestrutura Ágil

Entenda o Terraform e como ele se encaixa na Infraestrutura Ágil

Antes de entendermos como o Terraform funciona na prática é necessário compreendermos do que se trata a infraestrutura ágil e onde o Terraform se encaixa.

Infraestrutura Ágil

Infraestrutura ágil é o pilar de operação que viabiliza a adoção de cultura DevOps em uma empresa. O DevOps tem um escopo muito maior, pois visa a união de Desenvolvedores e SysAdmins, enquanto a infraestrutura ágil é um movimento que visa tornar a infraestrutura automatizada, orquestrada, versionada, monitorada, sendo tudo provisionado como código. Desta forma torna-se possível falar sobre DevOps.

Para entendermos sobre infraestrutura ágil precisamos compreender os 5 tipos de ferramentas:

Ferramentas de controle de versão são ferramentas que registram as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo, de forma que você possa recuperar versões específicas. Algumas delas são: git, subversion, mercurial, performace.

Ferramentas de gerenciamento de configuração servem para assegurar que os sistemas são como deveriam ser e estão em conformidade com os requisitos, ou seja, controlam o estado de um sistema, ajudam a centralizar as configurações, facilita a administração e a criação de novos ambientes, como também verifica continuamente se alterações de configurações de sistemas são adequadamente válidas. Algumas delas são: Puppet, Ansible, Chef e Salt.

Integração Contínua (CI) é a prática de desenvolvimento de software que objetiva tornar a entrega do código mais eficiente, através de builds automatizadas e, execução de tarefas definidas previamente como, por exemplo, testes automatizados. Jenkins, TeamCity, Go etc, são algumas das ferramentas CI/CD disponíveis no mercado.

Orquestradores são ferramentas que nos permitem controlar instâncias/nodes de nosso parque em tempo real e a executar comandos. São exemplos de ferramentas de orquestração: Fabric, Capistano, Func e Mcollective.

E por último as ferramentas de bootstrapping, objeto deste post, aquelas ferramentas que nos ajudam a instalar um sistema operacional, a criar uma infraestrutura, seja máquinas físicas ou virtuais, ou até uma instância em cloud.

Terraform

Se compararmos o Puppet com o Terraform, o Terraform é responsável por criar a infraestrutura que o Puppet irá gerenciar e o Puppet é responsável por gerenciar uma infraestrutura que já existe.

O Terraform é uma ferramenta opensource desenvolvida pela Hashicorp em 2014 pelo próprio Mitchell Hashimoto, a ferramenta é focada em provisionar infraestrutura e bootstrapping, possui uma linguagem própria chamada HCL – Hashicorp Configuration Language, e opcionalmente pode ser usado JSON.

O Terrraform possui diversos Providers, segue alguns bem populares: AWS, DigitalOcean, GCE e Azure, VMWare.

Apesar de ser considerado MultiCloud o Terraform não abstrai a infraestrutura, ou seja, um arquivo Terraform que provisiona uma instância na Azure é diferente de um arquivo que provisiona uma máquina na AWS por exemplo. Este conceito pode parecer que dificulta a coisa, mas na verdade, facilita pois quanto maior a abstração maior a complexidade.

Os arquivos de configuração são em formato texto que devem ser salvos em “.tf” para serem interpretados pelo Terraform que possui um formato específico da linguagem HCL.

Antes de aplicar qualquer configuração é executado uma plano de execução que relaciona o que será feito caso seja aplicado o Terraform.

Arquitetura

Para demonstrar o funcionamento do Terraform será realizado o provisionamento de 9 máquinas virtuais no VMWare vSphere, essas máquinas serão utilizadas para criar o ambiente de homologação do OKD 3.11. Segue a baixo informações da arquitetura necessária:

Arquitetura

HostnameIP AddressProcMemDisk
infra10.4.250.25816GB60GB,20GB e 80GB
master110.4.250.26816GB60GB,20GB e 80GB
master210.4.250.27816GB60GB,20GB e 80GB
master310.4.250.28816GB60GB,20GB e 80GB
node110.4.250.29816GB60GB,20GB e 80GB
node210.4.250.30816GB60GB,20GB e 80GB
node310.4.250.31816GB60GB,20GB e 80GB
node410.4.250.32816GB60GB,20GB e 80GB
lb110.4.250.33816GB60GB,20GB e 80GB
lb210.4.250.35816GB60GB,20GB e 80GB

Instalação Terraform

Baixar Pacote
$ wget https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_linux_amd64.zip
Descompactar Pacote
$ unzip ./terraform_0.11.13_linux_amd64.zip -d /usr/local/bin
Clonar Repositório
$ git clone https://github.com/alexandrecarvalhosilva/terraform_provider-vSphere.git
$ cd ./terraform_provider-vSphere

Editar Arquivos de Configuração do Terraform

Declarar variáveis, editar variables.tf
$ vim variables.tf

Neste arquivo são declarados as variáveis que serão utilizadas pelo Terraform e quais são os tipos de variáveis, neste exemplo utilizamos variáveis do tipo string,list e number.

Atribuir valores as variáveis declaradas, editar terraform.tfvars
$ vim terraform.tfvars

O arquivo terraform.tfvars tem a função de atribuir valores às variáveis declaradas no arquivo variables.tf, com esta separação em arquivos diferentes viabiliza a execução de diferentes planos de provisionamentos. Exemplo:

$ terraform apply -var-file="outro.tfvars"
Criar resource e definir configurações, editar main.tf
$ vim main.tf

É no aquivo main.tf que é instanciado o provider do vSphere e aplicado as configurações de acesso ao mesmo. Neste mesmo arquivo é realizado o clone do templete e aplicado as configurações específicas a cada host.

 

Executando o Terraform

O primeiro comando a ser executado para uma nova configuração é o “terraform init” que inicializa várias configurações e dados locais que serão usados pelos comandos subsequentes. O Terraform usa uma arquitetura baseada em plugins para suportar os inúmeros fornecedores de infraestrutura e serviços disponíveis. Cada “Provider” é um binário encapsulado e distribuído separadamente pelo próprio Terraform. O Comando “init” irá baixar e instalar automaticamente qualquer binário Provider.

Iniciar Terraform
$ terraform init

Para verificar se existe algum erro de sintaxe nos arquivos de configuração e também validar quais as configurações que serão aplicadas é executado o comando “plan“.

$ terraform plan
...
Plan: 3 to add, 0 to change, 0 to destroy.

Warning: Value for undeclared variable

 on terraform.tfvars line 1:
 1: vphere_server = "vcenter.cjf.local"

The root module does not declare a variable named "vphere_server". To use this
value, add a "variable" block to the configuration.

Using a variables file to set an undeclared variable is deprecated and will
become an error in a future release. If you wish to provide certain "global"
settings to all configurations in your organization, use TF_VAR_...
environment variables to set these instead.


------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if

O comando apply aplica as configurações e clona as máquinas virtuais com as customizações específicas de cada host.

$ terraform apply
  + disk {
      + attach           = false
      + datastore_id     = "<computed>"
      + device_address   = (known after apply)
      + disk_mode        = "persistent"
      + disk_sharing     = "sharingNone"
      + eagerly_scrub    = false
      + io_limit         = -1
      + io_reservation   = 0
      + io_share_count   = 0
      + io_share_level   = "normal"
      + keep_on_remove   = false
      + key              = 0
      + label            = "disck2"
      + path             = (known after apply)
      + size             = 80
      + thin_provisioned = true
      + unit_number      = 2
      + uuid             = (known after apply)
      + write_through    = false
    }

  + network_interface {
      + adapter_type          = "vmxnet3"
      + bandwidth_limit       = -1
      + bandwidth_reservation = 0
      + bandwidth_share_count = (known after apply)
      + bandwidth_share_level = "normal"
      + device_address        = (known after apply)
      + key                   = (known after apply)
      + mac_address           = (known after apply)
      + network_id            = "dvportgroup-114527"
    }
}

Plan: 3 to add, 0 to change, 0 to destroy.

Do you want to perform these actions? Terraform will perform the actions described above. Only ‘yes’ will be accepted to approve.

Enter a value: yes

Digite yes para prosseguir com o provisionamento dos hosts.

Antes de executar terraform apply

Antes

Depois de executar terraform apply

Depois

Remover máquinas Virtuais
$ terraform destroy

O comando destroy remove todas as máquinas que foram criadas no vSphere.

 

Conclusão

O Terraform é mais um exemplo de ferramenta que possibilita termos uma infraestrutura como código (IaC), como vimos neste exemplo prático, é possível escrever o código em uma linguagem simples. A ferramenta ainda possui uma documentação muito boa e detalhado, o que fez com que fosse amplamente utilizada pela comunidade. A utilização do Terraform como provisionador permite realizar alterações complexas na infraestrutura com o mínimo de interação humana. Com os planos de execução você sabe exatamente o que o Terraform mudará e em que ordem, evitando muitos possíveis erros humanos.

Anterior Participe do Security Day na FATEC e aprimore seus conhecimentos em segurança da informação
Próxima Dicas para Reduzir o Tamanho das Imagens do Docker e Melhorar seu Desempenho

About author

Você pode gostar também

Infraestrutura TI

Como implementar a funcionalidade de autocompletar com Elasticsearch

A função de autocompletar presente na maioria das plataformas que utilizamos no dia a dia, como serviços de busca, plataformas de streaming e lojas online, já se provou uma excelente

DevOps

Da Infraestrutura Microsoft ao Mundo Open Source: A Jornada DevOps

Um marco importante na vida de um profissional de infraestrutura de TI é quando ele reconhece que as áreas de desenvolvimento e infraestrutura devem andar em conjunto como um só.

Desenvolvimento

Por que aprender Python? Descubra os motivos e vantagens

Dizem que se alguém quer trabalhar no Google, o caminho mais simples é aprender Python. Será este o único motivo? De fato, a linguagem Python é intensivamente usada pelo Google.