当 DLQ 尚不存在时,如何通过 Terraform 配置 SQS?

Posted

技术标签:

【中文标题】当 DLQ 尚不存在时,如何通过 Terraform 配置 SQS?【英文标题】:How to provision SQS via Terraform when DLQ doesn't yet exist? 【发布时间】:2017-10-26 18:06:25 【问题描述】:

当队列和死信队列都不存在时,如何配置 SQS 队列来为其死信队列指定类似 maxReceiveCount 的策略?

documentation 表明它是可能的:

resource "aws_sqs_queue" "terraform_queue" 
  # ...
  redrive_policy = "\"deadLetterTargetArn\":\"$aws_sqs_queue.terraform_queue_deadletter.arn\",\"maxReceiveCount\":4"

而且我倾向于认为人们一定已经对此进行了一些思考并使其在adding 进入docs 之前发挥作用。

因此,我正在寻找有关我缺少什么以及应该做些什么来解决像这样的合理错误消息的见解:

unknown resource 'aws_sqs_queue.terraform_queue_deadletter'
referenced in variable aws_sqs_queue.terraform_queue_deadletter.arn

【问题讨论】:

啊,没关系!从 Elastic Beanstalk (EB) 跳到 Terraform,我没有意识到 EB 正在预置两个单独的队列,然后代表管理员将它们连接起来。我认为队列+DLQ 配置是 SQS 中的原子操作,如果不是这种情况,那么错误是有道理的。只需要提供两个队列并将它们连接起来......在查看开源存储库时得到了这个线索:github.com/Raymondsquared/Terraform/blob/… 可能值得自己回答这个问题,以向其他用户展示 Terraform 如何管理资源之间的依赖关系。 @lf215 刚刚看到了这个赏金,以及它与your own question 的密切关系。我的一部分很想将其作为您问题的副本关闭,因为答案更详细一些,但我担心答案围绕您正在使用的模块构建得有点过于紧密。您是否希望在这里看到更多解释而不使用模块来简化答案? 是的,请在这里解释更多 registry.terraform.io/modules/damacus/sqs-with-dlq/aws/latest 可能会有所帮助! 【参考方案1】:

从 Elastic Beanstalk (EB) 跳转到 Terraform,我没有意识到 EB 正在预置两个单独的队列,然后代表管理员将它们连接起来。

我认为队列+DLQ 配置是 SQS 中的原子操作,如果不是这种情况,那么错误是有道理的。只需要提供两个队列并将它们连接起来。

在查看开源存储库时得到了这个线索: https://github.com/Raymondsquared/Terraform/blob/9dfd8574e45cb86b55b6bdb8771d35bea2935440/example.tf#L13

【讨论】:

以上是关于当 DLQ 尚不存在时,如何通过 Terraform 配置 SQS?的主要内容,如果未能解决你的问题,请参考以下文章

仅当复合主键尚不存在时,如何批量插入行? [AWS 红移]

仅当实体尚不存在时,我是不是可以在 CloudFormation 中设置属性?

仅当文件尚不存在时才将行附加到文件中

仅当数组列表尚不存在时才将其添加到数组列表中

如果某人尚不存在,请订阅他们到 Mailchimp 列表

如何模拟尚不存在的节点模块?