Introduzindo o curso de Fundamentos de Terraform
Bem-vindos ao curso de Fundamentos de Terraform. Hoje, além de conhecermos esta ferramenta, vamos praticar. Esta é uma introdução simples sobre o que é infraestrutura como código e o que seria o Terraform, conhecido por ser uma ferramenta de infraestrutura como código. Esta ferramenta foi criada pela HashiCorp e é utilizada para provisionar e gerenciar infraestrutura na nuvem, não apenas na nuvem, mas também em instalações locais (on-premises) e SaaS. On-premises refere-se às instalações locais. O Terraform utiliza uma sintaxe declarativa, e esse será o conceito encontrado na internet sobre esta ferramenta. No entanto, hoje, enquanto praticamos, vamos assimilar esse conceito, sempre com um cenário da vida real para facilitar a compreensão.
Considerando que é uma ferramenta que trabalha com infraestrutura na nuvem, vamos entender primeiro o que é a nuvem. A nuvem refere-se a provedores que disponibilizam serviços e infraestrutura na Internet. O uso dessas plataformas é sob demanda, ou seja, levantamos o recurso que precisamos, utilizamos e, em seguida, destruímos ou mantemos no cenário, dependendo da nossa necessidade. São serviços de fácil manejo, entre aspas, precisamente porque são escaláveis e flexíveis, características que também encontramos sobre a nuvem se pesquisarmos na internet.
Explicando a escalabilidade e flexibilidade da nuvem
O que queremos dizer com escalável e flexível? Criamos e adaptamos o cenário conforme nossa necessidade, exatamente o que precisamos, e como é algo que podemos manipular o tempo todo, sempre ajustando ao cenário atual que está mudando, é uma ferramenta pela qual pagamos conforme o uso. Este é um detalhe extremamente importante. Se nunca tivemos contato com algum provedor de nuvem, como AWS, Azure, Google Cloud, entre outros, devemos ter esse ponto em atenção. Levantamos um serviço, utilizamos, destruímos ou mantemos, e a fatura chega ao final.
Neste curso, precisaremos ter uma conta na AWS para levantar alguns recursos, fazer algumas provas e realmente ter uma experiência com um cenário real. No entanto, o que vamos fazer, os recursos que vamos criar, as configurações que faremos dentro do Terraform para o provedor, são relativamente simples. Assim, gerarão movimento na conta, mas a AWS permite ter uma conta gratuita, e durante esse período de uso há um limite que não é cobrado. Portanto, este curso não criará uma conta paga automaticamente. Contudo, atenção: se em algum momento nos entusiasmarmos e fizermos outras provas, levantarmos mais de um recurso, melhorarmos o cenário, ou formos para um projeto mais real, devemos ter em mente que seremos cobrados por isso.
Introduzindo IAC e Terraform
Sem mais delongas, vamos falar de fato sobre Terraform e IAC. Antes disso, vamos mostrar na tela quatro pontos principais que acabamos de comentar sobre a nuvem: é uma infraestrutura disponível via Internet, os recursos são sob demanda, que criamos, usamos, destruímos ou mantemos, a fatura chega ao final conforme o uso, é considerada escalável e flexível, e o pagamento é conforme o uso.
Agora, oficialmente, falando de IAC e Terraform, o que seria IAC e Terraform? No início, comentamos como um resumo que, se pesquisarmos na internet, o que significa Terraform, o que é infraestrutura como código, Terraform é uma ferramenta de infraestrutura como código que usa uma sintaxe declarativa, e infraestrutura como código não é mais do que a sigla IAC. O uso do Terraform traz muitas vantagens no âmbito de DevOps, eliminando os processos manuais que são realizados dentro do provedor. Assim, a ideia de abrir o provedor, fazer login, abrir o console, buscar o serviço e fazer a criação manual, com a ferramenta, essa parte fica completamente eliminada, não precisamos de todo esse trabalho.
Destacando os benefícios do Terraform
Considerando que reduzimos todas as vezes que precisamos fazer esse processo de login na plataforma, buscar no console o que precisamos, ver o padrão de criação do zero, ao reduzir esse trabalho, o Terraform também reduz os erros e aumenta a eficiência do que nós ou nossa equipe fazemos. O Terraform não é apenas uma ferramenta que faz o provisionamento no provedor, é uma ferramenta que nos traz muitos outros benefícios, especialmente quando trabalhamos em equipe, e mais adiante entenderemos melhor por que é tão importante no contexto de DevOps.
Voltando um pouco ao Terraform, para não nos desviarmos muito do escopo no início da aula, ele traz consistência, é a oportunidade de recriar o mesmo ambiente repetidamente. Imaginemos o cenário real sem o Terraform: precisamos criar uma EC2, por exemplo, vamos ao provedor, fazemos login, buscamos no console e começamos a criação. No dia seguinte, precisamos de outra EC2, voltamos, fazemos login, entramos no console e configuramos do zero. Com o Terraform, podemos gerenciar isso de forma, entre aspas, automática. Digo "automática" para que entendamos que esse trabalho repetitivo não é necessário. Por quê? O Terraform trabalha com módulos; uma vez que criamos esses módulos, podemos reutilizá-los sem necessidade de começar do zero, já temos essa ferramenta pronta para aplicar e replicar quantas vezes quisermos. E, claro, mantém o padrão, porque uma vez que está guardado nesse formato, nós ou qualquer outro usuário poderá replicá-lo exatamente como deve ser.
Explorando a capacidade multi-cloud do Terraform
E o melhor, um ponto muito importante, o Terraform é uma ferramenta multi-cloud, trabalha não apenas com um provedor, mas com vários ao mesmo tempo. Por exemplo, imaginemos que queremos trabalhar com Azure e com AWS, com pequenas configurações já podemos gerenciar recursos em ambos os provedores de forma automática. Assim, eliminamos o trabalho de fazer login em dois provedores, buscar em dois consoles, buscar dois serviços de forma completamente distinta, podemos configurar dentro do Terraform para que esse trabalho seja feito em dois ou três provedores. É multi-cloud, permitindo a gestão de recursos em diferentes nuvens, como AWS e Azure ao mesmo tempo.
Podemos armazenar tudo o que fazemos no Git. Dessa forma, conseguimos acompanhar todo o histórico, reverter alterações realizadas e colaborar com nossa equipe, pois é uma ferramenta que proporciona segurança para o trabalho em equipe, o que é conhecido como versionamento. Tudo o que fazemos com Terraform pode ser enviado e armazenado no Git para garantir essa segurança e também o gerenciamento por parte da equipe, mantendo sempre uma padronização e uma estrutura segura. Isso ocorre porque todos verão o mesmo cenário, o que reduz significativamente os erros de uso, já que todos acabam falando a mesma linguagem e vendo o mesmo código. Assim, temos o famoso versionamento.
Garantindo padronização e segurança com Terraform
Além disso, mencionamos a importância de manter uma padronização, mas há um ponto interessante que devemos ter em mente: realmente proporciona padronização, segurança e governança. Isso é perceptível no dia a dia, no uso, pois é uma ferramenta que, honestamente, não encontramos outra definição: sempre devemos imaginar que, ao usar Terraform, estamos utilizando uma ferramenta que entrega um cenário exatamente igual para todos os colaboradores, seja em casa ou a 200 quilômetros de distância, permitindo que trabalhemos vendo a mesma tela e a mesma linguagem de forma segura. O Terraform também possui um recurso chamado state (estado), que conheceremos em algumas apresentações futuras. Esse state armazena as configurações e faz uma comparação entre o que estamos deixando no provedor de nuvem e o que já existe, identificando o que deve ser destruído e o que deve ser criado. Assim, se executarmos um comando aqui e outro em outro lugar, evitamos duplicidade. Além disso, o Terraform possui uma função que bloqueia conflitos, impedindo que várias pessoas causem problemas ao subir informações que possam comprometer o trabalho. Por isso, o Terraform oferece segurança.
Na próxima apresentação, colocaremos informações sobre a ferramenta e seus benefícios, para que possam ser copiadas ou anotadas. Eu, Carol, prefiro explicar, pois é mais fácil de compreender do que ler fragmentos que, teoricamente, parecem prontos; talvez ouvindo seja mais fácil assimilar. Como mencionamos, o Terraform é uma ferramenta de infraestrutura como código criada pela RESTCorp, utilizada para provisionar e gerenciar infraestruturas na nuvem. Entre os benefícios já mencionados, estão a automação, repetibilidade, consistência, trabalho com módulos, suporte a múltiplas nuvens, versionamento no Git e modularização para reutilizar algo já escrito. Este é um pequeno resumo para anotação, e continuaremos com as explicações.
Demonstrando a criação de recursos com Terraform
Por exemplo, no Terraform, escrevemos um trecho de algumas linhas, que veremos na próxima apresentação para ter uma ideia de como funciona antes de praticar. Basicamente, escrevemos um trecho, executamos o que foi escrito, e isso se transforma em infraestrutura, sendo implantado no provedor. Claro que não é tão simples como dizer: "Terraform, quero um load balancer, crie-o na AWS". Existe um formato específico de escrita, e a documentação oficial é fácil de entender. No início, pode parecer estranho, mas com o tempo nos acostumamos a ver esse cenário e percebemos que não é complicado nem um bicho de sete cabeças, é questão de prática.
Na próxima apresentação, serão mostradas sete linhas de um código real. Coloquei "Curso Gonçalves" porque, ao criar um bucket na AWS, o nome deve ser único globalmente. Basicamente, temos o provider (provedor), que é a conexão com o provedor de nuvem, no caso, a AWS. Na segunda linha, declaramos a região onde queremos que os serviços existam. A partir da linha cinco, já estamos criando nosso recurso, indicando que precisamos de um bucket S3. O nome interno no sistema foi deixado como first_bucket, e na linha seis fazemos a declaração do serviço com o nome único que será registrado no provedor. Com essas poucas linhas, já podemos realizar um trabalho que, de outra forma, nos obrigaria a acessar a console, buscar serviços e configurar individualmente. Todos os recursos criados a partir daí estarão associados à AWS e à região indicada, o que representa uma grande otimização de tempo.
Explicando a estrutura do código Terraform
Para ilustrar isso, vamos ver como esse código é estruturado:
provider "aws" {
region = "sa-east-1"
}
Aqui, estamos definindo o provedor como AWS e especificando a região onde queremos que nossos serviços sejam criados. Isso estabelece a conexão inicial com a AWS.
Continuando, vamos criar um recurso S3:
resource "aws_s3_bucket" "primeiro_bucket" {
bucket = "primeiro-bucket-curso-goncales"
}
Neste trecho, estamos criando um bucket S3 na AWS. O nome do bucket é único globalmente, e aqui usamos "primeiro-bucket-curso-goncales" para garantir essa unicidade.
Não se preocupem em entender cada fragmento agora, pois neste curso abordaremos em blocos, linha por linha, o que significa. Neste momento, foquem apenas em entender o que foi feito, como foi feito e como funciona. Essa facilidade, que é a opção de criação de recursos, conexão com provedores, criação de módulos e workspaces, faz parte de uma arquitetura. Tudo o que fazemos aqui faz parte de uma arquitetura, e é importante destacar isso. O Terraform pode parecer um pouco confuso, mas confiamos que, mais adiante, tudo ficará claro.
Concluindo com a importância do Terraform na arquitetura
O Terraform não cria a arquitetura, ele a materializa. Ou seja, pedimos que ele defina a arquitetura necessária no código, seja uma VPC, uma subnet, um security group, EC2, um bucket S3, entre outros, e ele construirá exatamente isso, sem inventar algo. Ele seguirá o que pedimos e o que entendemos por arquitetura no mundo real. Imagine como o plano de uma casa: tem medidas, paredes, os cômodos que serão criados, todos os detalhes. Aqui, basicamente, é um desenho de como o sistema se conectará, qual é a melhor forma de gerar segurança, valor, escalabilidade e eficiência no cenário tecnológico.
Em resumo, o Terraform é uma ferramenta que faz essa conexão, essa ponte para criar recursos de toda a infraestrutura na nuvem por meio de algumas linhas que usam uma sintaxe declarativa. Na próxima aula, faremos a instalação do Terraform e todas as configurações necessárias para criar nosso primeiro projeto.