Projeto desenvolvido para automatizar a infraestrutura de uma solução de API Gateway resiliente, auto-escalável e utilizando de tecnologias 100% como serviço na AWS Cloud. No final da execução, teremos um API Gateway Fazendo redirecionamento de uma URI para outra, no meu caso:
De: mlm189580.categories.meli.api.slashicorp.com.br
Para: api.mercadolibre.com/categories/MLM189580
- Instalando Terraform
- Instalando AWS CLI
- Para configurar o aws-cli com este usuário, siga o
how-to
disponivel em: Configurando AWS CLI - Configurando Terraform Cloud
- Para configurar o tf-cloud faz-se necessário cadastrar um usuário em: Sing up
- Terraform Documentation
Para garantir que seu Terraform consiga realizar a criação de todos recursos contidos neste projeto, recomendo a criação de um User (exemplo terraform-user
), garanta que ele possua as seguintes permissões, do contrário, permita apenas acesso aos resources que deseja provisionar.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSpecifics",
"Action": [
"ec2:*",
"rds:*",
"s3:*",
"sns:*",
"sqs:*",
"iam:*",
"elasticloadbalancing:*",
"autoscaling:*",
"cloudwatch:*",
"cloudfront:*",
"route53:*",
"ecr:*",
"logs:*",
"ecs:*",
"application-autoscaling:*",
"logs:*",
"events:*",
"elasticache:*",
"es:*",
"kms:*",
"dynamodb:*"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "DenySpecifics",
"Action": [
"iam:*User*",
"iam:*Login*",
"iam:*Group*",
"iam:*Provider*",
"aws-portal:*",
"budgets:*",
"config:*",
"directconnect:*",
"aws-marketplace:*",
"aws-marketplace-management:*",
"ec2:*ReservedInstances*"
],
"Effect": "Deny",
"Resource": "*"
}
]
}
.
├── app
│ ├── Dockerfile
│ └── proxy.conf
├── img
│ └── cover.png
└── terraform
├── alb.tf
├── autoscaling.tf
├── deploy.sh
├── destroy.sh
├── dev
│ ├── backend.hcl
│ ├── template-container-definition.json
│ └── terraform.tfvars
├── ecr.tf
├── ecs.tf
├── iam.tf
├── locals.tf
├── logs.tf
├── main.tf
├── network.tf
├── outputs.tf
├── prod
│ ├── backend.hcl
│ ├── template-container-definition.json
│ └── terraform.tfvars
├── security.tf
└── variables.tf
A criação do container é relativamente simples, subimos uma imagm base NGINX:LATEST
, removemos as configurações default do nginx e aplicamos uma configuração previa para realizar o redirecionamento com o método return 301
da request_uri
redirecionando da URI: mlm189580.categories.meli.api.slashicorp.com.br
para API: api.mercadolibre.com/categories/MLM189580
Configurações contidas no path app
.
Realizamos o push da imagem para o ECR
em tempo de execução e aplicamos a mesma ao ECS
.
Para iniciar o projeto, é necessário definir o backend.hcl (Hashicorp Language
), para os ambientes de DEV
e PRD
contidos no path terraform
do pojeto, altere a organização e o workspaces que deseja armazenar e/ou executar seu state em https://app.terraform.io.
Caso queira mais informações acesse sobre como utilizar a workspace default
: CLI-driven runs
Para executar todo o procedimento para construir ou destruir os resources basta executar os scripts deploy.sh
e destroy.sh
no path terraform
.
Torne eles executáveis para o sistema aplicando o seguinte comando:
$ chmod +x deploy.sh && chmod +x destroy.sh
Para mudar de ambiente altere a variavel ENV
no arquivo, default é DEV
.
$ cd terraform
$ bash ./deploy.sh
Para mudar de ambiente altere a variavel ENV
no arquivo, default é DEV
.
$ cd terraform
$ bash ./destroy.sh