Como criar uma instância EC2 usando Terraform, adicionar um backend S3 e instalar o Docker
Tags: docker, terraform, aws, devops
Published: 2023-07-17 00:33:11

Neste tutorial, você aprenderá como criar uma instância EC2 (Elastic Compute Cloud) na AWS usando o Terraform, adicionar um backend S3 para armazenar o estado remoto do Terraform e, em seguida, como acessar a instância EC2 e instalar o Docker nela.

## Configuração do ambiente

Certifique-se de ter o Terraform instalado no seu computador. Acesse o site oficial do Terraform para obter as instruções de instalação.

## Criar um bucket no S3

Acesse o console da AWS e crie um novo bucket no serviço S3. Escolha um nome único e uma região para o bucket.

Segue uma breve explicação por que usamos o backend s3 no terraform.

Como funciona o backend S3 no Terraform

- **Estado remoto**: Com o backend S3 configurado, o estado do Terraform (o arquivo "terraform.tfstate") será armazenado no bucket S3 que você especificou. Isso significa que, em vez de ser armazenado localmente, o estado será armazenado de forma remota em um local seguro e durável.
- **Colaboração em equipe**: O uso de um backend remoto permite que várias pessoas trabalhem juntas em um mesmo projeto Terraform sem que ocorram conflitos no estado. Cada membro da equipe obtém a versão mais recente do estado do bucket S3 e pode trabalhar com segurança, sabendo que as alterações são mantidas consistentes.
- **Rastreamento de histórico**: O backend S3 mantém um histórico de alterações no estado do Terraform, permitindo que você reverta ou veja o histórico de alterações ao longo do tempo.
- **Segurança e Durabilidade**: A AWS oferece recursos de segurança e durabilidade para os buckets do S3, garantindo a integridade e a disponibilidade do estado do Terraform.

## Criar um arquivo de configuração do Terraform

Crie um arquivo chamado "main.tf" e insira o seguinte conteúdo:

```terraform
terraform {
  backend "s3" {
    bucket = "seu-bucket-terraform"  # Substitua pelo nome do bucket criado anteriormente
    key    = "terraform.tfstate"
    region = "us-east-1"  # Substitua pela região do bucket
  }
}

provider "aws" {
  region = "us-east-1"  # Substitua pela região desejada
}

resource "aws_instance" "ec2_instance" {
  ami           = "ami-0c55b159cbfafe1f0"  # AMI da região us-east-1 (Amazon Linux 2)
  instance_type = "t2.micro"  # Tipo da instância (pode ser alterado)

  tags = {
    Name = "MinhaEC2"
  }
}
```

## Inicializar o Terraform

Abra um terminal ou prompt de comando, navegue até o diretório onde você criou o arquivo "main.tf" e execute os seguintes comandos:

```shell
terraform init
```

## Aplicar a configuração

Após a inicialização do Terraform, execute o comando para aplicar a configuração:

```shell
terraform apply
```
Confirme a ação digitando "yes" quando solicitado.

## Acessar a instância EC2

Após o Terraform concluir a criação da instância EC2, você receberá informações sobre a instância criada. Procure pelo atributo "public_ip" que contém o endereço IP público da instância.

Use um terminal SSH (se estiver no Linux ou macOS) ou um cliente SSH como o PuTTY (se estiver no Windows) para acessar a instância EC2. O comando para se conectar via SSH é:

```shell
ssh -i /caminho/para/sua/chave.pem ec2-user@seu_ip_publico
```
Lembre-se de substituir "/caminho/para/sua/chave.pem" pelo caminho para a chave privada (.pem) que você usou ao criar a instância e "seu_ip_publico" pelo endereço IP público da instância EC2.

## Instalar o Docker

Agora que você está conectado à instância EC2 via SSH, vamos instalar o Docker:

```shell
sudo yum update -y
sudo amazon-linux-extras install docker
sudo service docker start
sudo usermod -a -G docker ec2-user
```
Após executar esses comandos, o Docker deve estar instalado e em execução na sua instância EC2.

## Conclusão

Parabéns! Agora você aprendeu como criar uma instância EC2 usando o Terraform, adicionar um backend S3 para armazenar o estado remoto do Terraform, acessá-la através do SSH e instalar o Docker na instância. A partir desse ponto, você pode implantar e executar seus aplicativos Docker na instância EC2.

Lembre-se de desalocar os recursos quando não estiverem em uso para evitar custos não desejados. Para isso, você pode usar o Terraform para destruir os recursos criados:

```
terraform destroy
```
Espero que este tutorial tenha sido útil! Se tiver alguma dúvida ou sugestão, sinta-se à vontade para perguntar.