AWS CloudWatch
Fluidify Regen receives CloudWatch alarms via Amazon SNS webhooks. When an alarm transitions to ALARM state, Regen creates an alert and optionally an incident.
Webhook URL
POST https://your-domain.com/api/v1/webhooks/cloudwatch
Setup
Step 1: Create an SNS topic
aws sns create-topic --name fluidify-regen-alerts
Note the topic ARN: arn:aws:sns:us-east-1:123456789:fluidify-regen-alerts
Step 2: Subscribe Regen as an HTTPS endpoint
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:fluidify-regen-alerts \
--protocol https \
--notification-endpoint https://your-domain.com/api/v1/webhooks/cloudwatch
Regen automatically confirms the subscription when it receives the confirmation request from SNS.
Note: SNS requires HTTPS. Use a domain with a valid TLS certificate. For local testing, use an HTTPS tunnel (e.g. ngrok).
Step 3: Add the SNS topic to a CloudWatch alarm
aws cloudwatch put-metric-alarm \
--alarm-name "HighErrorRate" \
--alarm-actions arn:aws:sns:us-east-1:123456789:fluidify-regen-alerts \
--ok-actions arn:aws:sns:us-east-1:123456789:fluidify-regen-alerts \
...
Always add both --alarm-actions (firing) and --ok-actions (resolving) so Regen can close the alert automatically.
How alarm fields map to Regen
| CloudWatch field | Regen field | Notes |
|---|---|---|
AlarmName |
Title | — |
AlarmDescription |
Description | — |
NewStateValue |
Status | ALARM → firing, OK → resolved |
AlarmArn |
ExternalID | Used for deduplication |
AWSAccountId + region |
Labels | Stored for context |
Trigger.MetricName |
Labels | Stored for context |
Severity mapping
CloudWatch alarms don't have a native severity field. Regen maps based on alarm name keywords:
| Alarm name contains | Regen severity |
|---|---|
critical, p0, p1 |
Critical |
warning, warn, p2 |
Warning |
| (anything else) | Warning (default) |
To set severity explicitly, include it in the alarm name:
payments-api-error-rate-criticaldisk-usage-warning