我正在尝试使用数据源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]
答案 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
需要引用列表中的正确索引。