Tecnologia

Primeiramente, você sabe o que é Infra as Code?

Bem, o uso da computação, de fato, tem se tornado mais popular a cada ano. Cada vez mais e mais empresas utilizam a nuvem para hospedar os mais diversos tipos de aplicações. Com certeza você já deve ter ouvido falar de DevOps e SRE, áreas que se complementam e conversam, e entre as muitas tarefas que um time desse pode ter, está a manutenção de um ambiente em nuvem.

Agora, pense o quanto de tempo é onerado do time responsável por cuidar dos recursos na nuvem.

Toda vez que um novo projeto se inicia o time precisa: definir os recursos, definir quais os parâmetros de cada recurso, criar todos os recursos e replicar os recursos para N ambientes. Se algo der errado no meio do caminho, o trabalho é maior. É necessário deletar o recurso e refazê-lo. O mesmo é válido durante o desenvolvimento onde novos recursos podem ser necessários. 

A princípio, o processo de criação e manutenção de uma infraestrutura pode ser muito doloroso caso feito de forma totalmente manual. Com base nisso, um novo conceito surgiu para automatizar essa tarefa e trazer alguns benefícios.

Esse conceito se chama Infrastructure as Code (IaC).

O que é Infrastructure as Code (IaC) afinal de contas?

Infra as Code utiliza uma linguagem de alto nível (geralmente seguindo o padrão .json ou .yaml) para descrever as características de cada recurso que queremos criar em nossa nuvem. Estes arquivos costumam ser chamados de templates.

Perceba a mudança: ao invés de criar a infraestrutura de forma totalmente manualmente, agora você possui um script informando quais os recursos e parâmetros necessários para criar aquele ambiente.

A parte interessante é que, como agora temos a informação em arquivo, o mesmo pode ser versionado em um repositório git por exemplo, permitindo algumas visões que antes não era possíveis: histórico de alteração daquela infraestrutura e possibilidade de alocação de um grupo de pessoas para revisar as mudanças sem ter que acompanhar em um um processo manual.

Quais outras vantagens o Infrastructure as Code (IaC) proporciona?

Padronização de ambientes e parametrização

Lembra que antes, em um processo manual, era necessário repetir todos os passos para N ambientes daquela aplicação que fossem ser criados?

Trazendo essa configuração para um script, é possível parametrizá-lo de forma que, alterando algumas entradas, seja possível replicar ambientes de forma simples.

Por exemplo, imagine que você precisa criar um ambiente de desenvolvimento e um de produção. Você pode utilizar o mesmo script e alterar alguns parâmetros como a quantidade de processadores do servidor para atender a especificidade de cada ambiente. 

A brincadeira ainda fica mais interessante com a possibilidade de você utilizar condições para criação dos recursos. É necessário criar um recurso a mais se for em produção? Não tem problema: basta colocar uma condição para criar aquele recurso apenas se o parâmetro de ambiente for produção.

Configuração de regras

Você precisa barrar que seu time crie determinados tipos de recursos? Tudo bem!

Com Infra as Code é possível colocar regras de validação automática no ambiente, seja por pipelines ou pela própria possibilidade da ferramenta que você está usando. De forma automática, seu template pode ser validado para que siga os padrões do projeto.

Histórico e versionamento

Como já falamos anteriormente, a utilização de Infra as Code permite versionar os arquivos utilizando uma ferramenta como o git permitindo manter um histórico de mudanças daquele template.

É possível localizar data e hora de quando um determinado template foi alterado o que pode ajudar muito em troubleshooting quando os recursos provisionados não atuam da forma esperada. Por que antes funcionava e agora não mais? O que mudou na infraestrutura daquele recurso? Agora com Infra as Code é possível ter pistas e visibilidade das alterações dos recursos.

Agilidade no processo

Assim como um desenvolvedor pode reaproveitar código em sua aplicação, o mesmo pode ser feito com scripts.

Uma vez que você desenvolve scripts para algum tipo de recurso, você pode reaproveitar o código e agilizar a criação de novos ambientes utilizando scripts criados anteriormente.

Entendi o conceito. Mas quais ferramentas permitem o uso de Infra as Code?

Vamos conhecer um pouco sobre as ferramentas mais utilizadas:

Terraform: O terraform é uma das ferramentas mais populares em Infra as Code justamente por ser agnóstica de nuvem. O que isso significa? Que o template criado pelo terraform pode ser utilizado para criar ambientes tanto na AWS quanto no Google ou outros provedores que a Terraform suporte. Esse formato é interessante pois sua aplicação não fica “vendor locked”, ou seja, não fica amarrada ao provedor de nuvem.

Ferramentas dos provedores de nuvem:

Essas três ferramentas são os serviços próprios de cada um dos provedores para provisionar os recursos em suas nuvens. A vantagem de utilizá-los é que como são serviços nativos, podem ser facilmente integrados a outros serviços do provedor de nuvem.

O Ansible é a ferramenta da Red Hat e tem foco em orquestração e automação de deploys de múltiplas máquinas e ambientes complexos. Também é possível automatizar a própria configuração das máquinas como instalação de pacotes e atualizações de software.

Puppet e Chef são duas ferramentas similares, com um foco maior em configuração do sistema. Com ambas as ferramentas você consegue automatizar processos de configuração, manutenção e atualização de servidores utilizando Infra as Code.

Ou seja, independente da ferramenta, seu time ganhará agilidade e produtividade ao automatizar tarefas que antes eram manuais.

Impacto de Infra as Code no mercado

Utilizar Infra as Code vai de encontro com tópicos que a Gartner lista como tendências.

Aplicações Cloud Native, ou seja, que nasceram na nuvem são cada mais comuns hoje em dia e aceleram o processo de criação de MVPs e Go To Market. Infra as Code agiliza a criação de recursos nativos em nuvem tornando ainda mais produto o desenvolvimento do produto, com foco total na criação da aplicação.

Hyperautomation também é uma tendência onde as empresas procurar automatizar o quanto de processos em TI for possível. Infra as Code é uma das ferramentas que pode auxiliar nesse processo. 

A cultura de Infra as Code já faz parte da cultura da Zappts onde projetos Cloud Native com infraestrutura criado por nós sempre contemplam a utilização de templates de infraestrutura. Dessa forma, aproveitando o benefício de reutilização de scripts, a Zappts mantém um repositório público com templates em Cloud Formation. Nesse repositório encontramos diversos padrões de template utilizáveis.

Além disso, o repositório também conta com uma documentação bem legal explicando como utilizar alguns exemplos e até mesmo algumas propriedades específicas do Cloud Formation. Confira o repositório: https://github.com/zappts/zappts_cfn_templates.

Um exemplo: Cloud Formation

O Cloud Formation é uma das ferramentas mais populares de Infra as Code, como já citamos.

Muito pelo sucesso do provedor de nuvem por trás dele, a AWS.

Então, vamos entender melhor como funciona o Infra as Code na prática aprendendo alguns conceitos de Cloud Formation.

Estrutura do Cloud Formation:

Um documento de Cloud Formation pode ser estruturado em .yaml ou .json. Nesse exemplo vamos ver uma estrutura em .yaml.

A princípio, o Cloud Formation tem sua estrutura dividida em: 

Cabeçalho

Indica a versão do formato que você está usando e também uma descrição geral do template.

O Cloud Formation permite aplicação de transformações: ou seja, é possível alterar a sintaxe do Cloud Formation por utilização de macros. Esse conceito é mais avançado e não será tratado aqui, todavia, é importante saber que uma das transformações mais utilizadas é a do Serverless Framework, que simplifica a sintaxe de alguns recursos Serverless.

Caso você não conheça ainda o conceito de Serverless, pode saber mais conferindo nosso artigo.

Parameters

Os parameters, como o nome sugere, são os parâmetros para definir as características dos recursos daquele template.

Por exemplo, podemos definir por parâmetro, a capacidade de processamento de uma máquina descrita em um template.

Dessa forma, temos a informação da capacidade de processamento necessária no templo de deploy do template.

Conditions

Utilizamos essa propriedade para definir condições de criação de determinados recursos ou qual valor utilizar para as propriedades do recurso. Portanto, é possível combinar conditions e utilizar AND e OR para condições mais complexas.

Um exemplo bem interessante é: ativar o backup automático de uma tabela somente se o ambiente for produção. Observe que aqui estamos usando ambos os conceitos de parameters e conditions.

Nesse caso, eu especifico o parameters ambiente para definir se é um template para desenvolvimento ou produção e a condition para determinar se eu crio um backup automático ou não.

Resources

São os recursos propriamente ditos.

Cada recurso tem suas própria propriedades. Podemos visualizar essas propriedades na documentação do Cloud Formation.

Assim, a documentação é fundamental para saber quais atributos colocar em cada propriedade e como criar cada recurso.

Outputs

Os outputs são uma ferramenta do Cloud Formation utilizada pra exportar valores de propriedades dos recursos e serem visíveis globalmente para outros templates.

Por exemplo, imagine que você tem um template somente para criar tabelas do banco DynamoDB. O DynamoDB possui uma propriedade que chama Stream, que serve para streamar as mudanças ocorridas naquela tabela.

Dessa forma, esse stream pode acionar uma função lambda para fazer algum processamento reagindo a esse evento.

Agora, vamos supor que você queira linkar o stream dessa tabela, em uma lambda que está em outro template. O lambda exige que você passe o identificador do stream (também conhecido como ARN - Amazon Resource Name) em uma das propriedades, contudo, esse nome não está disponível até que você crie o template. 

Assim, para exemplos como esse, você pode exportar esse nome como um output do template e utilizar a variável exportada em outro.

É importante utilizar o recurso de Outputs com cuidado pois eles amarram templates!

Isso significa que você não consegue deletar um recurso se ele está sendo referenciado por outro recurso. Por isso, só use em casos extremamente necessários.

Funções Intrínsecas

As funções intrínsecas são funções built-in do Cloud Formation. Essas funções permitem referenciar propriedades de recursos, ou seja, seus valores, que ainda não estão disponíveis de fato até criar o template.

Em seguida, vamos conhecer algumas delas?

A Ref é utilizada para referenciar o valor lógico do recurso. Então, geralmente representa o id, nome ou identificador único do recurso.

O GetAtt nos permite acessar alguns outros atributos do recurso que não são definidos na Ref. Assim, cada recurso tem seu próprio conjunto de atributos disponíveis para acesso.

Já o Sub permite utilizar os nomes de variáveis (os parameters) dentro dos recursos. Dessa forma, o Cloud Formation reconhece que o nome deve ser substituído pela variável informada no parameter.

Por fim, você pode conferir a documentação de cada uma delas aqui.

Agora, vamos ver um exemplo prático da aplicação desses conceitos? Vamos ao caso de uso:

  • Precisamos criar uma tabela do DynamoDB  (banco não relacional da AWS) com o nome de ‘ {ambiente}_mensagens ‘. A chave primária dessa tabela é o ID das mensagens. A tabela deve ser criada para todos os ambientes e, para produção, deve estar com o backup (point in time recovery) habilitado. Além disso, a tabela deve possuir um stream (evento de quando um item é inserido, modificado ou deletado) e este stream deve ser utilizado por funções já existentes que estão em outro template.

Nesse sentido, veja como ficaria o template desse exemplo:

Então, pense que interessante: Com poucas modificações você teria novos templates para outros tipos de tabela do DynamoDB. Como resultado, essa é a mágica e o benefício de utilizar Infra as Code!

Como facilitar ainda mais:

Você tem uma infraestrutura e gostaria de automatizá-la e começar a gerar scripts? Você gostaria de criar uma infraestrutura em nuvem mas acha criar scripts complicado? A Zappts pode te ajudar com nosso produto de Infra as Code.

Nossa plataforma faz uma leitura dos seus recursos em nuvem e gera um script pronto pra você! Além disso, caso você queira um processo do zero, também oferecemos esse suporte.

Venha conhecer nosso produto! Fale com um especialista.

Sobre a Zappts

Fundada em 2014 por Rodrigo Bornholdt e Pablo Augusto, a Zappts realiza a aceleração digital de grandes marcas com times de alta performance. Com foco no desenvolvimento de software, especialmente em Front-end, UX Design, Quality Assurance e Gestão de Ambientes Cloud atua no planejamento, gestão e operação de serviços de desenvolvimento de soluções digitais corporativas, gestão de ambientes e transferência de conhecimento por meio da tecnologia da informação. Referência na criação de experiências digitais para os usuários, além de desenvolver soluções inovadoras e rápidas, a empresa atua em modelo 100% remoto, com equipes distribuídas em mais de 17 estados do Brasil.