O que é "infraestrutura como código"?

13

A frase "Infraestrutura como código" foi mencionada várias vezes nas últimas duas semanas em contextos diferentes. O que realmente significa, em termos práticos, ter Infraestrutura como Código?

Richard Slater
fonte

Respostas:

11

TL; DR : a infraestrutura como código é uma maneira de automatizar e fazer backup do seu ambiente. No caso ideal, após um desastre, você pode restaurar sua infraestrutura total e automaticamente , provisionando novos recursos, restaurando a configuração do repositório de códigos e recuperando dados do backup.

Visão geral

A infraestrutura como código se baseia em três conceitos principais:

Automação

O Gerenciamento de configuração está em sua terceira geração de ferramentas. Com base no CFEngine, um novo conjunto de ferramentas para gerenciamento automatizado de configurações está sendo amplamente implantado agora. Os mais populares em ordem alfabética são Ansible, CFEngine, Chef, Puppet, PowerShell DSC e SaltStack . Cada um terá um idioma para descrever o estado de sua infraestrutura, módulos de código para aplicar essas alterações e fornecer capacidade de estender as ferramentas, algum agente para executá-las nos servidores e um repositório central de informações.

Geralmente, eles operam no modo push ou pull, conectando-se a servidores de um (s) local (is) central (is) e executando alterações remotamente ou em execução em cada servidor e obtendo informações sobre o estado do local central e do modelo cliente / servidor ou distribuído caminho.

O conceito importante é que o administrador do sistema ou o engenheiro de confiabilidade do site não faça alterações diretamente na infraestrutura, mas permita que a automação faça alterações. Qualquer coisa feita manualmente por um ser humano deve ser considerada perecível, sendo rapidamente corrigida pela automação ou de forma mais rigorosa, violando a integridade da infraestrutura e provocando a destruição e a reconstrução dos componentes afetados.

Repositório de código

O Code Repository, idealmente separado do Repository Holding Software, seria usado para gerenciar todas as alterações na infraestrutura e na automação relacionada. Ele deve conter arquivos e modelos de configuração, Playbooks (livros de receitas) descrevendo o processo de alterações a serem revisadas, Código estendendo as ferramentas de automação do CM, Configurações de provisionamento, Testes e alertas de infraestrutura, Testes de preparação / implantação, Documentação, Manual (ainda não automatizado) .

O conceito importante é instituir revisões por pares para alterações, ter registro de todas as alterações e capacidade de reverter automaticamente para o estado anterior em caso de problemas imprevisíveis e / ou não testados, capacidade de implantar no ambiente de preparação e testar alterações na configuração e capacidade de implantar automaticamente alterações sem variação causadas por erro humano.

Infraestrutura gerenciada

O gerenciamento da infraestrutura física é uma tarefa do mundo real que vai além do software e requer um conjunto muito diferente de habilidades. Ao poder abstrair essa camada por meio da Cloud Computing ou de um Datacenter gerenciado, você concentra sua equipe no gerenciamento da infraestrutura que agrega valor aos negócios.

Embora a computação em nuvem ofereça uma maneira de iniciar e escalar rapidamente em um estágio posterior, as empresas geralmente obtêm alguns benefícios e até economias significativas na movimentação de partes da infraestrutura em seus próprios datacenters para um modelo híbrido. Possuir ou alugar o hardware não significa que você também precise empregar as pessoas que o tratam. Nesta escala, você precisa de datacenters distribuídos geograficamente em todo o mundo e ter pessoas com todas as habilidades necessárias em todos os lugares seria muito caro. Voar com eles ao redor do mundo adiciona alta latência a qualquer alteração e nível adicional de ineficiência operacional, que é outro motivo para terceirizar o gerenciamento do datacenter.

O ponto principal é que a infra - estrutura física gerenciada costuma ser esquecida ou negligenciada , mas é igualmente importante. Mesmo que você tenha tudo automatizado, todas as configurações armazenadas em um repositório de códigos com backup, a menos que você tenha uma maneira de provisionar rapidamente , você tem um enorme gargalo , que pode apagar facilmente todos os benefícios que você ganhou nas outras duas etapas .

Jiri Klouda
fonte
5

Antes de explicar o que exatamente é, deixe-me citar uma definição muito boa, diretamente da Wikipedia :

Infraestrutura como código (IaC) é o processo de gerenciamento e provisionamento da infraestrutura de computação (processos, servidores bare-metal, servidores virtuais etc.) e sua configuração por meio de arquivos de definição processáveis ​​por máquina, em vez de configuração de hardware físico ou uso de configuração interativa Ferramentas.

Ok, agora vamos olhar para uma dessas ferramentas IaC, a Terraform, para entender melhor o conceito: https://www.terraform.io/

Além disso, é isso que a Terraform diz sobre si mesma:

O Terraform permite criar, alterar e melhorar de maneira segura e previsível a infraestrutura de produção. É uma ferramenta de código aberto que codifica APIs em arquivos de configuração declarativa que podem ser compartilhados entre os membros da equipe, tratados como código, editados, revisados ​​e versionados.

Isso significa que é possível codificar toda a infra. que inclui a criação de recursos de nuvem (/ infra), como instâncias do servidor, balanceadores de carga, etc., juntamente com as configurações completas (que incluem ajustes básicos de configurações, configurações de segurança, regiões etc.) como código, que pode ser editável, versionável e é claro, revisável.

Este é um exemplo de código Terraform para provisionamento de recursos da AWS:

resource "aws_elb" "frontend" {
  name = "frontend-load-balancer"
  listener {
    instance_port     = 8000
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  instances = ["${aws_instance.app.*.id}"]
}

resource "aws_instance" "app" {
  count = 5

  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
}

Bônus PS : Além disso, é preciso entender as diferenças entre as ferramentas de provisionamento e orquestração . Os desenvolvedores confundem um pelo outro com muita frequência e tendem a cometer o erro de tentar ajustar e usar uma ferramenta para o que não se destina a ser usada.

Dawny33
fonte