Atualizado em: 25 de julho de 2022
O Terraform é uma ferramenta para construir, alterar e configurar uma infraestrutura de rede de forma segura e eficiente. Com ele é possível gerenciar serviços de nuvem bem conhecidos, bem como soluções internas personalizadas. Veja a lista completa de serviços de infraestrutura de nuvem suportados em: https://www.terraform.io/docs/providers/index.html.
Os arquivos de configuração do Terraform descrevem os componentes necessários para executar um único aplicativo ou todo o seu datacenter. Ele pode gerar um plano de execução descrevendo o que ele fará para atingir o estado desejado e, em seguida, ele pode executar as instruções para construir a infraestrutura descrita. Conforme a configuração muda, o Terraform é capaz de determinar o que mudou e criar planos de execução incrementais que podem ser aplicados.
O Terraform trata a infraestrutura como código e dessa forma você pode versioná-lo usando o Git, por exemplo, e ter um backup, fazer rollback em caso de problemas e fazer auditoria à medida que o tempo passa e as alterações vão sendo realizadas no seu ambiente.
O Terraform é desenvolvido e mantido pela empresa Hashicorp. Ele é gratuito com código fonte aberto e assim pode receber contribuições da comunidade no GitHub (https://github.com/hashicorp/terraform). Ele está disponível para download na página: https://www.terraform.io/
Neste tutorial, será mostrado como instalar e usar o Terraform para criar um instância na AWS.
Instalando o Terraform
0) Instalando o Terraform no Ubuntu.
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform terraform -v terraform --help
Usando o Terraform
1) Crie uma conta Free Tier na Amazon https://aws.amazon.com/ siga as instruções das páginas: https://docs.aws.amazon.com/chime/latest/ag/aws-account.html e https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/free-tier-limits.html. Na criação da conta será necessário cadastrar um cartão de crédito, mas como você criará instâncias usando os recursos oferecidos pelo plano Free Tier, nada será cobrado se você não ultrapassar o limite para o uso dos recursos e tempo oferecidos e descritos no link anterior.
2) Após a criação da conta na AWS, acesse a interface CLI da Amazon na página: https://aws.amazon.com/cli/
3) Clique no nome do usuário (canto superior direito) e escolha a opção “Security Credentials“. Em seguida clique na opção “Access Keys (Access Key ID and Secret Access Key)” e clique no botão “New Access Key” para criar e visualizar o ID e o Secret da chave, conforme exemplo abaixo (https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html). A Access Key e Secret Key mostradas a seguir são apenas para exemplo. Elas são inválidas e você precisa trocar pelos dados reais gerados para sua conta.
Access Key ID: YOUR_ACCESSKEY_ACCOUNT Secret Access Key: YOUR_SECRET_ACCOUNT
4) Crie o diretório abaixo.
mkdir -p $HOME/.aws/
5) Acesse o diretório criado anteriormente e crie o arquivo credentials com o seguinte conteúdo. A Access Key e Secret Key mostradas a seguir são apenas para exemplo. Elas são inválidas e você precisa trocar pelos dados reais gerados para sua conta.
[default] aws_access_key_id = YOUR_ACCESSKEY_ACCOUNT aws_secret_access_key = YOUR_SECRET_ACCOUNT
6) Crie o diretório packt-terraform.
mkdir -p $HOME/packt-terraform/
7) Acesse o diretório criado anteriormente e crie o arquivo main.tf com o seguinte conteúdo. Será criada uma instância no serviço EC2 (Elastic Compute Cloud) da AWS do tipo t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only) usando o Ubuntu 20.04 64 bits.
terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 2.4.0, < 3.74.1" } } required_version = ">= 0.13.7" }
# Receive latest version Ubuntu 20.04 # reference: https://www.terraform.io/docs/providers/aws/r/instance.html data "aws_ami" "ubuntu" { most_recent=true owners=["099720109477"] # Canonical filter { name="root-device-type" values=["ebs"] } filter { name="virtualization-type" values=["hvm"] } filter { name="name" values=["ubuntu*20.04-amd64-server-*"] } # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html # https://docs.aws.amazon.com/cli/latest/userguide/install-linux.html # example: aws ec2 describe-images --filters "Name=name,Values=ubuntu*20.04-amd64-server-*" }
provider "aws" { profile = "default" region = "us-east-2" } resource "aws_instance" "hello-instance" { ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro" tags = { Name = "hello-instance" } }
8) Dentro desse mesmo diretório em que está o template do terraform, execute os comandos abaixo para testar a comunicação e visualizar as mudanças a serem realizadas antes de aplicá-las no ambiente.
terraform providers terraform init terraform plan terraform apply
9) A lista de recursos e providers suportados pelo Terraform está disponível em:
https://www.terraform.io/docs/
10) Acesse https://console.aws.amazon.
11) Voltando ao diretório $HOME/packt-terraform/, você verá o arquivo terraform.tfstate, contendo o estado atual do seu ambiente. Esse arquivo será atualizado a cada mudança no ambiente usando o Terraform. As informações são mostradas no padrão JSON, mas você pode obter uma visualização no padrão “chave = valor” com o comando abaixo.
terraform state show aws_instance.hello-instance
Onde: aws_instance.hello-instance é o nome do recurso criado no arquivo main.tf.
12) Se quiser destruir o ambiente, execute o comando abaixo. É importante realizar este passo para evitar que a instância AWS fique ligada por tempo indefinido e você acabe ultrapassando os limites oferecidos pelo plano Free Tier e seja cobrado por isso posteriormente. Se quiser apenas remover um recurso específico, sem destruir todo o ambiente, basta editar o aquivo main.tf, apagar o recurso e executar o comando terraform apply.
terraform destroy
13) Organize e separe as configurações do ambiente gerenciado pelo Terraform em diretórios (um para cada tipo de ambiente) para evitar conflitos. Você também pode salvar e versionar o código no Git, dando commit, push e criando tags a cada mudança de configuração. Fazendo isso você estará praticando IAC (Infrastructure as code) https://en.wikipedia.org/wiki/Infrastructure_as_Code
16) No Github eu publiquei alguns arquivos de exemplo de uso do Terraform: https://github.com/aeciopires/terraform
ATENÇÃO.: Alguns códigos foram desenvolvidos usando a versão 0.11.x e outros usando a versão 0.12.x do Terrafom. O código muda muito de uma versão para outra. Hoje, o Terraform está na versão 1.1.x. Alguns códigos mais recentes podem ser encontrados aqui: https://github.com/aeciopires/adsoft
17) Mais informações sobre o Terraform podem ser obtidas em:
- https://www.terraform.io/docs
- https://www.slideshare.net/DevOpsWebinars/best-practices-of-infrastructure-as-code-with-terraform
- https://www.slideshare.net/leetrout/terraform-an-overview-introduction
- https://www.packtpub.com/networking-and-servers/getting-started-terraform-second-edition
- https://www.oreilly.com/library/view/terraform-up-and/9781491977071
- https://developers.cloudflare.com/terraform/tutorial/hello-world/
- https://hackernoon.com/introduction-to-aws-with-terraform-7a8daf261dc0
- https://www.greenreedtech.com/vsphere-immutable-infrastructure-with-terraform
- https://www.youtube.com/watch?v=lrAycU7_XnQ
- https://www.youtube.com/watch?v=8mRZJcCgoS0
- https://github.com/hashicorp/terraform-guides
- https://github.com/GoogleCloudPlatform/terraformer
- https://kumargaurav1247.medium.com/introduction-to-terraform-ec2-instance-creation-using-terraform-ec221ec630d7
- https://www.middlewareinventory.com/blog/terraform-aws-example-ec2/
- https://www.zenesys.com/blog/creating-ec2-instances-using-terraform
- https://thecloudbootcamp.com/pt/blog/aws/criando-uma-instancia-ec2-utilizando-o-terraform/
- https://amauryborgesouza.medium.com/terraform-e364f5d31570
- https://citizix.com/how-to-use-terraform-to-launch-an-aws-ec2-instance/
Deixe um comentário