terraform 中是不是有任何特定的资源标签可以在 eventbridge 中创建规则
Posted
技术标签:
【中文标题】terraform 中是不是有任何特定的资源标签可以在 eventbridge 中创建规则【英文标题】:Is there any specific resource tag in terraform to create a rule in eventbridgeterraform 中是否有任何特定的资源标签可以在 eventbridge 中创建规则 【发布时间】:2020-10-10 14:48:14 【问题描述】:例如我们在 cloudwatch 中有一个用于事件规则的资源标签
aws_cloudwatch_event_rule
【问题讨论】:
【参考方案1】:您需要结合使用 aws_cloudwatch_event_rule 来匹配您要使用 EventBridge 处理的事件,并使用 aws_cloudwatch_event_target 来转发到另一个 EventBridge 事件总线或到可以直接处理事件的 Lambda 之类的东西,或者到可以由消费者处理事件的 SQS 队列。
这是一个完全通用的模块:
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
变量.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"
*/
输出.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 Lambda 函数 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 账户的默认事件总线
来自PutTargets API actions docs。
【讨论】:
你确定 terraform 支持“另一个 AWS 账户的默认事件总线”作为目标。因为从他们的文档来看,似乎并非如此,registry.terraform.io/providers/hashicorp/aws/latest/docs/… @vishal 我非常肯定。我们有四个帐户配置为将匹配事件路由到其他帐户的默认事件总线,并在生产中依赖它。 aws_cloudwatch_event_target 资源的 arn 参数可以是另一个 AWS 账户的默认事件总线的 ARN(这是我们在生产中所做的)。 registry.terraform.io/providers/hashicorp/aws/latest/docs/… 如果我想设置cloudwatch事件规则来触发StepFunction状态机,是否需要在aws_cloudwatch_event_rule
和aws_cloudwatch_event_target
之后设置权限配置?以上是关于terraform 中是不是有任何特定的资源标签可以在 eventbridge 中创建规则的主要内容,如果未能解决你的问题,请参考以下文章
Terraform/lambda/IAM 根据标签停止 ec2