AWS

20 de Fevereiro de 2024 - @Walmir Neto


Quando mostrei Instalando OpenTofu eu usei o ‣ para instalar e por isso a primeira coisa a ser feita é dizer isso ao nosso projeto. Crie um arquivo no root do projeto .opentofu-version com a versão do tofu que esteja usando, aqui vai ser 1.6.1

Vou criar uma pasta tofu para separar a parte infra do projeto (Poderia ser qualquer outra pasta).

Dentro dela vou criar um .gitignore com o conteúdo abaixo (Isso vai evitar versionamento de alguns arquivos desnecessários)

**/.terraform/*

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log

# Exclude all .tfvars files, which are likely to contain sentitive data, such as
# password, private keys, and other secrets. These should not be part of version
# control as they are data points which are potentially sensitive and subject
# to change depending on the environment.
#
*.tfvars
*.tfvars.json

# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json

# Include override files you do wish to add to version control using negated pattern
# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*

# Ignore CLI configuration files
.terraformrc
terraform.rc

Dentro dela vou criar o primeiro arquivo, vou chamar de providers.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  profile = "walmir" # optional if you don't have this profile
  region  = "us-east-1"
}

Você vai precisar Configurando usuário Terraform na AWS caso não tenha feito ainda

Feito isso, você vai precisar entrar na pasta cd tofu e rodar:

cd tofu && tofu init # to Prepare your working directory

Próximo arquivo é tofu/aws_instances.tf para as instancias EC2

locals {
  instance_ami  = "ami-0c7217cdde317cfec"
  instance_type = "t2.micro"
  instance_tags = {
    Name    = "Ruby on Rails"
    Project = "Ubuntu for Rails Demo"
  }
}

resource "aws_instance" "demo_instance" {
  ami           = local.instance_ami
  instance_type = local.instance_type

  tags = local.instance_tags
}

Agora é só roda:

cd tofu
tofu validate # to validate if code is valid
tofu plan # to check if everything is ok
tofu apply -auto-approve # DON'T USE `-auto-approve` if you're not sure 

Com isso deve lá no Console da AWS em instancias deve aparecer uma instancia, como na imagem abaixo

Screenshot 2024-02-17 at 17.04.57.png

Caso queria desfazer tudo isso, é só rodar um cd tofu && tofu destroy e a instancia deixa de existir

O código desse exemplo → https://github.com/owalmirneto/rails-demo/pull/9