IaC? - Infraestrutura como Código!

Ezequiel Santos
26/06/2022

Mas gente, porque usar e quais os benefícios?

É uma pratica DevOps utilizada em conjunto com entrega contínua e integração contínua, associada a provedores cloud onde tudo é automatizável por intermédio de APIs. Consiste no gerenciamento por modelos descritivos muitas vezes escritos em .yaml ou .json, onde cada modelo do IaC gera o mesmo ambiente toda vez que é aplicado ou seja, alcançamos a idempotência.

Digamos que temos várias squads trabalhando num projeto criando features para uma aplicação e precisam de um ambiente para testa-las individualmente, dependendo da complexibilidade do ambiente, seria trabalhoso e levaria tempo para mobilizar o time de infraestrutura que provisionaria o ambiente. Com o código abaixo, subimos:

  • Uma storage account para o frontend
  • Um App service para o backend
  • Um banco de dados PostgreSQL para persistência de dados
## Frontend
resource "azurerm_storage_account" "main" {
  name                     = "stproject${env_id}"
  resource_group_name      = var.rg_name
  location                 = var.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

## Backend
resource "azurerm_service_plan" "main" {
  name                = "asp-project-${env_id}"
  location            = var.location
  resource_group_name = var.rg_name
  os_type             = "Linux"
  sku_name            = "B1"

## Persistence
resource "azurerm_postgresql_flexible_server" "main" {
  name                   = "psql-project-${env_id}"
  resource_group_name    = var.rg_name
  location               = var.location
  version                = "12"
  administrator_login    = var.db_username
  administrator_password = var.db_password
  storage_mb             = 32768
  sku_name               = "B_Standard_B1ms"
  zone                   = 2
}

resource "azurerm_postgresql_flexible_server_database" "main" {
  name      = "db-core-${env_id}-01"
  server_id = azurerm_postgresql_flexible_server.main.id
  collation = "en_US.utf8"
  charset   = "utf8"
}

Em questão de minutos temos um ambiente pronto para a equipe trabalhar e garantimos a configuração aplicada, tamanhos de recursos compatíveis e cumprindo ~ caso tenha ~ a nomenclatura acordada internamente ou recomendada pelo provedor (mas isso é assunto para um outro post, rs)

Com um processo bem documentado qualquer alteração pode ~ e deve ~ ser feita na origem (código) para em seguida ser aplicada no destino

Ele permite que testemos aplicativos em ambientes de produção já no inicio do ciclo de desenvolvimento. Equipes que implementam o IaC fornecem ambientes estáveis rapidamente, evitando configurações manuais garantindo consitência e sincronismo dos ambientes. Outro ponto importante sobre visibilidade na administração manual é o versionando dos arquivos de configuração num repositório central ajudando como recurso de auditoria.

Ferramentas disponíveis para aplicar essa boa prática Adaptáveis à vários providers:

Próprios do Provider