Cloudwatch rule not being triggered as event pattern is deployed in lexicographic order usung terraform

316 Views Asked by At

I'm trying to write a config where lambda function is being triggered if there is an instance class change in AWS RDS resource. This is the custom event pattern:

{
  "source": [
    "aws.rds"
  ],
  "detail-type": [
    "RDS DB Instance Event"
  ],
  "detail": {
    "EventID": [
      "RDS-EVENT-0014"
    ]
  }
}

The following is my terraform config for cloud watch event rule resource:

resource "aws_cloudwatch_event_rule" "rds_instance_event" {
  name      = "${var.region}-rds-instance-event"
  description = "This event trigger is for RDS instance events"
  event_pattern = <<EOF
{
  "source": [
    "aws.rds"
  ],
  "detail-type": [
    "RDS DB Instance Event"
  ],
  "detail": {
    "EventID": [
      "RDS-EVENT-0014"
    ]
  }
}
EOF
}

The problem is that event_patter get's uploaded in lexicographical order and the cloud watch event is not being triggered. When I change the event_pattern manually to the original order, it works.

Does anyone know how to fix this?

I tried rendering it from a data template as following, still didn't work.

data "template_file" "event_pattern" {
  template = file("${path.module}/manifests/rds-notification-event-rule.json")
}

resource "aws_cloudwatch_event_rule" "rds_instance_event" {
   name     = "${var.region}-rds-instance-event"
   description = "This event trigger is for RDS instance events"

   event_pattern = data.template_file.event_pattern.rendered
 }

0

There are 0 best solutions below