← Todas as publicações

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…

6 min de leitura1.262 palavrasSeções: 2Imagens: 1Blocos de código: 1112 jul 2023

Palavras-chave

Compartilhar
Comentar

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…