Utilizando o minio para armazenar Terraform State

Fala Galera, seguindo a linha de postagens curtas e bem diretas ao ponto. Hoje vou fazer um pequeno Tutorial de como configurar seu backend terraform para utilizar o min.io como um S3 local para armazenar o state do terraform. Quem ainda não conhece o minio sugiro da uma olhada no site e a documentação da ferramenta. Irei configurar um ambiente minio apenas para usar como lab.

Então, vamos preparar o ambiente do minio, seguindo a documentação iremos utilizar docker-compose para subir toda estrutura. minha estrutura de diretórios para este post:

Estrutura de Diretórios

Na configuração iremos subir 4 nós minio e 1 servidor nginx para ser um proxy reverso e realizar o balanceamento entre os nós. Como falei, o objetivo deste post é a configuração do backend do terraform, então não entrarei em detalhes sobre a configuração do minio. Os Arquivos de configuração serão linkados docker-compose.yml e nginx. Após realizados a configuração vamos subir o minio.

Subindo ambiente minio

Com o ambiente no ar, é possível acessar pelo endereço http://dominio.com:9000 (vai depender de como você configurou o nginx ). Criei um bucket chamado terraform-state, que será utilizado na nosso configuração do backend.

Minio Bucket criado

Agora que temos o Minio pronto e o Bucket criado, vamos configurar o nosso backend.

terraform {
  backend "s3" {
    access_key="minio"
    secret_key="minio123"
    endpoint = "http://dominio.com:9000"
    bucket = "terraform-state"
    key = "terraform.tfstate"
    region = "main"
    skip_credentials_validation = true
    skip_metadata_api_check = true
    skip_region_validation = true
    force_path_style = true
    
  }
}

Esta é a configuração do nosso backend , se você é acostumado a utilizar o S3, percebeu que é bem semelhante a configuração. Alguns campos é importante destacar, são eles:

endpoint Define o endereço do seu servidor Minio.
region Será ignorado com o skip_region_validation.

Um detalhe importante é o force_path_style – (Optional) Ele habilita o path-style S3 URLs (https://<HOST>/<BUCKET> ao invés de https://<BUCKET>.<HOST>).

Se vocês prestaram atenção, eu passei as credencias dentro do código, esta não é a forma recomendada, porém preferi deixar apenas para facilitar o teste, não façam isso.

Agora basta roda um init no terraform para que ele reconheça nosso backend.

terraform init

Se checarmos em nosso minio vamos ver que o arquivo foi criado dentro do bucket, como era o desejado.

Arquivo criado com sucesso

Com o resultado esperado, finalizamos os procedimentos.

Este post foi motivado pelo grupo do telegram do curso Descomplicando Terraform e tem como fonte o post https://dickingwithdocker.com/2019/02/terraform-s3-remote-state-with-minio-and-docker/

Para o post eu usei as seguintes versões de ferramentas.

/app # terraform -v
Terraform v0.12.28
+ provider.vsphere v1.14.0

Your version of Terraform is out of date! The latest version
is 0.13.4. You can update by downloading from https://www.terraform.io/downloads.html
% docker-compose -v
docker-compose version 1.27.4, build 40524192
minio:RELEASE.2020-10-03T02-19-42Z

Espero ter colaborado.

Valeu!!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s