如何在Terraform中获取EMR主实例的实例ID?

时间:2018-08-24 20:18:34

标签: terraform

以下代码为我提供了群集中所有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警报。

1 个答案:

答案 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}"
}