Publicação Técnica · Amazon Rds
Implementando autoscaling de instâncias Amazon RDS
Para atender aos requisitos de conectividade e de workload, a autoescalabilidade do Aurora ajusta dinamicamente o número de réplicas do…
Palavras-chave
Para atender aos requisitos de conectividade e de workload, a autoescalabilidade do Aurora ajusta dinamicamente o número de réplicas do Aurora provisionadas para um cluster de banco de dados Aurora. O Auto Scaling do Aurora está disponível para ambos Aurora MySQL e Aurora PostgreSQL. O Auto Scaling do Aurora permite que o cluster de banco de dados Aurora processe aumentos repentinos de conectividade ou de workload. Quando a conectividade ou a workload diminui, o Auto Scaling do Aurora elimina as réplicas desnecessárias do Aurora para que você não pague por instâncias de banco de dados provisionadas não usadas.
Você define e aplica as políticas de escalabilidade do Aurora para um cluster de banco de dados. A política de escalabilidade define o número mínimo e máximo de réplicas do Aurora que o Auto Scaling do Aurora pode gerenciar. Com base nas políticas, o Auto Scaling do Aurora ajusta o número de réplicas do Aurora para mais ou para menos em resposta às workloads reais, usando as métricas e valores de destino do Amazon CloudWatch.

Entretanto, é possível configurar o autoscaling de instâncias do Amazon RDS para lidar com variações na demanda de recursos de CPU e memória. Diferentemente do Amazon Aurora, o Amazon RDS não possui um recurso de autoscaling nativo integrado. Neste post, exploraremos como implementar essa automação tanto com o AWS CloudFormation como com o Terraform.
Autoscaling de instâncias de banco de dados Amazon RDS com o AWS CloudFormation
Certifique-se de ter o AWS Command Line Interface (CLI) instalado e configurado corretamente no seu ambiente local antes de começar.
Passo 1: Criar o grupo de instâncias do RDS: Comece criando o grupo de instâncias do RDS. O Multi-AZ já será habilitado por padrão para garantir alta disponibilidade. Você pode usar um template do AWS CloudFormation para fazer isso. Crie um arquivo chamado "rds-autoscaling.yaml" e adicione o seguinte código:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
RDSInstance:
Type: 'AWS::RDS::DBInstance'
Properties:
DBInstanceIdentifier: MyDBInstance
Engine: aurora
EngineVersion: '5.7.mysql_aurora.2.03.2'
DBInstanceClass: db.t2.medium
AllocatedStorage: '20'
MultiAZ: true
Certifique-se de substituir "MyDBInstance" por um nome exclusivo para sua instância do RDS.
Passo 2: Criar o grupo de escalonamento do EC2: Agora, crie um grupo de escalonamento do Amazon EC2 para permitir que as instâncias do RDS sejam escalonadas automaticamente. Crie um novo arquivo chamado "ec2-autoscaling.yaml" e adicione o seguinte código:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
EC2AutoScalingGroup:
Type: 'AWS::AutoScaling::AutoScalingGroup'
Properties:
AvailabilityZones:
- 'us-east-1a'
- 'us-east-1b'
LaunchConfigurationName: MyLaunchConfiguration
MinSize: 1
MaxSize: 5
DesiredCapacity: 2
MyLaunchConfiguration:
Type: 'AWS::AutoScaling::LaunchConfiguration'
Properties:
ImageId: ami-12345678 # Substitua pelo ID da imagem EC2 desejada
InstanceType: t2.micro
UserData:
Fn::Base64: !Sub |
#!/bin/bash
echo "Starting RDS autoscaling..."
aws rds modify-db-instance \
--db-instance-identifier MyDBInstance \
--db-instance-class db.t2.medium
Certifique-se de substituir "us-east-1a" e "us-east-1b" pelas zonas de disponibilidade desejadas e "ami-12345678" pelo ID da imagem EC2 desejada.
Passo 3: Criar a política de escalonamento: Em seguida, crie uma política de escalonamento para definir as regras de dimensionamento automático do grupo de escalonamento do EC2. Adicione o seguinte código ao arquivo "ec2-autoscaling.yaml" na seção "Resources":
MyScalingPolicy:
Type: 'AWS::AutoScaling::ScalingPolicy'
Properties:
AdjustmentType: ChangeInCapacity
AutoScalingGroupName: !Ref EC2AutoScalingGroup
Cooldown: '300'
ScalingAdjustment: '1'
Passo 4: Criar a ação de alarme: Agora, crie uma ação de alarme para monitorar as métricas do RDS e acionar o dimensionamento automático do grupo de escalonamento do EC2 quando necessário. Adicione o seguinte código ao arquivo "ec2-autoscaling.yaml" na seção "Resources":
MyAlarm:
Type: 'AWS::CloudWatch::Alarm'
Properties:
AlarmDescription: 'RDS CPU Utilization'
Namespace: AWS/RDS
MetricName: CPUUtilization
Dimensions:
- Name: DBInstanceIdentifier
Value: MyDBInstance
Statistic: Average
Period: '60'
EvaluationPeriods: '2'
Threshold: '70'
ComparisonOperator: GreaterThanOrEqualToThreshold
AlarmActions:
- !Ref MyScalingPolicy
Certifique-se de substituir "MyDBInstance" pelo nome exclusivo da instância do RDS.
Passo 5: Implementar as pilhas no AWS CloudFormation Agora, você pode implantar as pilhas no AWS CloudFormation usando o AWS CLI. Abra o terminal e execute os seguintes comandos:
aws cloudformation create-stack --stack-name RDSAutoscaling --template-body file://rds-autoscaling.yaml
aws cloudformation create-stack --stack-name EC2Autoscaling --template-body file://ec2-autoscaling.yaml
Aguarde até que a criação da pilha seja concluída.
Parabéns! Agora você configurou com sucesso um ambiente de autoscaling para instâncias do Amazon RDS com o Multi-AZ habilitado. O grupo de escalonamento do EC2 monitorará as métricas do RDS e adicionará ou removerá instâncias automaticamente com base nas regras de dimensionamento definidas.
Autoscaling de instâncias de banco de dados Amazon RDS com Terraform
Passo 1: Configuração do provedor e criação do grupo de instâncias do RDS: Comece criando um diretório para o seu projeto e navegue até ele. Em seguida, crie um arquivo chamado main.tf e adicione o seguinte código:
# Configuração do provedor AWS
provider "aws" {
region = "us-east-1" # Substitua pela região desejada
}
# Recurso de instância RDS
resource "aws_db_instance" "rds_instance" {
identifier = "my-db-instance" # Substitua pelo nome exclusivo da instância do RDS
engine = "aurora"
engine_version = "5.7.mysql_aurora.2.03.2"
instance_class = "db.t2.medium"
allocated_storage = 20
multi_az = true
}
Certifique-se de substituir “my-db-instance” pelo nome exclusivo que deseja atribuir à instância do RDS.
Passo 2: Criação do grupo de escalonamento do EC2: Agora, vamos criar o grupo de escalonamento do Amazon EC2. No mesmo arquivo main.tf, adicione o seguinte código abaixo do recurso aws_db_instance:
# Recurso de grupo de escalonamento do EC2
resource "aws_autoscaling_group" "ec2_autoscaling_group" {
name = "my-autoscaling-group" # Substitua pelo nome exclusivo do grupo de escalonamento
min_size = 1
max_size = 5
desired_capacity = 2
availability_zones = ["us-east-1a", "us-east-1b"] # Substitua pelas zonas de disponibilidade desejadas
launch_configuration = aws_launch_configuration.my_launch_configuration.name
}
# Recurso de configuração de inicialização da instância EC2
resource "aws_launch_configuration" "my_launch_configuration" {
name_prefix = "my-launch-config" # Substitua pelo prefixo do nome da configuração de inicialização
image_id = "ami-12345678" # Substitua pelo ID da imagem EC2 desejada
instance_type = "t2.micro"
user_data = <<-EOF
#!/bin/bash
echo "Starting RDS autoscaling..."
aws rds modify-db-instance \
--db-instance-identifier my-db-instance \
--db-instance-class db.t2.medium
EOF
}
Certifique-se de substituir “my-autoscaling-group” pelo nome exclusivo que deseja atribuir ao grupo de escalonamento e “ami-12345678” pelo ID da imagem EC2 desejada.
Passo 3: Criação da política de escalonamento: Agora, vamos criar uma política de escalonamento para definir as regras de dimensionamento automático do grupo de escalonamento do EC2. No mesmo arquivo main.tf, adicione o seguinte código abaixo do recurso aws_launch_configuration:
# Recurso de política de escalonamento
resource "aws_autoscaling_policy" "my_scaling_policy" {
name = "my-scaling-policy" # Substitua pelo nome exclusivo da política de escalonamento
autoscaling_group_name = aws_autoscaling_group.ec2_autoscaling_group.name
adjustment_type = "ChangeInCapacity"
scaling_adjustment = 1
cooldown = 300
}
Certifique-se de substituir “my-scaling-policy” pelo nome exclusivo que deseja atribuir à política de escalonamento.
Passo 4: Criação da ação de alarme: Agora, vamos criar uma ação de alarme para monitorar as métricas do RDS e acionar o dimensionamento automático do grupo de escalonamento do EC2 quando necessário. No mesmo arquivo main.tf, adicione o seguinte código abaixo do recurso aws_autoscaling_policy:
# Recurso de ação de alarme
resource "aws_cloudwatch_metric_alarm" "my_alarm" {
alarm_name = "rds-cpu-utilization"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = 2
metric_name = "CPUUtilization"
namespace = "AWS/RDS"
period = 60
statistic = "Average"
threshold = 70
alarm_description = "RDS CPU Utilization"
alarm_actions = [aws_autoscaling_policy.my_scaling_policy.arn]
dimensions = {
DBInstanceIdentifier = aws_db_instance.rds_instance.identifier
}
}
Passo 5: Inicialização e aplicação das configurações: Agora, abra um terminal na pasta do projeto e execute os seguintes comandos:
terraform init
Isso inicializará o diretório do projeto e baixará os plugins necessários.
terraform apply
Isso criará a infraestrutura especificada nos arquivos do Terraform. Confirme com “yes” quando solicitado.
Parabéns! Agora você configurou com sucesso um ambiente de autoscaling para instâncias do Amazon RDS com o Multi-AZ habilitado usando o Terraform. O grupo de escalonamento do EC2 monitorará as métricas do RDS e adicionará ou removerá instâncias automaticamente com base nas regras de dimensionamento definidas.
Comentários
Todo comentário passa por moderação antes de aparecer aqui. Nada é publicado automaticamente.
Carregando…