Guia de Configuração de Infraestrutura como Código (IaC)
A Infraestrutura como Código (IaC) revolucionou a forma como gerenciamos e provisionamos recursos de computação. Em vez de configurações manuais, usamos código para definir nosso ambiente, garantindo consistência, escalabilidade e reprodutibilidade. Este guia fornece modelos essenciais para as ferramentas de IaC mais populares: Terraform, Ansible, Vagrant e Pulumi.
1. Modelos de Configuração do Terraform
O Terraform é o padrão da indústria para o provisionamento de infraestrutura em nuvem. Ele usa HCL (HashiCorp Configuration Language) para definir recursos.
Modelo main.tf do Terraform
O arquivo main.tf é onde você define seus recursos principais. Um terraform main.tf template típico inclui blocos de recursos para instâncias, redes e armazenamento.
# exemplo de modelo terraform main.tf
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "Web-Server-01"
}
}
resource "aws_vpc" "main_vpc" {
cidr_block = "10.0.0.0/16"
}
Configuração do Provedor (Provider Config)
O bloco terraform provider config informa ao Terraform qual provedor de nuvem (AWS, Azure, GCP, etc.) usar e como se autenticar.
# configuração do provedor terraform
provider "aws" {
region = "us-east-1"
# A autenticação é geralmente tratada via variáveis de ambiente ou perfil da AWS CLI
}
provider "google" {
project = "meu-projeto-id"
region = "us-central1"
}
Configuração do Backend do Terraform
A terraform backend config determina onde o Terraform armazena seu arquivo de estado (state file). O uso de um backend remoto como S3 ou GCS é crítico para a colaboração em equipe.
# configuração do backend terraform
terraform {
backend "s3" {
bucket = "meu-terraform-state-bucket"
key = "prod/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
2. Ansible Playbooks e Inventário
Enquanto o Terraform provisiona a infraestrutura, o Ansible se destaca no gerenciamento de configuração e implantação de aplicativos.
Modelo de Playbook do Ansible
Um ansible playbook template define as tarefas a serem executadas em um conjunto de hosts.
---
# modelo de playbook ansible
- name: Configurar Servidores Web
hosts: webservers
become: yes
tasks:
- name: Garantir que o Apache esteja instalado
apt:
name: apache2
state: present
- name: Iniciar serviço Apache
service:
name: apache2
state: started
enabled: yes
- name: Copiar index.html
copy:
src: files/index.html
dest: /var/www/html/index.html
Arquivo de Inventário do Ansible
O ansible inventory file lista os hosts e grupos de hosts que o Ansible gerencia.
# arquivo de inventário ansible (formato INI)
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
db.example.com ansible_user=admin
[all:vars]
ansible_python_interpreter=/usr/bin/python3
3. Configuração do Vagrant e Pulumi
Para desenvolvimento local e IaC programático moderno, Vagrant e Pulumi são essenciais.
Modelo e Exemplo de Vagrantfile
Um Vagrantfile template é usado para definir e configurar ambientes de desenvolvimento virtuais.
# exemplo de Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Configuração do Pulumi (Pulumi Config)
A Pulumi config permite gerenciar a infraestrutura usando linguagens de programação familiares como TypeScript, Python ou Go.
// exemplo de configuração do Pulumi (TypeScript)
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const size = "t2.micro";
const ami = aws.ec2.getAmi({
filters: [{ name: "name", values: ["amzn-ami-hvm-*"] }],
owners: ["137112412989"], // ID do proprietário para Amazon Linux
mostRecent: true,
}).then(ami => ami.id);
const server = new aws.ec2.Instance("web-server", {
instanceType: size,
ami: ami,
});
export const publicIp = server.publicIp;
4. Perguntas Frequentes (FAQ)
P: Por que recebo o erro "provider configuration not found" no Terraform?
R: Isso geralmente acontece se você não executou terraform init após adicionar um novo provedor, ou se o bloco do provedor está faltando nos seus arquivos .tf. Certifique-se de ter o bloco required_providers se estiver usando versões específicas.
P: Como corrijo erros "ansible unreachable"?
R: Verifique seu ansible inventory file para garantir que os endereços IP/hostnames estejam corretos. Verifique a conectividade SSH manualmente e garanta que sua chave SSH foi adicionada ao agente ou especificada no inventário.
P: Qual é a diferença entre Terraform e Pulumi?
R: O Terraform usa HCL, uma linguagem específica de domínio, enquanto o Pulumi usa linguagens de programação padrão. O Pulumi oferece mais flexibilidade para lógica complexa, mas o Terraform possui um ecossistema e uma comunidade maiores.
P: Quando devo usar o Vagrant?
R: Use o Vagrant quando precisar de um ambiente de desenvolvimento local consistente e reproduzível que imite sua configuração de produção (por exemplo, usando VMs em seu laptop).
Conclusão
Dominar os modelos de configuração de IaC é fundamental para construir infraestruturas modernas e resilientes. Esteja você usando o Terraform para provisionamento, o Ansible para configuração ou o Pulumi para gerenciamento de nuvem orientado por código, esses modelos fornecem um ponto de partida sólido para sua jornada DevOps.
Precisa de ajuda para formatar seus arquivos JSON ou YAML? Visite o Tool3M para uma coleção de poderosas ferramentas para desenvolvedores.