Skip to content

Instantly share code, notes, and snippets.

@williamkoller
Created April 17, 2025 15:55
Show Gist options
  • Save williamkoller/c291975a056fb5c630e505ab1c9ac8d1 to your computer and use it in GitHub Desktop.
Save williamkoller/c291975a056fb5c630e505ab1c9ac8d1 to your computer and use it in GitHub Desktop.

📘 Escalando Amazon Aurora com Lambda e EventBridge

🧩 Visão Geral

Em workloads variáveis, escalar o Amazon Aurora Serverless v2 nos horários certos pode reduzir custos e melhorar a performance.

Combinando AWS Lambda + Amazon EventBridge, é possível automatizar o ajuste de capacidade da Aurora de forma programada, com baixo custo de manutenção.


✅ Objetivo

Automatizar o escalonamento do Aurora Serverless v2 de acordo com a demanda:

Horário Ação Capacidade (ACU)
06h Aumentar 4 ACUs mín. / 16 ACUs máx.
20h Reduzir 1 ACU mín. / 2 ACUs máx.

🛠️ Arquitetura

EventBridge (Evento agendado)
        |
        v
      Lambda
        |
        v
Amazon RDS (Aurora Serverless v2)

📦 Tecnologias Utilizadas

  • Amazon Aurora Serverless v2
  • AWS Lambda (Node.js 20)
  • Amazon EventBridge (cron trigger)
  • Serverless Framework
  • AWS SDK v3 (@aws-sdk/client-rds)

📁 Estrutura do Projeto

aurora-scaler/
├── handler.js          # Lógica da Lambda
├── package.json        # Dependências
└── serverless.yml      # Infraestrutura como código

🔧 Lógica da Lambda (handler.js)

const { RDSClient, ModifyDBClusterCommand } = require("@aws-sdk/client-rds");

const client = new RDSClient({ region: process.env.AWS_REGION });

module.exports.scaleAurora = async (event) => {
  const action = event.action || "scale_up";
  const configMap = {
    scale_up: { MinCapacity: 4, MaxCapacity: 16 },
    scale_down: { MinCapacity: 1, MaxCapacity: 2 },
  };

  const params = {
    DBClusterIdentifier: process.env.CLUSTER_ID,
    ServerlessV2ScalingConfiguration: configMap[action],
    ApplyImmediately: true,
  };

  const command = new ModifyDBClusterCommand(params);
  await client.send(command);
};

⚙️ Agendamento via serverless.yml

functions:
  scaleAuroraUp:
    handler: handler.scaleAurora
    events:
      - schedule:
          rate: cron(0 9 * * ? *)  # 06h BRT
          input:
            action: scale_up

  scaleAuroraDown:
    handler: handler.scaleAurora
    events:
      - schedule:
          rate: cron(0 23 * * ? *) # 20h BRT
          input:
            action: scale_down

🔐 Permissões IAM

provider:
  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - rds:ModifyDBCluster
          Resource: "*"

🚀 Como Fazer o Deploy com Serverless

npm install
echo "CLUSTER_ID=seu-cluster-id-aqui" > .env
sls deploy

📈 Benefícios

  • 💰 Redução de custos fora dos horários de pico
  • ⚡ Performance otimizada nos horários de maior uso
  • 🔁 Zero manutenção manual
  • 🔎 Integração fácil com monitoramento e alertas

✅ Conclusão

Escalar o Aurora Serverless com EventBridge + Lambda é uma solução inteligente, automatizada e eficaz para equilibrar custo e desempenho com mínima complexidade operacional.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment