Architecture Overview
Why EventBridge? EventBridge sends clean JSON directly to your webhook with built-in retry logic, dead-letter queues, and IAM-based security. No subscription confirmation handshake is needed (unlike SNS), and no Lambda function is required to transform the payload.
Prerequisites
- An AWS account with permissions to create EventBridge rules, API destinations, and connections
- A CloudWatch alarm configured for the metric you want to monitor
- A CloudThinker webhook URL (created in the steps below)
Setup Guide
Create a CloudThinker Webhook
- In CloudThinker, go to Incidents → Settings → Integrations
- Click Connect on the AWS CloudWatch card
- Enter a name (e.g., “Production CloudWatch Alerts”)
- Review the pre-configured field mappings — these are set for EventBridge format:
| Incident Field | JSONPath | Extracts |
|---|---|---|
| Title | $.detail.alarmName | Alarm name |
| Description | $.detail.state.reason | State change reason |
| Severity | $.detail.state.value | Alarm state (ALARM, OK, INSUFFICIENT_DATA) |
| Services | $.detail.configuration.metrics[0].metricStat.metric.namespace | AWS service namespace (e.g., AWS/EC2) |
- Configure severity mapping and auto-trigger settings as needed
- Click Create and copy the webhook URL
Create an EventBridge Connection
- In the AWS Console, go to Amazon EventBridge → Integration → Connections
- Click Create connection
- Configure the connection:
- Name:
cloudthinker-webhook - Authorization type: Other
- Name:
CloudThinker authenticates via the URL token embedded in the webhook URL. No additional authorization headers are required in the EventBridge connection.
Create an API Destination
- Go to Amazon EventBridge → Integration → API destinations
- Click Create API destination
- Configure:
- Name:
cloudthinker-incidents - API destination endpoint: Paste your CloudThinker webhook URL
- HTTP method:
POST - Connection: Select the
cloudthinker-webhookconnection created above - Invocation rate limit:
100per second (adjust as needed)
- Name:
Create an EventBridge Rule
- Go to Amazon EventBridge → Rules
- Select the default event bus
- Click Create rule
-
Configure:
- Name:
cloudwatch-alarms-to-cloudthinker - Description: Route CloudWatch alarm state changes to CloudThinker
- Event bus: default
- Rule type: Rule with an event pattern
- Name:
- Define the event pattern:
-
Select target:
- Target type: EventBridge API destination
- API destination: Select
cloudthinker-incidents - Execution role: Create a new role or use an existing one with
events:InvokeApiDestinationpermissions
- Click Create rule
Event Payload
EventBridge delivers CloudWatch alarm events in the following format. CloudThinker’s field mappings extract incident data from this structure automatically.Severity Mapping
CloudWatch alarm states map to CloudThinker severity levels. The default mapping is:| CloudWatch State | CloudThinker Severity |
|---|---|
ALARM | Critical |
INSUFFICIENT_DATA | Medium |
OK | Info |
Filtering Alarms
You can control which alarms trigger incidents by refining the EventBridge rule’s event pattern. By alarm name prefix:Multi-Region Setup
CloudWatch events are regional — alarms only emit events to the EventBridge bus in their own region. For multi-region monitoring:- Option A: Cross-region event forwarding — Create an EventBridge rule in each source region that forwards CloudWatch alarm events to a central region’s event bus, then route from there to CloudThinker.
- Option B: Per-region rules — Create an API destination and rule in each region pointing to the same CloudThinker webhook URL. This is simpler but requires maintaining rules across regions.
Troubleshooting
No incidents are being created
No incidents are being created
- Check the EventBridge rule — Go to EventBridge → Rules → select your rule → Monitoring tab. Verify the rule is matching events (
Invocationsmetric > 0) - Check the API destination — Go to API destinations → select yours → verify the endpoint URL matches your CloudThinker webhook URL
- Check CloudThinker logs — Go to Incidents → Settings → Integrations → select your webhook → Logs tab for delivery history
- Test with CLI — Run
aws cloudwatch set-alarm-stateto simulate an alarm and verify the full chain
Events are received but fields are missing
Events are received but fields are missing
Verify the field mappings match the EventBridge event format. CloudWatch events routed through EventBridge use the
$.detail.* prefix:- Title:
$.detail.alarmName(not$.AlarmName) - Severity:
$.detail.state.value(not$.NewStateValue) - Description:
$.detail.state.reason(not$.NewStateReason)
Rule not matching any events
Rule not matching any events
- Ensure the event pattern uses
"detail-type": ["CloudWatch Alarm State Change"](exact string, case-sensitive) - Ensure the rule is on the default event bus — CloudWatch sends events to the default bus
- Verify the alarm is in the same region as the EventBridge rule
API destination returning errors
API destination returning errors
- 401/403: Verify the webhook URL includes the authentication token
- 422: The payload format may not match expected field mappings — check the event payload structure
- 429: You’ve exceeded the webhook rate limit — increase the rate limit in CloudThinker webhook settings
Alternative: SNS Route
CloudThinker also supports receiving CloudWatch alarms via SNS. This path is useful if you already have SNS topics configured for your alarms.- Confirms the SNS subscription (no manual confirmation needed)
- Unwraps the SNS notification envelope to extract the alarm payload
The EventBridge route is recommended over SNS because it provides a cleaner event format, native filtering, and doesn’t require a subscription handshake.
Related
Webhook Integrations Overview
Learn about all supported platforms and general webhook configuration.
Root Cause Analysis
Configure automatic AI-powered investigation for CloudWatch incidents.