Skip to content

dihogoteixeira/tf-cloud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[ NGINX API Gateway ] - ECS FARGATE Autoscaling

Terraform-cloud Terraform-0-14-5 aws cli aws ecr aws ecs aws vpc aws alb aws autoscaling aws iam

Topologia proposta - aws

FINALIDADE DO PROJETO

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

A STACK CONSISTE EM IMPLEMENTAR

  1. VPC
  2. SUBNET
  3. SG
  4. IGW
  5. RT
  6. EIP
  7. NGW
  8. ECR
  9. ECS
  10. IAM

PRÉ REQUISITOS

Preparando o ambiente:

  1. Instalando Terraform
  2. Instalando AWS CLI
  3. Para configurar o aws-cli com este usuário, siga o how-to disponivel em: Configurando AWS CLI
  4. Configurando Terraform Cloud
  5. Para configurar o tf-cloud faz-se necessário cadastrar um usuário em: Sing up
  6. Terraform Documentation

Permissões necessárias para terraform-user:

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": "*"
        }
    ]
}

Estrutura do projeto

.
├── 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

Conteúdo do container

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.

Preparando Environment do TF-CLOUD

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

Tornando seus scripts executáveis

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

Executando o DEPLOY dos resources

Para mudar de ambiente altere a variavel ENV no arquivo, default é DEV.

$ cd terraform
$ bash ./deploy.sh

Executando o DESTROY dos resources

Para mudar de ambiente altere a variavel ENV no arquivo, default é DEV.

$ cd terraform
$ bash ./destroy.sh

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published