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.