如何修复为使用for_each创建的死信队列添加SQS重驱动策略时的错误消息



我想要terraform将我的SQS管理事件与我的DLQ管理事件相关联,我想要与SQS数据事件和DLQ数据事件做同样的事情。当我在下面的代码上运行应用程序时,我得到错误消息。我需要一些帮助。

.tfvars
sqs_queue_names = ["CloudTrail_SQS_Management_Event", "CloudTrail_SQS_Data_Event"]
dead_queue_names = ["CloudTrail_DLQ_Management_Event", "CloudTrail_DLQ_Data_Event"]
main.tf
resource "aws_sqs_queue" "CloudTrail_SQS"{
for_each                   = var.sqs_queue_names
name                       = each.value
redrive_policy = jsonencode({
deadLetterTargetArn    = values(aws_sqs_queue.CloudTrail_SQS_DLQ)[*].arn
maxReceiveCount        = var.max_receive_count
})
tags = var.default_tags

}
resource "aws_sqs_queue" "CloudTrail_SQS_DLQ"{
for_each                   = var.dead_queue_names
name                       = each.value

tags = var.default_tags
}
Error: error creating SQS Queue (CloudTrail_SQS_Management_Event): InvalidParameterValue: Value {"deadLetterTargetArn":["arn:aws:sqs:us-east-1:123456789012:CloudTrail_DLQ_Data_Event","arn:aws:sqs:us-east-1:123456789012:CloudTrail_DLQ_Management_Event"],"maxReceiveCount":10} for parameter RedrivePolicy is invalid. Reason: Invalid value for deadLetterTargetArn.
│       status code: 400, request id: 9663b896-d86f-569e-92e2-e17152c2db26
│ 
│   with aws_sqs_queue.CloudTrail_SQS["CloudTrail_SQS_Management_Event"],
│   on main.tf line 5, in resource "aws_sqs_queue" "CloudTrail_SQS":
│    5: resource "aws_sqs_queue" "CloudTrail_SQS"{
│ 
╵
╷
│ Error: error creating SQS Queue (CloudTrail_SQS_Data_Event): InvalidParameterValue: Value {"deadLetterTargetArn":["arn:aws:sqs:us-east-1:123456789012:CloudTrail_DLQ_Data_Event","arn:aws:sqs:us-east-1:123456789012:CloudTrail_DLQ_Management_Event"],"maxReceiveCount":10} for parameter RedrivePolicy is invalid. Reason: Invalid value for deadLetterTargetArn.
│       status code: 400, request id: 88b8e4c5-1d50-5559-92f8-bd2297fd231f
│ 
│   with aws_sqs_queue.CloudTrail_SQS["CloudTrail_SQS_Data_Event"],
│   on main.tf line 5, in resource "aws_sqs_queue" "CloudTrail_SQS":
│    5: resource "aws_sqs_queue" "CloudTrail_SQS"{

有几种方法可以做到这一点。一种方法如下:

resource "aws_sqs_queue" "CloudTrail_SQS"{
for_each                   = {for idx, val in var.sqs_queue_names: idx => val}
name                       = each.value
redrive_policy = jsonencode({
deadLetterTargetArn    = values(aws_sqs_queue.CloudTrail_SQS_DLQ)[each.key].arn
maxReceiveCount        = var.max_receive_count
})
tags = var.default_tags   
}
resource "aws_sqs_queue" "CloudTrail_SQS_DLQ"{
for_each                   = toset(var.dead_queue_names)
name                       = each.value

tags = var.default_tags
}

在上面,您创建index变量作为for_each的键,并使用它来引用DLQ值。

最新更新