Automação de infraestrutura: o que é e como começar

Automação de infraestrutura: o que é e como começar

A automação de infraestrutura é o uso de tecnologia para executar tarefas com pouca ou nenhuma intervenção humana para controlar os componentes de armazenamento de dados, sistema operacional, rede, software e hardware para fornecer soluções e serviços de TI. A automação de infraestrutura pode trazer vários benefícios para as organizações de TI, como:

  • Aumentar a eficiência e a produtividade das equipes de TI, reduzindo o tempo e o esforço necessários para realizar tarefas repetitivas e manuais.
  • Melhorar a qualidade e a consistência dos serviços de TI, evitando erros humanos e garantindo o cumprimento de padrões e políticas.
  • Acelerar a entrega e a implantação de aplicações, facilitando a integração, a entrega e a implantação contínuas (CI/CD).
  • Escalar a infraestrutura de acordo com a demanda, otimizando o uso dos recursos e reduzindo os custos.

Neste artigo, vamos explicar o que é automação de infraestrutura, quais são os principais tipos e ferramentas de automação e como começar a automatizar sua infraestrutura de TI.

O que é automação de infraestrutura?

A automação de infraestrutura é o processo de usar software para definir, configurar, gerenciar e monitorar os componentes da infraestrutura de TI. A infraestrutura de TI são os componentes necessários para executar e gerenciar os ambientes de TI empresarial. Eles incluem armazenamento de dados, sistemas operacionais, rede, software e hardware.

A automação de infraestrutura pode ser aplicada em diferentes níveis e abordagens, dependendo do objetivo e do escopo da automação. Algumas das principais abordagens são:

  • Automatizar a configuração das máquinas virtuais (VMs) ou dos contêineres: consiste em usar ferramentas que permitem definir as configurações desejadas dos sistemas operacionais e dos softwares instalados nas VMs ou nos contêineres. Essas ferramentas podem aplicar as configurações automaticamente sempre que uma nova VM ou um novo contêiner é criado ou modificado. Alguns exemplos dessas ferramentas são Ansible, Chef, Puppet e cloud-init.
  • Automatizar o gerenciamento da infraestrutura: consiste em usar ferramentas que permitem definir a infraestrutura como código (IaC), ou seja, descrever os recursos da infraestrutura (como redes, VMs, contêineres, bancos de dados etc.) em arquivos de texto que podem ser versionados e executados para criar ou alterar a infraestrutura. Essas ferramentas podem facilitar o provisionamento, a atualização e a remoção dos recursos da infraestrutura. Alguns exemplos dessas ferramentas são Terraform, Packer e Azure Resource Manager.
  • Automatizar a entrega e a implantação das aplicações: consiste em usar ferramentas que permitem automatizar o processo de construir, testar, empacotar e implantar as aplicações nos ambientes de desenvolvimento, teste ou produção. Essas ferramentas podem integrar-se com as ferramentas de configuração e gerenciamento da infraestrutura para garantir que as aplicações sejam implantadas na infraestrutura adequada. Alguns exemplos dessas ferramentas são Azure DevOps Services, Jenkins e GitHub Actions.

Como começar a automatizar sua infraestrutura?

Para começar a automatizar sua infraestrutura de TI, você precisa seguir alguns passos básicos:

  • Definir o objetivo e o escopo da automação: você precisa identificar qual é o problema ou a oportunidade que você quer resolver ou aproveitar com a automação. Por exemplo, você pode querer automatizar o provisionamento das VMs para reduzir o tempo de implantação das aplicações ou automatizar os testes das aplicações para aumentar a qualidade do código. Você também precisa definir qual é o escopo da automação, ou seja, quais são os componentes da infraestrutura que você quer automatizar e quais são os processos envolvidos na automação.
  • Escolher as ferramentas adequadas para a automação: você precisa pesquisar quais são as ferramentas disponíveis no mercado que atendem às suas necessidades e requisitos. Você pode levar em conta fatores como custo, compatibilidade, facilidade de uso, suporte técnico etc. Você também pode comparar as vantagens e desvantagens das diferentes ferramentas para tomar uma decisão informada.
  • Implementar a automação: você precisa instalar e configurar as ferramentas escolhidas na sua infraestrutura. Você também precisa criar os arquivos ou scripts que definem as configurações ou os recursos da sua infraestrutura. Você pode usar uma linguagem específica da ferramenta ou uma linguagem genérica como Python ou PowerShell. Você também precisa testar se a automação funciona conforme esperado antes de colocá-la em produção.
  • Monitorar e melhorar a automação: você precisa acompanhar o desempenho e os resultados da sua automação. Você pode usar ferramentas de monitoramento ou análise para coletar dados sobre o tempo, o custo, a qualidades da sua automação, entre outros. Você também pode usar feedbacks dos usuários ou clientes para identificar possíveis problemas ou oportunidades de melhoria na sua automação.

Exemplos práticos

Para ilustrar como funciona a automação de infraestrutura na prática, vamos mostrar dois exemplos simples usando Python e Terraform.

Exemplo 1: Automatizar a configuração das VMs usando Python

Neste exemplo, vamos usar Python para automatizar a configuração das VMs do Linux no Azure. Vamos usar o módulo azure-mgmt-compute do Python para interagir com o serviço Azure Compute Management. Vamos criar uma função que recebe como parâmetros o nome do grupo de recursos, o nome da VM e um dicionário com as configurações desejadas da VM (como tamanho da VM, nome do usuário administrador, senha do usuário administrador, nome do sistema operacional, versão do sistema operacional etc.).

A função vai verificar se existe uma imagem do sistema operacional no Azure com as características especificadas. Se existir, a função vai criar uma VM usando essa imagem e aplicando as configurações desejadas. Se não existir, a função vai retornar uma mensagem informando que não foi possível criar a VM.

# Importando o módulo azure-mgmt-compute
from azure.mgmt.compute import ComputeManagementClient

# Definindo a função para automatizar a configuração das VMs
def configurar_vm(grupo_de_recursos,nome_da_vm,parametros_da_vm):

  # Criando um objeto do tipo ComputeManagementClient
  compute_client = ComputeManagementClient(credenciais_do_azure,id_da_assinatura_do_azure)

  # Buscando uma imagem do sistema operacional no Azure com as características especificadas
  imagem = compute_client.virtual_machine_images.get(
    location=parametros_da_vm["localizacao"],
    publisher_name=parametros_da_vm["nome_do_publicador"],
    offer=parametros_da_vm["nome_do_sistema_operacional"],
    skus=parametros_da_vm["versao_do_sistema_operacional"],
    version="latest"
  )

  # Verificando se encontrou uma imagem válida
  if imagem:

    # Criando um objeto do tipo VirtualMachine
    vm = compute_client.virtual_machines.models.VirtualMachine(
      location=parametros_da_vm["localizacao"],
      hardware_profile=compute_client.virtual_machines.models.HardwareProfile(
        vm_size=parametros_da_vm["tamanho_da_vm"]
      ),
      storage_profile=compute_client.virtual_machines.models.StorageProfile(
        image_reference=compute_client.virtual_machines.models.ImageReference(
          publisher=imagem.storage_profile.image_reference.publisher,
          offer=imagem.storage_profile.image_reference.offer,
          sku=imagem.storage_profile.image_reference.sku,
          version=imagem.storage_profile.image_reference.version
        )
      ),
      os_profile=compute_client.virtual_machines.models.OSProfile(
        computer_name=nome_da_vm,
        admin_username=parametros_da_vm["nome_do_usuario_administrador"],
        admin_password=parametros_da_vm["senha_do_usuario_administrador"]
      ),
          network_profile=compute_client.virtual_machines.models.NetworkProfile(
        network_interfaces=[
          compute_client.virtual_machines.models.NetworkInterfaceReference(
            id=id_da_interface_de_rede
          )
        ]
      )
    )

    # Criando a VM no Azure usando o objeto VirtualMachine
    resultado = compute_client.virtual_machines.create_or_update(
      resource_group_name=grupo_de_recursos,
      vm_name=nome_da_vm,
      parameters=vm
    )

    # Aguardando a conclusão da criação da VM
    resultado.wait()

    # Retornando uma mensagem informando que a VM foi criada com sucesso
    return f"A VM {nome_da_vm} foi criada com sucesso no grupo de recursos {grupo_de_recursos}."

  else:

    # Retornando uma mensagem informando que não foi possível criar a VM
    return f"Não foi possível encontrar uma imagem do sistema operacional {parametros_da_vm['nome_do_sistema_operacional']} na versão {parametros_da_vm['versao_do_sistema_operacional']} no Azure."



Esse é um exemplo simples de como usar Python para automatizar a configuração das VMs no Azure. Você pode adaptar esse código para atender às suas necessidades e requisitos específicos. Você também pode usar outras ferramentas de automação de configuração, como Ansible, Chef ou Puppet, que oferecem módulos ou recursos prontos para interagir com o Azure.

Exemplo 2: Automatizar o gerenciamento da infraestrutura usando Terraform


Neste exemplo, vamos usar Terraform para automatizar o gerenciamento da infraestrutura no Azure. Vamos usar o provedor azurerm do Terraform para interagir com os serviços do Azure. Vamos criar um arquivo chamado main.tf que contém o código para definir a infraestrutura como código (IaC). Vamos criar um grupo de recursos, uma rede virtual, uma sub-rede, uma interface de rede e uma VM do Linux no Azure.

Vamos usar variáveis para parametrizar alguns valores, como o nome do grupo de recursos, o nome da VM e as credenciais do Azure. Vamos também usar saídas para exibir algumas informações sobre a infraestrutura criada, como o endereço IP da VM.

# Configurando o provedor azurerm
provider "azurerm" {
  features {}
}

# Definindo as variáveis
variable "resource_group_name" {
  description = "O nome do grupo de recursos"
  default     = "meu-grupo-de-recursos"
}

variable "vm_name" {
  description = "O nome da VM"
  default     = "minha-vm"
}

variable "azure_subscription_id" {
  description = "O ID da assinatura do Azure"
}

variable "azure_client_id" {
  description = "O ID do cliente do Azure"
}

variable "azure_client_secret" {
  description = "O segredo do cliente do Azure"
}

variable "azure_tenant_id" {
  description = "O ID do locatário do Azure"
}

# Criando um grupo de recursos
resource "azurerm_resource_group" "meu_grupo_de_recursos" {
  name     = var.resource_group_name
  location = "eastus"
}

# Criando uma rede virtual
resource "azurerm_virtual_network" "minha_rede_virtual" {
  name                = "minha-rede-virtual"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
}

# Criando uma sub-rede
resource "azurerm_subnet" "minha_sub_rede" {
  name                 = "minha-sub-rede"
  resource_group_name  = azurerm_resource_group.meu_grupo_de_recursos.name
  virtual_network_name = azurerm_virtual_network.minha_rede_virtual.name
  address_prefixes     = ["10.0.1.0/24"]
}

# Criando uma interface de rede
resource "azurerm_network_interface" "minha_interface_de_rede" {
  name                = "minha-interface-de-rede"
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name

  ip_configuration {
    name                          = "minha-configuracao-de-ip"
    subnet_id                     = azurerm_subnet.minha_sub_rede.id
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = azurerm_public_ip.meu_endereco_ip_publico.id
  }
}

# Criando um endereço IP público
resource "azurerm_public_ip" "meu_endereco_ip_publico" {
  name                = "meu-endereco-ip-publico"
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
  allocation_method   = "Dynamic"
}

# Criando uma VM do Linux
resource "azurerm_linux_virtual_machine" "minha_vm_linux" {
  name                = var.vm_name
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  size                = "Standard_B1s"
  admin_username      = "adminuser"

  network_interface_ids = [
    azurerm_network_interface.minha_interface_de_rede.id,
  ]

  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18.04-LTS"
    version   = "latest"
  }
}

# Definindo as saídas
output "vm_name" {
  value = azurerm_linux_virtual_machine.minha_vm_linux.name
}

output "vm_ip_address" {
  value = azurerm_public_ip.meu_endereco_ip_publico.ip_address
}



Esse é um exemplo simples de como usar Terraform para automatizar o gerenciamento da infraestrutura no Azure. Você pode adaptar esse código para atender às suas necessidades e requisitos específicos. Você também pode usar outras ferramentas de automação de gerenciamento da infraestrutura, como Packer, Azure Resource Manager ou Azure Automation.


Conclusão

A automação de infraestrutura é uma prática essencial para as organizações de TI que querem aumentar sua eficiência, qualidade e agilidade. Existem diversas ferramentas e soluções que permitem automatizar diferentes aspectos da infraestrutura de TI, como configuração, gerenciamento e entrega de aplicações.

Para começar a automatizar sua infraestrutura de TI, você precisa definir o objetivo e o escopo da automação, escolher as ferramentas adequadas para a automação, implementar a automação, monitorar e melhorar a automação. Neste artigo, mostramos dois exemplos práticos de como usar Python e Terraform para automatizar a configuração e o gerenciamento da infraestrutura no Azure.

Espero que este artigo tenha sido útil para você aprender mais sobre automação de infraestrutura e como começar a aplicá-la na sua organização.

Referências bibliográficas

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.