mentoriaiac / Makefiles

8 stars 8 forks source link

Teste local sem precisar de dados da AWS #6

Closed gomex closed 3 years ago

gomex commented 3 years ago

A forma como executamos os comandos hoje obriga que a pessoa utilize o backend S3. Ele pode ser o backend indicado por nosso projeto a ser usado. Isso é bom e não tenho nada contra isso, mas precisa oferecer uma forma de teste local que não precise disse, afinal o nosso código terraform que está na pasta test/terraform não precisa de credencial na AWS para nada, sendo assim seria muito bom que a pessoa a usar isso localmente para testar também não tivesse.

Isso seria muito bom para o CI/CD também, pois poderíamos colocar um make test e assim testar um fluxo mais completo do uso desse terraform.inc.

Isso envolve mudar alguns pontos:

O backend precisa ser variável

Ao invés de:

echo -e "terraform {\nbackend "s3" {}\n}" > backend.tf

Poderia ser:

echo -e "terraform {\nbackend "${TERRAFORM_BACKEND}" {}\n}" > backend.tf

A configuração do backend precisa sair do init

Hoje o init demanda esse tipo de configuração por padrão:

terraform-init: terraform-generate-backend ## Execute terraform init in terraform files
    echo "STEP: terraform-init - Execute terraform init in terraform files"
    cd ./${TERRAFORM_FOLDER}/ && \
    terraform init \
    -backend-config="key=${PROJECT_NAME}/terraform.tfstate" \
    -backend-config="region=${AWS_REGION}" \
    -backend-config="bucket=${BUCKET_NAME}" 

Minha sugestão é que ele saia desse passo e vá para terraform-generate-backend mas podemos sugerir outro local, sem problemas.

Onde está o global.vars?

Precisamos colocar um valor default para isso, para evitar que isso quebre o uso no teste local. A necessidade desse arquivo não está no README, mas mesmo que estivesse, eu optaria por colocar um valor default, mas podemos discutir sobre isso.

marcelomansur commented 3 years ago

O PR #8 resolveu os testes locais executando no pipeline o make test a partir do diretório examples/terraform/local-backend.

Falta a definição do global.vars

marcelomansur commented 3 years ago

@gomex necessitamos mesmo definir um arquivo global.vars?

Acredito que o módulo poderia ser consumido usando os valores padrão de Input Variables, ou seja, terraform.tfvars, terraform.tfvars.json, *.auto.tfvars.

Podemos criar exemplos de utilização de um desses arquivos dentro do diretório examples.

gomex commented 3 years ago

@marcelomansur eu apoio sim. O arquivo global.vars foi a escolha dessa implementação, mas curto muito mais a ideia de usar esses arquivos da forma que sugeriu sim.

gomex commented 3 years ago

Decidimos colocar informação sobre como passar variável para o terraform dentro da documentação do terraform: https://github.com/mentoriaiac/Makefiles/tree/main/examples/terraform