3
respostas

Terraform: reconstrução do projeto

Após a aula 03 do curso Terraform:Automatize a infraestrutura na nuvem, eu apaguei e recriei tudo, pois na primeira tentativa de acompanhamento a Amazon reclamou que o bucket deveria ser criado na região sa-east-1 e não na us-east-1 como eu vinha fazendo desde o início das instruções.

Porém, após o init e plan bem-sucedidos, o apply retornou o seguinte:

Error: Error creating Security Group: InvalidGroup.Duplicate: The security group 'acesso-ssh' already exists for VPC 'vpc-ca58b1b7'
        status code: 400, request id: 99f1e01f-2585-4ec5-8f23-74791991ebbf



Error: Error import KeyPair: InvalidKeyPair.Duplicate: The keypair 'terraform-aws' already exists.
        status code: 400, request id: 332a1c76-4d9b-4fe8-b205-87b4711b31e6



Error: Error creating S3 bucket: BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.
        status code: 409, request id: 0EE0B5F0119B4F04, host id: 8d2mTwIe8DSGF7IZIQ1SVCp17YgvuAoHQVFkpaaohQweIzqTHOmJeYGidb9472DmquofhU3LNcI=

Segue o meu main.tf:

provider "aws"{
    version = "~> 3.0"
    region  = "us-east-1"
}

resource "aws_key_pair" "terraform_aws" {
  key_name = "terraform-aws"
  public_key = file("C:\\Users\\admin\\.ssh\\terraform-aws.pub")
}

resource "aws_instance" "dev" {
    count = 3
    ami = "ami-026c8acd92718196b"
    instance_type = "t2.micro"
    key_name = aws_key_pair.terraform_aws.key_name
    tags = {
        Name = "dev${count.index}"
    }
    vpc_security_group_ids = ["${aws_security_group.acesso-ssh.id}"]
}

resource "aws_instance" "dev4" {
  ami = "ami-026c8acd92718196b"
  instance_type = "t2.micro"
  key_name = "terraform-aws"
  tags = {
    Name = "dev4"
  }
  vpc_security_group_ids = ["${aws_security_group.acesso-ssh.id}"]
  depends_on = [aws_s3_bucket.dev4]
}

resource "aws_instance" "dev5" {
  ami = "ami-026c8acd92718196b"
  instance_type = "t2.micro"
  key_name = "terraform-aws"
  tags = {
    Name = "dev5"
  }
  vpc_security_group_ids = ["${aws_security_group.acesso-ssh.id}"]
}

resource "aws_security_group" "acesso-ssh" {
  name        = "acesso-ssh"
  description = "acesso-ssh"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    # Please restrict your ingress to only necessary IPs and ports.
    # Opening to 0.0.0.0/0 can lead to security vulnerabilities.
    cidr_blocks = ["191.176.132.35/32"]
  }
  tags = {
    Name = "ssh"
  }
}

resource "aws_s3_bucket" "dev4" {
  bucket = "linolabs-dev4"
  acl    = "private"

  tags = {
    Name = "linolabs-dev4"
  }
}

Qual seria, então, a melhor forma de limpar e recriar tudo sem incorrer nesse problema?

Abraços.

3 respostas

Olá Jullyano, tudo bem? Nesse caso você poderia ir diretamente na AWS e excluir tudo o que foi criado pelo Terraform, ou então utilizar o comando destroy para excluir todos os recursos que foram criadas e em seguida criar novamente. Tenta usando destroy e fala se deu certo!

Boa tarde, Jonilson.

Destruí tudo na AWS, executei terraform destroy, importei as chaves para a console do EC2 e reexecutei terraform init && terraform plan && terraform apply. Recebi as seguintes mensagens de erro:

Error: Error creating S3 bucket: AuthorizationHeaderMalformed: The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'sa-east-1'
        status code: 400, request id: 00603DB565610C81, host id: 4PcBUExkrHJLeuR7HPM6LWAvGIKLK7qN/Dqs3Hd78qL3/UacJQG4sooR4eKM3bdYAKjkFJaquYc=



Error: Error import KeyPair: InvalidKeyPair.Duplicate: The keypair 'terraform-aws' already exists.
        status code: 400, request id: 45bdfd71-8027-4f03-9d20-2bda78d518d0

O primeiro erro foi o erro original que me fez destruir tudo. O segundo eu não estou entendendo, pois fiz várias alterações antes da destruição inicial. O que pode estar acontecendo?

Abraços.

Esse primeiro erro apresentado agora é diferente dos anteriores, e ele indica que foi indicado que a região seria a us-east-1 porém ele esperava que fosse a região sa-east-1, então uma coisa que você poderia verificar é em qual região você adicionou a chave SSH, porque note, se você adicionou a chave na região us-east-1 você não pode usar essa mesma chave em outra região, apenas na us-east-1. Outra coisa, no arquivo de configuração do CLI da AWS na sua máquina você poderia verificar qual é a região default que está indicando nesse arquivo.

Fico aguardando retorno!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software