首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform -策略中的每个语句都应该有一个资源。

Terraform -策略中的每个语句都应该有一个资源。
EN

Stack Overflow用户
提问于 2017-06-07 18:15:49
回答 1查看 5K关注 0票数 3

我有一个试图附加到多个队列的aws_iam_policy_document。政策文件如下所示:

代码语言:javascript
复制
data "aws_iam_policy_document" "my_policy" {
  statement {
    principals {
      type        = "*"
      identifiers = ["*"]
    }

    actions = [
      "sqs:SendMessage"
    ]

    resources = [
      "${aws_sqs_queue.q1.arn}",
      "${aws_sqs_queue.q2.arn}",
      "...",
      "${aws_sqs_queue.q8.arn}"
    ]

    condition {
      test = "ArnEquals"
      variable = "aws:SourceArn"
      values = [
        "${aws_sns_topic.sns_topic_name.arn}"
      ]
    }
  }
}

当我运行地形计划时,它不会显示任何错误。不管如何运行terraform应用程序,我得到:Policy is invalid. Reason: Each statement in the policy should have exactly one resource。是否有一种方法可以为资源名添加一个变量,该变量在附加到所述队列时会被队列的名称所替代?

以下是我的队列和队列策略的样子:

代码语言:javascript
复制
resource "aws_sqs_queue" "queue_name" {
    name                       = "queue_name_${var.environment}"
    visibility_timeout_seconds = 30
    message_retention_seconds  = 345600
    max_message_size           = 262144
    delay_seconds              = 0
    receive_wait_time_seconds  = 0
}


resource "aws_sqs_queue_policy" "queue_name_policy" {
  queue_url = "${aws_sqs_queue.queue_name.id}"
  policy    = "${data.aws_iam_policy_document.my_policy.json}"
}
EN

回答 1

Stack Overflow用户

发布于 2017-06-09 15:24:44

是否有一种方法可以为资源名添加一个变量,该变量在附加到所述队列时会被队列的名称所替代?

Terraform有一个使用 meta-parameter的循环迭代机制。

我没有这么多地使用过,而且我目前无法实际测试下面的代码,因此,对于一个小的免责声明,我认为我可能是错误的,我认为这应该是可行的:

代码语言:javascript
复制
variable "number_of_queues" {
  default = 3
}

resource "aws_sqs_queue" "queue_name" {
  count = "${var.number_of_queues}"
  name  = "queue_name_${count.index}"
  // Other properties omitted
}

data "aws_iam_policy_document" "my_policy" {
  count = "${var.number_of_queues}"
  statement {
    resources = [
      "${aws_sqs_queue.queue_name[count.index].arn}",
    ]

    // Other properties omitted
  }
}

resource "aws_sqs_queue_policy" "queue_name_policy" {
  count = "${var.number_of_queues}"
  queue_url = "${aws_sqs_queue.queue_name[count.index].id}"
  policy    = "${data.aws_iam_policy_document.my_policy[count.index].json}"
}

您可能不得不使用 function而不是方括号--不确定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44420025

复制
相关文章

相似问题

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