Terraform é uma ferramenta de infraestrutura como código criada pela HashiCorp. Ela permite automatizar a criação e a modificação de recursos de infraestrutura usando a linguagem declarativa de configuração HCL.
Neste guia, veremos como gerenciar regras de balanceador de carga usando Terraform.
Um balanceador de carga de rede permite distribuir uniformemente o tráfego de entrada entre vários servidores para melhorar a disponibilidade e a confiabilidade do seu serviço. Ele é uma ferramenta indispensável ao implementar o escalonamento horizontal de serviços.
O escalonamento horizontal é o processo de adicionar nós ou máquinas adicionais a uma infraestrutura existente para aumentar sua capacidade e lidar com um volume maior de tráfego.
Primeiro, definimos os requisitos para o balanceador de carga:
Para adicionar uma regra ao nosso balanceador de carga, precisamos criá-lo e configurar o balanceamento entre servidores. Adicionamos dois servidores para configurar o balanceamento de carga entre eles.
Em seguida, criamos um projeto Terraform. Consulte este guia para mais detalhes sobre como instalar e configurar o provider.
Primeiro, crie uma pasta onde as configurações serão armazenadas:
mkdir hostman-lb
cd hostman-lb
A estrutura de arquivos fica assim:
├── hostman-lb
│ ├── main.tf
│ ├── variables.tf
No arquivo variables.tf, especificamos variáveis para o token do provider e os endereços IP usados no balanceamento de carga:
variable "hm_token" {
type = string
sensitive = true
}
variable "lb-ips" {
type = set(string)
}
No arquivo main.tf, adicionamos as informações do provider:
terraform {
required_providers {
hm = {
source = "hostman-cloud/hostman"
}
}
required_version = ">= 0.13"
}
provider "hm" {
token = var.hm_token
}
Ao descrever uma configuração do Terraform, usamos dois tipos principais de entidades: data sources (data) e resources.
No main.tf, especificamos um preset para a configuração:
data "hm_lb_preset" "lb-preset" {
requests_per_second = "10K"
price_filter {
from = 100
to = 200
}
}
Se você usa projetos no painel de controle, pode especificar o projeto onde os recursos serão criados. Por exemplo, adicionamos um projeto chamado "Docs":
data "hm_projects" "docs" {
name = "Docs"
}
O recurso que vamos criar se chama hm_lb. Ao criá-lo, você pode especificar vários parâmetros opcionais, como configurações de verificação de integridade e algoritmo de balanceamento de carga. Usaremos a configuração mais simples:
resource "hm_lb" "load-balancer" {
name = "load-balancer"
algo = "roundrobin"
project_id = data.hm_projects.articles.id
preset_id = data.hm_lb_preset.lb-preset.id
health_check {
proto = "tcp"
port = 80
}
ips = var.lb-ips
}
Outros parâmetros que podem ser especificados incluem:
ips: lista de endereços IP para balanceamentois_keepalive: indicador que define se a conexão TCP com o servidor deve ser mantidais_ssl: redirecionamento automático para HTTPSis_sticky: manter a sessão do usuário em um único servidor backendTambém adicionamos um arquivo .tfvars ao projeto com valores para as variáveis definidas em variables.tf:
hm_token = "<insira aqui a chave de API do provider>"
lb-ips = [ "<IP do primeiro servidor>", "<IP do segundo servidor>" ]
Em seguida, execute:
terraform validate
Se tudo estiver correto, você verá uma mensagem de sucesso.
Para ver quais recursos serão criados, execute:
terraform plan -var-file=.tfvars
A flag -var-file=.tfvars permite que o Terraform use os valores de variáveis definidos nesse arquivo.
As variáveis também podem ser definidas de outras formas:
-var="hm_token=243453452345235456643"export TF_VAR_hm_token=243453452345235456643
Uma regra no balanceador de carga refere-se à configuração de encaminhamento de portas. Para qualquer regra, é necessário especificar:
Adicione um novo recurso à configuração no main.tf:
resource "hm_lb_rule" "lb-rule" {
lb_id = resource.hm_lb.load-balancer.id
balancer_proto = "http"
balancer_port = 80
server_proto = "http"
server_port = 80
}
Execute os comandos novamente:
terraform validate
terraform plan -var-file=.tfvars
terraform apply -var-file=.tfvars
Confirme digitando yes.
No painel de controle, você verá os recursos criados:
Acesse o endereço do balanceador de carga (duas vezes para alcançar servidores diferentes):
Se for necessária uma segunda regra, por exemplo, para uma nova aplicação que roda na porta 81, basta adicionar outro bloco de recurso:
resource "hm_lb_rule" "lb-second-rule" {
lb_id = resource.hm_lb.load-balancer.id
balancer_proto = "http"
balancer_port = 81
server_proto = "http"
server_port = 81
}
Execute:
terraform plan -var-file=.tfvars
Você verá que um balanceador de carga e uma regra já existem, e que uma nova regra será adicionada.
Depois execute:
terraform apply -var-file=.tfvars
Confirme a aplicação da configuração quando solicitado.
Verifique o painel de controle: agora duas regras estão configuradas. Acesse o endereço do balanceador de carga para confirmar que tudo está funcionando corretamente.
Neste guia, aprendemos como criar balanceadores de carga de rede e regras usando Terraform. Além do Terraform, os balanceadores de carga também podem ser gerenciados via API.