Вам нужно будет использовать комбинацию aws_cloudwatch_event_rule , чтобы соответствовать событиям, которые вы хотите обработать с помощью EventBridge, и aws_cloudwatch_event_target для пересылки в другую шину событий EventBridge или что-то вроде Lambda, которое может напрямую обрабатывать события, или в очередь SQS, где события могут быть обработаны потребителем.
Вот полностью универсальный модуль c для этой цели:
main.tf:
# ------------------------------------------------------------------------------
# CREATE CLOUDWATCH RULES FOR EACH LOGICAL ROUTE TO MATCH EVENTS OF INTEREST
# ------------------------------------------------------------------------------
resource "aws_cloudwatch_event_rule" "captures" {
for_each = var.event_routes
name = replace(replace(each.key, "[^\\.\\-_A-Za-z0-9]+", "-"), "_", "-")
description = each.value.description
event_pattern = jsonencode({
"detail-type" = each.value.event_names
})
}
# ------------------------------------------------------------------------------
# CONFIGURE EACH RULE TO FORWARD MATCHING EVENTS TO THE CORRESPONDING TARGET ARN
# ------------------------------------------------------------------------------
resource "aws_cloudwatch_event_target" "route" {
for_each = var.event_routes
target_id = each.key
rule = aws_cloudwatch_event_rule.captures[each.key].name
arn = each.value.target_arn
}
variables.tf:
variable "event_routes" {
description = "A map from a meaningful operator shorthand to the target ARN and list of the event names that CloudWatch should forward to them."
type = map(object({
description = string
event_names = list(string)
target_arn = string
}))
/*
event_routes = {
forward_to_kpi_tracker = {
description = "Forward events to KPI tracker"
event_names = [
"UserSignedUp",
"UserWatchedLessonVideo",
]
target_arn = "arn:aws:events:ca-central-1:000000000000:event-bus/default"
}
}
*/
}
outputs.tf:
output "event_rule_name" {
value = { for route_shorthand, route_details in var.event_routes :
route_shorthand => aws_cloudwatch_event_rule.captures[route_shorthand].name
}
}
output "event_rule_arn" {
value = { for route_shorthand, route_details in var.event_routes :
route_shorthand => aws_cloudwatch_event_rule.captures[route_shorthand].arn
}
}
Цель может быть любой из следующего:
- Экземпляры EC2
- Команда запуска SSM
- Автоматизация SSM
- AWS Лямбда-функции
- Потоки данных в Amazon Kinesis Data Streams
- Потоки доставки данных в Amazon Kinesis Data Firehose
- Задачи Amazon ECS
- AWS Конечные автоматы Step Functions
- AWS Пакетные задания
- AWS Проекты CodeBuild
- Конвейеры в AWS CodePipeline
- Шаблоны оценки Amazon Inspector
- Темы Amazon SNS
- Очереди Amazon SQS, включая очереди FIFO
- шина событий по умолчанию для другого аккаунта AWS
Из документов действий API PutTargets .