Esta pipeline provisiona a infraestrutura e realiza o deploy de uma aplicação Strapi na AWS utilizando Terraform, Ansible e Docker Swarm. A infraestrutura inclui instâncias EC2, RDS, S3 e CloudFront. Além disso, utilizamos Traefik como load balancer, proxy reverso com certificado SSL gratuito emitido pelo Let's Encrypt e dimínio dinâmico criado pelo DuckDNS.
- Renomeie .env.example para .env, env.example.tf para variables.tf e o vars.example.yml para vars.yml.
- Configure um usuário IAM com acesso programático com as seguintes permisões:
"Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:PutObjectAcl" ],
- Obtenha as chave de acesso e secret key do usuário IAM.
- Instale e configure o AWS CLI.
- Instale o Terraform e Ansible.
- Obtenha o token e subdomínio no duckdns.
Configure as credenciais do AWS CLI:
aws configure
Para acesso SSH à instância EC2, indique a chave pública em /terraform/variables.tf:
resource "aws_key_pair" "terraform-key" {
key_name = "terraform-key"
public_key = file("~/.ssh/id_rsa.pub")
}
./start.sh
./destroy.sh
O objetivo foi provisionar infraestrutura simples e de baixo custo, utilizando serviços gratuitos da AWS. DNS dinâmico criado pelo DuckDNS, juntamente com um certificado SSL gerado pelo Let's Encrypt de forma gratuíta. A aplicação possui 2 réplicas do Strapi, 1 réplica do Traefik e 1 réplica do duckdns. Utiliza 1 instância EC2 t2.micro, 1 instância RDS db.t3.micro, 1 bucket S3, 1 distribuição CloudFront. O bucket S3 é privado e assível apenas pelo CloudFront que atua como CDN diminuindo os custos de transferência de dados do bucket S3 para a internet.