Pular para o conteúdo

Infraestrutura Elástica na AWS com Infrastructure as Code

  • por
iac

Na jornada para construir uma infraestrutura elástica na AWS usando Infrastructure as Code (IaC), várias ferramentas e práticas são essenciais para garantir flexibilidade e eficiência, tudo isso com Terraform e Ansible. Um dos pilares desse processo é a utilização da launch template, que, por meio de scripts de configuração, simplifica o gerenciamento das instâncias EC2. Isso é crucial em ambientes de desenvolvimento, onde as configurações evoluem rapidamente.

Para instalar o Terraform no Ubuntu, utilize o comando abaixo:

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt install terraform

Definição da instância EC2

resource “aws_instance” “minha_instancia” {
ami = “ami-xxxxxxxx” # Substitua pela AMI desejada
instance_type = “t2.micro” # Tipo de instância
subnet_id = “subnet-xxxxxxxx” # Substitua pela subnet desejada

tags = {
Name = “MinhaInstancia”
}
}

Criação do Launch Template baseado na instância

resource “aws_launch_template” “meu_launch_template” {
name_prefix = “meu-launch-template-“
description = “Launch Template baseado na instância existente”

block_device_mappings {
device_name = “/dev/sda1”
ebs {
volume_size = 20
}
}

network_interfaces {
network_interface_id = aws_instance.minha_instancia.network_interface_ids[0]
}

lifecycle {
create_before_destroy = true
}
}

Definição de variáveis

variable “nomes_grupos_seguranca” {
type = list(string)
default = [“grupo-seguranca-dev”, “grupo-seguranca-prod”] # Exemplo de nomes de grupos de segurança
}

Criação dos grupos de segurança dinâmicos

resource “aws_security_group” “grupos_seguranca” {
count = length(var.nomes_grupos_seguranca)

name = var.nomes_grupos_seguranca[count.index]
description = “Grupo de Segurança ${var.nomes_grupos_seguranca[count.index]}”
vpc_id = “vpc-xxxxxxxx” # Substitua pela ID da sua VPC

# Regras de entrada e saída podem ser configuradas conforme necessidade
ingress {
from_port = 80
to_port = 80
protocol = “tcp”
cidr_blocks = [“0.0.0.0/0”]
}

egress {
from_port = 0
to_port = 0
protocol = “-1”
cidr_blocks = [“0.0.0.0/0”]
}
}

O operador ternário (boleano) se destaca ao determinar se uma instância deve ser configurada ou não, ajustando-se perfeitamente às mudanças constantes típicas desses ambientes. Essa flexibilidade é ideal para ambientes dinâmicos, onde adaptabilidade é fundamental.

O autoscaling group é outra peça-chave, automatizando a criação e destruição de instâncias EC2 conforme a demanda. Essa automação não apenas otimiza os recursos, mas também assegura que a aplicação esteja sempre disponível e responsiva, ajustando-se dinamicamente às variações de tráfego.

O load balancer complementa o autoscaling group ao distribuir as requisições entre os servidores, garantindo um carregamento balanceado e eficiente. Isso não só melhora o desempenho da aplicação, mas também aumenta sua capacidade de resposta às demandas dos usuários.

exemplo de load balancer

resource "aws_lb_target_group" "alvoLoadBalancer" {
  name     = "tf-example-lb-tg"
  port     = "8000"
  protocol = "HTTP"
  vpc_id   = aws_default_vpc.default.id
}

Para controlar o dimensionamento automático das instâncias, configuramos políticas de auto scaling baseadas no consumo de CPU, usando novamente o operador ternário para determinar o momento adequado para criar novos recursos.

No ambiente de desenvolvimento, a flexibilidade é ainda maior com a adição de novas variáveis conforme necessário. Já no ambiente de produção, a automação é a palavra-chave: scripts configuram automaticamente cada máquina, instalando e configurando ferramentas essenciais como o pip e o Ansible, garantindo assim consistência e segurança na implantação.

Adotar uma infraestrutura elástica na AWS com IaC não apenas simplifica o gerenciamento de recursos, mas também melhora a escalabilidade, segurança e eficiência operacional de aplicações na nuvem.