Este projeto utiliza Terraform para provisionar a infraestrutura necessária e GitHub Actions para automação do deploy da aplicação no AWS Elastic Beanstalk.
Antes de começar, certifique-se de que você tem os seguintes requisitos instalados:
- Terraform (versão recomendada:
>= 1.0.0
) - AWS CLI configurado (
aws configure
) - GitHub CLI
- Permissões adequadas no AWS IAM para criar recursos no Elastic Beanstalk
- Um bucket S3 para armazenar os pacotes da aplicação
O provisionamento da infraestrutura é feito com Terraform.
cd infra
terraform init
terraform validate
terraform plan -var-file=environments/hml.tfvars
Para staging (us-east-2
):
terraform apply -var-file=environments/hml.tfvars -auto-approve
Para produção (us-east-1
):
terraform apply -var-file=environments/prd.tfvars -auto-approve
O deploy é automatizado via GitHub Actions, mas também pode ser feito manualmente.
cd src
zip -r ../app.zip . -x ".git/*" "__pycache__/*" "venv/*" "*.DS_Store"
aws s3 cp ../app.zip s3://meu-bucket-deploy/app.zip
aws elasticbeanstalk create-application-version \
--application-name 4linux-devops-samequemendes \
--version-label app-$(date +%Y%m%d%H%M%S) \
--source-bundle S3Bucket=meu-bucket-deploy,S3Key=app.zip
aws elasticbeanstalk update-environment \
--environment-name 4linux-devops-samequemendes-env \
--version-label app-$(date +%Y%m%d%H%M%S)
A pipeline do GitHub Actions é dividida em quatro etapas principais:
- Lint & Testes → Valida a qualidade do código.
- Deploy da Infraestrutura → Provisiona a infraestrutura na AWS via Terraform.
- Deploy da Aplicação → Faz upload do pacote para o S3 e atualiza o Beanstalk.
- Destroy Manual (Opcional) → Pode ser acionado manualmente para destruir a infraestrutura.
Se precisar rodar a pipeline manualmente:
- Vá até GitHub → Actions.
- Escolha o workflow "Deploy Infra & App".
- Clique em "Run workflow" e selecione o ambiente (
staging
ouprod
).
A destruição do ambiente precisa ser aprovada manualmente.
- Vá até GitHub → Actions.
- Escolha o workflow "Destroy Infra".
- Clique em "Run workflow" e aprove a execução.
Para staging:
terraform destroy -var-file=environments/hml.tfvars -auto-approve
Para produção:
terraform destroy -var-file=environments/prd.tfvars -auto-approve
- Terraform → Provisionamento da infraestrutura.
- AWS Elastic Beanstalk → Hospedagem da aplicação.
- AWS S3 → Armazenamento do pacote da aplicação.
- GitHub Actions → Automação de deploys.
- Python (Flask) → Aplicação backend.
Para clonar e rodar este projeto corretamente, configure as seguintes variáveis de ambiente:
AWS_ACCESS_KEY_ID
→ Chave de acesso AWSAWS_SECRET_ACCESS_KEY
→ Chave secreta AWSAWS_REGION
→ Região da AWS (us-east-1
ouus-east-2
)S3_BUCKET
→ Nome do bucket S3 onde os pacotes serão armazenadosAPP_NAME
→ Nome da aplicação no Elastic BeanstalkENVIRONMENT_NAME
→ Nome do ambiente no Beanstalk (hml
ouprd
)
- Implementar monitoramento com CloudWatch.
- Configurar Auto Scaling para otimizar custos.
- Adicionar tests unitários e integração na pipeline.
Se tiver dúvidas ou quiser contribuir, fique à vontade! 🚀🔥