首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别Terraform中的循环引用?

如何识别Terraform中的循环引用?
EN

Stack Overflow用户
提问于 2022-01-06 11:54:39
回答 1查看 101关注 0票数 -3

场景

在Terraform模块中定义了SQS队列及其策略时,我遇到了一个问题,但是当试图运行terraform计划、应用甚至刷新时,我会得到以下错误。为什么?

错误

代码语言:javascript
复制
The "count" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument

用户代码

代码语言:javascript
复制
module "my_sqsqueue" {
  source = "[redacted]"
  sqs_name = "${local.some_name}"
  sqs_policy        = <<EOF
  {
    "Version": "2012-10-17",
    "Id": "my_policy",
    "Statement": [
      {
        "Sid": "111",
        "Effect": "Allow",
        "Principal": {
          "AWS": "*"
        },
        "Action": "sqs:SendMessage",
        "Resource": "${module.my_sqsqueue.sqs_queue_arn}",
        "Condition": {
          "ArnEquals": {
            "aws:SourceArn": "[redacted]"
          }
        }
      }
    ]
  }
  EOF
}

模块定义

代码语言:javascript
复制
resource "aws_sqs_queue_policy" "main_queue_policy" {
  count = var.sqs_policy != "" ? 1 : 0

  queue_url = aws_sqs_queue.main_queue.id
  policy    = var.sqs_policy
}

resource "aws_sqs_queue" "main_queue" {
  content_based_deduplication       = var.sqs_content_based_deduplication
  delay_seconds                     = var.sqs_delay_seconds
  fifo_queue                        = var.sqs_fifo_queue
  kms_data_key_reuse_period_seconds = var.sqs_kms_data_key_reuse_period_seconds
  kms_master_key_id                 = var.sqs_kms_master_key_id
  max_message_size                  = var.sqs_max_message_size
  message_retention_seconds         = var.sqs_message_retention_seconds
  name                              = var.sqs_name
  receive_wait_time_seconds         = var.sqs_receive_wait_time_seconds
  visibility_timeout_seconds        = var.sqs_visibility_timeout_seconds

  tags = merge(
    {
      Name = var.sqs_name
    },
    local.default_tag_map
  )
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-06 11:54:39

Resource属性在sqs_policy上引用my_sqsqueue模块的输出字段,但该模块本身依赖于sqs_policy

因此,要么:

again.

  • Manually临时删除循环引用,将sqs_policy属性设置为"",然后返回引用,并在可能的情况下应用

  • 定义引用。在这里,对于AWS,这是可能的,但情况并不总是这样。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70606724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档