【问题标题】:How to fix error message when adding SQS redrive policy for deadletter queue created using for_each为使用 for_each 创建的死信队列添加 SQS 重新驱动策略时如何修复错误消息
【发布时间】:2021-12-05 15:44:54
【问题描述】:

我希望 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"{

【问题讨论】:

  • 您只能指定一个目标arn,您正在尝试传递多个。
  • 我有 2 个 SQS 和 2 个死信队列。如何指定为每个死信队列创建的每个 SQS

标签: amazon-web-services terraform amazon-sqs terraform-provider-aws


【解决方案1】:

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

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 值。

【讨论】:

  • 当我按照你建议的方式配置它时,我得到了这个。错误:周期:aws_sqs_queue.CloudTrail_SQS["CloudTrail_SQS_Data_Event"], aws_sqs_queue.CloudTrail_SQS["CloudTrail_SQS_Management_Event"]
  • @bibi 答案已更新
  • 感谢更新答案,但我收到了同样的错误,我需要将变量从 set(string) 更改为 list(string)
  • @bibi 检查我的答案。可能你没有全部复制。答案有效。
  • 感谢您的回复,我刚刚复制了确切的代码,现在我收到不同的错误消息------- 错误:invalid index │ │ 在 main.tf 第 15 行,资源“aws_sqs_queue”中" "CloudTrail_SQS": │ 15: deadLetterTargetArn = values(aws_sqs_queue.CloudTrail_SQS_DLQ)[each.key].arn │ ├──────────────── │ │ aws_sqs_queue.CloudTrail_SQS_DLQ 是 2 的对象属性│ │ each.key 是“CloudTrail_SQS_Management_Event” │ │ 给定的键不标识此集合值中的元素:│ 数字是必需的。
猜你喜欢
  • 2022-07-22
  • 2015-12-07
  • 2020-01-07
  • 2020-02-14
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2021-03-16
  • 2019-06-21
相关资源
最近更新 更多