Sua instância RDS de dev e os serviços ECS rodam 24/7, incluindo fins de semana quando ninguém está usando. Isso é dinheiro saindo da sua conta sem motivo. Uma função Lambda no schedule do EventBridge pode desligá-los na sexta à noite e reiniciá-los na segunda de manhã, sem nenhuma intervenção.
TL;DR: Use AWS Lambda + schedules cron do EventBridge para ligar e desligar automaticamente serviços RDS e ECS fora do horário comercial, reduzindo custos.
Stack: AWS Lambda, EventBridge, RDS, ECS, Python, boto3, IAM
Nível: Intermediário
Tempo de leitura: ~6 min
Criar cron no EventBridge + role IAM para Lambda
Crie uma role IAM para a Lambda com permissões para parar/iniciar instâncias RDS e atualizar serviços ECS:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["rds:StopDBInstance", "rds:StartDBInstance"],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ecs:UpdateService",
"Resource": "arn:aws:ecs:sa-east-1:SUA_CONTA:service/seu-cluster/seu-servico"
}
]
}
Implementar a Lambda
import boto3
from datetime import datetime
def lambda_handler(event, context):
now = datetime.utcnow()
current_hour = now.hour
ecs_client = boto3.client('ecs')
rds_client = boto3.client('rds')
ecs_services = [
{'cluster': 'meu-cluster', 'service': 'meu-servico'},
]
rds_instances = ['minha-instancia-db']
# Horario comercial: 8h às 17h UTC
if 8 <= current_hour < 17:
desired_count = 1
rds_action = 'start'
else:
desired_count = 0
rds_action = 'stop'
results = []
try:
for svc in ecs_services:
ecs_client.update_service(
cluster=svc['cluster'],
service=svc['service'],
desiredCount=desired_count
)
results.append({'service': svc['service'], 'desired_count': desired_count, 'status': 'success'})
for db in rds_instances:
if rds_action == 'stop':
rds_client.stop_db_instance(DBInstanceIdentifier=db)
else:
rds_client.start_db_instance(DBInstanceIdentifier=db)
results.append({'db': db, 'action': rds_action, 'status': 'success'})
return results
except Exception as e:
return [{'status': 'error', 'message': str(e)}]
O que você construiu
Uma automação de redução de custos: uma Lambda com as permissões IAM certas, disparada pelo EventBridge em um cron schedule, que desliga seus recursos RDS e ECS fora do horário comercial e os inicia quando necessário. Pense nisso como um zelador de escritório que apaga as luzes quando todo mundo vai embora.
Próximos passos
- Adicione notificações SNS para receber um alerta no Slack ou e-mail quando o start/stop rodar com sucesso ou falhar.
- Expanda a Lambda para outros recursos custosos: instâncias EC2, clusters Elasticache, domínios OpenSearch.
- Tageie seus recursos (Environment=dev) e atualize a Lambda para segmentar por tag em vez de IDs fixos, para que funcione conforme a infraestrutura cresce.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.