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:

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.

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.

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.

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

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!!