I'm trying to create an AWS CloudWatch rule that is execute every minute to create a message in a SQS. When I'm using the below Terraform-script everything looks find but the SQS my_queue doesn't receive any message.
When updating the rule my_trigger using Amazon console the messages are created in the SQS.
provider "aws" {
region = "eu-central-1"
}
resource "aws_sqs_queue" "this_sqs_queue" {
name = "my_queue"
fifo_queue = "false"
content_based_deduplication = "false"
visibility_timeout_seconds = 30
message_retention_seconds = 345600
max_message_size = 262144
receive_wait_time_seconds = 0
delay_seconds = 0
}
resource "aws_cloudwatch_event_rule" "cloudwatch_event_rule" {
name = "my_trigger"
schedule_expression = "rate(1 minute)"
}
resource "aws_cloudwatch_event_target" "cloudwatch_event_target" {
rule = "${aws_cloudwatch_event_rule.cloudwatch_event_rule.name}"
arn = "${aws_sqs_queue.this_sqs_queue.arn}"
}
Any help is highly appreciated.
You need to create the policy on the SQS queue. AWS is doing this for you automatically when you create/update using the console. However, when using Terraform you need to do it explicitly create it.
resource "aws_sqs_queue_policy" "this_sqs_queue_policy" {
queue_url = "${aws_sqs_queue.this_sqs_queue.id}"
policy = <<POLICY
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": "${aws_sqs_queue.this_sqs_queue.arn}",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "${aws_cloudwatch_event_rule.cloudwatch_event_rule.arn}"
}
}
}
]
}
POLICY
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With