Terrafrom数据源aws_vpcs-count.index错误

时间:2019-06-29 17:39:01

标签: amazon-web-services terraform

我正在尝试使用数据源aws_vpcs来获取具有特定标签的vpc ID。

供参考: https://www.terraform.io/docs/providers/aws/d/vpcs.html

下面是我的Terraya Yaml文件。 使用的Terrafrom版本是:0.12.3

data "aws_vpcs" "foo" {
  tags = {
    Name = "test1-VPC"
  }
}

resource "aws_security_group" "cluster" {
  count = "${length(data.aws_vpcs.foo.ids)}"
  vpc_id = "${tolist(data.aws_vpcs.foo.ids)[count.index]}"
}

resource "aws_security_group_rule" "cluster-ingress-node-https" {
  description              = "Rule to do xyz"
  from_port                = 443
  protocol                 = "tcp"
  security_group_id        = "${aws_security_group.cluster.id}"
  to_port                  = 443
  type                     = "ingress"
}

我遇到了错误。请求帮助解决此问题

terraform plan

Error: Missing resource instance key

  on modules/eks/eks-cluster.tf line 40, in resource "aws_security_group_rule" "cluster-ingress-node-https":
  40:   security_group_id        = "${aws_security_group.cluster.id}"

Because aws_security_group.cluster has "count" set, its attributes must be
accessed on specific instances.

For example, to correlate with indices of a referring resource, use:
    aws_security_group.cluster[count.index]

3 个答案:

答案 0 :(得分:1)

您正在使用aws_security_group资源上的count来创建aws_security_group的列表。该错误甚至提到它:

  

因为aws_security_group.cluster设置了“计数”,所以其属性   必须在特定实例上访问。

因此,您要么需要在aws_security_group_rule资源中包括计数,然后为每个创建的aws_security_group_rule创建一个aws_security_group,或者在您希望仅返回一个VPC的情况下,仅创建通过访问返回的索引为0的aws_security_group来获得一个aws_vpcs.foo.ids

答案 1 :(得分:1)

您将需要转换安全组列表。 Terraform提供了扁平化功能来实现https://nedinthecloud.com/2018/07/16/terraform-fotd-flatten/ 此后您不应该得到此错误

答案 2 :(得分:0)

我知道这是前一段时间发布的。偶然发现了这个问题。

${aws_security_group.cluster.*.id}应该这样做。

由于resource aws_security_group正在创建具有计数的多个安全组,因此资源块aws_security_group_rule需要引用列表中的正确索引。