Skip to main content

Visão geral

O CloudWatch publica as transições de alarm em um topic SNS. Uma Lambda assinada nesse topic converte a notificação para o formato canônico do aciona.me e faz o POST na fonte de alerta.

Pré-requisitos

  • Permissão na AWS para criar topics SNS, funções Lambda e alterar alarms.
  • Um serviço criado no aciona.me e vinculado a um time com escala ativa.

1. Crie a fonte de alerta no aciona.me

Em Fontes de alerta, crie uma fonte do tipo CloudWatch. Copie a URL e o token.

2. Crie o topic SNS

3. Implante a Lambda de transformação

Runtime Node.js 20+, handler index.handler, sem dependências externas. Variáveis de ambiente: IAM role: AWSLambdaBasicExecutionRole.
Em produção, guarde o token no SSM Parameter Store (SecureString) ou no Secrets Manager, e leia-o no cold start da função — não deixe o valor em texto puro na configuração da Lambda.
index.mjs

4. Assine a Lambda no topic

Restrinja a policy do topic com aws:SourceAccount e, se possível, aws:SourceArn, para que apenas o CloudWatch da sua conta possa publicar.

5. Configure o alarm com AlarmActions e OKActions

OKActions é obrigatório para a auto-resolução. Sem ele, o CloudWatch nunca emite a transição OK e o acionamento fica aberto indefinidamente. Este é o passo mais esquecido da integração inteira.

6. Teste

Confirme o acionamento no painel. Depois force a recuperação:
O acionamento deve ser resolvido automaticamente.

Como os campos são traduzidos

O CloudWatch não tem severidade nativa. A Lambda resolve o alias em camadas:
  1. Marcador no AlarmDescription: [severity:critical]
  2. Convenção no nome do alarm (contém critical, high, warning ou info)
  3. Padrão: warning

Solução de problemas

O alarm não tem OKActions apontando para o topic SNS. Adicione com put-metric-alarm --ok-actions.
Verifique, nesta ordem: a subscription da Lambda no topic está confirmada; os logs da Lambda no CloudWatch Logs; ACIONA_INGRESS_URL e ACIONA_TOKEN corretos; a Lambda tem saída para a internet (se estiver em VPC, precisa de NAT).
Ajuste as dimensões do alarm ou crie no aciona.me um serviço com o nome que a Lambda deriva. Veja a função extractServiceHint no código.
Adicione [severity:critical] ao AlarmDescription ou inclua a palavra no nome do alarm.