以下代码为我提供了群集中所有EC2实例的列表:
data "aws_instances" "emrMaster" {
instance_tags {
Name = "emr-cluster-name"
}
}
但是当我尝试使用AWS生成的主实例标签缩小列表范围时,会得到相同的列表。
data "aws_instances" "emrMaster" {
instance_tags {
Name = "emr-cluster-name"
"aws:elasticmapreduce:instance-group-role" = "MASTER"
}
}
如果我删除键名上的引号,则会由于键名中的冒号而收到非法字符错误。
data "aws_instances" "emrMaster" {
instance_tags {
Name = "emr-cluster-name"
aws:elasticmapreduce:instance-group-role = "MASTER"
}
}
是否有更好的方法来执行此操作?是我做错了事还是发现了Terraform中的错误?
我正在使用Terraform v0.11.7
我希望捕获此值,以便为与Core实例不同的master实例构建特定的cloudwatch警报。
答案 0 :(得分:1)
为此,最好使用 aws_instance (而不是 aws_instances )
resource "aws_emr_cluster" "emr-cluster" {
....
}
data "aws_instance" "master" {
filter {
name = "tag:Name"
values = ["${aws_emr_cluster.emr-cluster.name}"]
}
filter {
name = "tag:aws:elasticmapreduce:instance-group-role"
values = ["MASTER"]
}
}
然后使用输出:
output "master_id" {
value = "${data.aws_instance.master.id}"
}