Estrutura do frontend
O frontend é composto por apenas uma página, que possui diversos componentes ligados à ela, e entre eles, temos:
Função do frontend
Todos os componentes presentes na página central são responsáveis por construir um arquivo .json
de formato:
{ "security_groups": [], "user_groups": [], "users": [], "instances": []}
que servirá de base para as variáveis de ambiente necessárias para a criação do ambiente dentro do Terraform.
E então o arquivo .json
é enviado para o backend, que irá gerar o arquivo my_variables.json
e utilizá-lo para executar o Terraform.
Mais informações sobre como a integração entre o frontend e o backend é feita podem ser encontradas mais para frente dentro do tópico de Rest API.
SecurityGroups.tsx
O componente SecurityGroups.tsx
é responsável por criar as regras de segurança para as instâncias que serão criadas. Ele possui os seguintes campos:
- Name: Nome da regra de segurança
- Description: Descrição da regra de segurança
- Protocol: Protocolo da regra de segurança
- From Port: Porta de origem da regra de segurança
- To Port: Porta de destino da regra de segurança
- CIDR Block: Bloco de IP's autorizados
Instances.tsx
O componente Instances.tsx
é responsável por criar as instâncias que serão utilizadas no ambiente. Ele possui os seguintes campos:
- Name: Nome da instância
- Region: Região onde a instância será criada, com a AMI padrão para a região selecionada (Ubuntu 18.02)
- Instance Type: Tipo da instância
- Security Groups: Regras de segurança da instância (se não for selecionado nenhum grupo, a instância será criada com um grupo padrão)
UserGroups.tsx
O componente UserGroups.tsx
é responsável por criar os grupos de usuários que serão utilizados no ambiente. Ele possui os seguintes campos:
- Name: Nome do grupo de usuários
- Description: Descrição do grupo de usuários
- Actions: Ações que o grupo de usuários pode realizar no ambiente
- Resources: Recursos que o grupo de usuários pode acessar no ambiente
Users.tsx
O componente Users.tsx
é responsável por criar os usuários que serão utilizados no ambiente. Ele possui os seguintes campos:
- Username: Nome do usuário
- User Groups: Grupos de usuários que o usuário pertence (o usuário pode ou não pertencer a algum grupo)
- Restriction Name: Nome da restrição optativa aplicada diretamente ao usuário
- Description: Descrição da restrição
- Action: Ações que o usuário pode realizar no ambiente
- Resource: Recursos que o usuário pode acessar no ambiente
Resume.tsx
O componente Resume.tsx
é responsável por mostrar um resumo das informações inseridas no frontend, e também possui um botão para enviar as informações para o backend.
Exemplo de um arquivo .json
gerado pelo frontend:
{ "security_groups": [ { "id": "1", "name": "sg1", "description": "sg1", "ingress": [ { "protocol": "tcp", "from_port": "22", "to_port": "22", "cidr_blocks": ["0.0.0.0/0"] }, { "protocol": "tcp", "from_port": "80", "to_port": "80", "cidr_blocks": ["0.0.0.0/0"] } ], "egress": [ { "protocol": "-1", "from_port": "0", "to_port": "0", "cidr_blocks": ["0.0.0.0/0"] } ] } ], "instances": [ { "name": "instance1", "region": "us-east-1", "instance_type": "t2.micro", "security_group_ids": ["1"] }, { "name": "instance2", "region": "us-east-1", "instance_type": "t2.micro", "security_group_ids": [] } ], "user_groups": [ { "id": "1", "name": "group1", "description": "group1", "actions": ["ec2:DescribeInstances"], "resources": ["*"] }, { "id": "2", "name": "group2", "description": "group2", "actions": ["ec2:StartInstances", "iam:ChangePassword"], "resources": ["*"] } ], "users": [ { "id": "1", "username": "user1", "user_group_ids": ["1"], }, { "id": "2", "username": "user2", "user_group_ids": ["1"], "restriction_name": "restriction2", "description": "restriction2", "actions": ["ec2:StartInstances", "iam:ChangePassword"], "resources": ["*"] } ]}