【问题标题】:terraform missing resource instance key,issue with for_eachterraform 缺少资源实例键,for_each 问题
【发布时间】:2021-10-15 21:34:45
【问题描述】:
    resource "aws_sqs_queue" "CloudTrail_SQS"{

       for_each                   = var.sqs_queue_names
      name                       = each.value
      visibility_timeout_seconds = var.visibility_timeout_seconds
      max_message_size           = var.max_message_size
      message_retention_seconds  = var.message_retention_seconds
      delay_seconds              = var.delay_seconds
      receive_wait_time_seconds  = var.receive_wait_time_seconds
      redrive_policy = jsonencode({
        deadLetterTargetArn    = 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                   = var.dead_queue_names
    name                       = each.value
    visibility_timeout_seconds = var.visibility_timeout_seconds
    max_message_size           = var.max_message_size
    message_retention_seconds  = var.message_retention_seconds
    delay_seconds              = var.delay_seconds
    receive_wait_time_seconds  = var.receive_wait_time_seconds

    tags = var.default_tags
    }

    

    resource "aws_sqs_queue_policy" "Cloudtrail_SQS_Policy" {
     queue_url = aws_sqs_queue.CloudTrail_SQS[each.key].id

我的 terragrunt 计划返回这个。它抱怨 for_each 并且当我尝试修复时我得到另一个错误,但不确定如何处理它:

    1.....Error: Missing resource instance key
│
│ on iam.tf line 2, in resource "aws_sqs_queue_policy" "Cloudtrail_SQS_Policy":
│ 2: queue_url = aws_sqs_queue.CloudTrail_SQS.id
│
│ Because aws_sqs_queue.CloudTrail_SQS has "for_each" set, its attributes
│ must be accessed on specific instances.
│
│ For example, to correlate with indices of a referring resource, use:
│ aws_sqs_queue.CloudTrail_SQS[each.key]

2...Error: Missing resource instance key
│
│ on iam.tf line 14, in resource "aws_sqs_queue_policy" "Cloudtrail_SQS_Policy":
│ 14: "Resource": "${aws_sqs_queue.CloudTrail_SQS.arn}",
│
│ Because aws_sqs_queue.CloudTrail_SQS has "for_each" set, its attributes
│ must be accessed on specific instances.
│
│ For example, to correlate with indices of a referring resource, use:
│ aws_sqs_queue.CloudTrail_SQS[each.key]

3.........
Error: Reference to "each" in context without for_each
│
│ on iam.tf line 27, in resource "aws_sqs_queue_policy" "CloudTrail_SQS_DLQ":
│ 27: queue_url = aws_sqs_queue.CloudTrail_SQS_DLQ[each.key].id
│
│ The "each" object can be used only in "module" or "resource" blocks, and
│ only when the "for_each" argument is set.

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    您的Cloudtrail_SQS_Policy 中没有for_each。因此你不能使用each.key

    猜猜应该是:

        resource "aws_sqs_queue_policy" "Cloudtrail_SQS_Policy" {  
          for_each                   = var.dead_queue_names
          queue_url = aws_sqs_queue.CloudTrail_SQS[each.key].id
    

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 2021-07-21
      • 2021-10-04
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多