Django Rest Framework API
O backend é compsto por uma API REST construída com o Django Rest Framework. A API é responsável por gerenciar as reqisições e respostas da aplicação.
As requisições que podem ser feitas são:
GET
O método GET é responsável por retornar os dados contidos no arquivo my_variables.json
, que é por onde sabemos se existe algo já criado pelo Terraform ou se o ambiente está vazio.
O arquivo my_variables.json
é criado automaticamente pelo backend, caso não exista.
POST
Este é o método utilizado pelo Frontend para enviar o arquivo my_variables.json
para o backend. O arquivo é enviado para o backend e o mesmo o salva em um diretório específico, que é o mesmo que o Terraform utiliza para ler os dados.
Apesar de tratar o arquivo recebido pela requisição como as váriaveis de ambiente, o mesmo não é utilizado por conta da complexidade das possíbilidades de configuração do Terraform.
Por conta disso, é necessário que o arquivo recebido seja tratado previamente para que o Terraform consiga ler e interpretar corretamente.
Processando o arquivo
Os dados em JSON
recebidos pelo backend são processados e salvos em um arquivo chamado my_variables.json
,
que vai servir como controle para a nossa interface para sabermos o que está presente atualmente em nosso ambiente.
As complexidades presentes que impossibilitam o uso do arquivo my_variables.json
como variáveis de ambiente são:
Para ser possível a criação de uma VPC e uma subnet (vamos saber o que são essas coisas no tópico tf/network) por região, é necessária a criação de workspaces dentro do Terraform.
A criação de usuários e de grupos de usuários não necessita de uma região específica vinculado a eles, já que eles são globais.
Ou seja, precisamos dividir o arquivo my_variables.json
em duas partes:
- Um arquivo
default.json
para a criação dos usuários e grupos de usuários. - Para a criação das instâncias, grupos de segurança, subnets e VPC será necessário a criação de um dicionário, em python, com os nomes das regiões como chaves, e as instâncias pertencentes à região e seus grupos de segurança associados como valores.
Com o arquivo default.json
criado, vamos acessar o workspace de nome default e criar os usuários e grupos de usuários.
Já com o dicionário construído, vamos criar um workspace para cada região, assim como um arquivo de váriaveis de âmbiente com o nome de cada região, e criar as instâncias, grupos de segurança, subnets e VPC.
O arquivo default.json
assim como os arquivos .json
para cada região são criados automaticamente pelo backend.