Projeto consiste em subir uma infra na AWS através de uma pipeline .gitlab-ci.yml onde serão provisionados 4 hosts t2.micro, 2 Linux e 2 Windows utlizando Terraform, em seguida será realizado configuração do Apache nos 2 servidores Windows e NGINX no 2 servidores Linux utilizando Ansible.
Obseração: Trata-se da implementação do desafio: TIS-Automation-Challenge.
- Conta na AWS - No caso a princípio o projeto só utiliza recursos da Freetier.
- Identity and Access Management (IAM) - Necessário criar usuário na AWS para inserir os dados do mesmo nas variáveis e conseguir criar o ambiente.
- Bucket S3 - Criar um bucket na AWS e Alterar o arquivo
backend.tf
alterando o nome do bucket para o que foi criado. - Chave PEM - Gerar chave PEM com nome
chave_privada_gitlab
, caso crie com outro nome será necessário alterar a variavel e os arquivos do terraform e da pipeline. - Gitlab - Com uma conta free no Gitlab, já é possível executar a pipeline.
Para utlizar o projeto será necessário acessar o mesmo através do link TIS-Automation-Challenge , em seguida realizar um Fork do mesmo clicando em Fork. Observação: Necessário estar logado em sua conta do GitLab.
Em seguida será necessário criar as variáveis necessárias para execução da Pipeline, estando na pagina do projeto após o Fork, deverá acessar Settings>CI/CD>Variables>Expand .
Criar as seguintes variáveis:
KEY | Type | Value |
---|---|---|
AWS_ACCESS_KEY_ID | Variable | ID do usuário criado na AWS em IAM |
AWS_SECRET_ACCESS_KEY | Variable | Secret gerada para o usuário criado na AWS em IAM |
chave_privada_gitlab | File | Conteudo do arquivo de chave privada PEM gerado |
SSH_PRIVATE_KEY | Variable | Conteudo do arquivo de chave privada PEM gerado |
TF_VAR_admin_password | Variable | Senha que será configurada para o usuário Administrator do servidores Windows |
Após realizar as configurações poderá executar a pipeline através do menu CI/CD>Pipelines ou executando um commit na branch Master, será iniciado a execução da pipeline que contém os seguintes estágios.
- validate - Executado automativamente. Realiza a validação dos arquivos do terraform.
- plan - Executado automaticamente caso validate ocorra com sucesso. Realiza o plan do terraform e informa um plano detalhado do que será executado.
- apply - Optei por deixar para ser executado manualmente, porém ele depende do estágio do plan ter sido executado com sucesso, esse estágio realiza a criação do ambiente conforme descrito nos arquivos do terraform.
- ansible - Realiza o provisionamento configurando os hosts com Ansible, este passo também está como manual.
- destroy - Estagio que realiza o destroy do ambiente removendo todos os recursos criados. Estágio deve ser executado de forma manual quando desejar destruir o ambiente.
- Criação da API foi criada uma versão inicial, porém ainda não foi concluída a integração da mesma no pipeline conforme descrito na sessão API.
- Configuração do WinRM (Windows Remote Management), porém o obstáculo foi superado utilizando o
user_data
para executar script powershell, disponibilizado na documentação do Ansible, durante a criação dos hosts Windows.
- Podemos realizar melhorias no código do terraform com utilização de modulos o que facilitaria inclusive a reutilização do código em novos projetos.
- Criação de novos recursos que poderiam trazer melhorias e mais robustes para nossa infra como Virtual Private Cloud, Subnet, Internet Gateway, tabela de roteamento, etc...
Foi realizada a criação de uma versão inicial da API, porém ainda não foi realizada a integração no pipeline para realização de deploy e provisionamento da mesma.
Caso deseje realizar testes da mesma rodando localmente poderá realizar criando um virtualenv com python e instalando os requirements conforme arquivo api/api/requirements.txt
em seguida executando o comando python manage.py runserver
foi utilizado o Python 3.8.10, estando em execução poderá realizar testes acessando o endpoint http://localhost:8000
ou http://localhost:8000/textos/
.