如何基于标签列表过滤数据源(AWS AMI)

时间:2020-03-26 12:24:18

标签: tags terraform-provider-aws

我正在尝试创建一个 aws_ami 数据源,该数据源基于一些标签来获取最新的AMI。

问题在于,我想使用标记及其值的映射来完成此操作,而不是通过为数据源中的每个特定标记定义过滤器来实现。

示例:

module-vars.tf

variable "filter-tags" {
  type = "map"
  default = {
    "java_vendor" = "oracle"
  }
}

module.tf

data "aws_ami" "aws-ami" {
  most_recent = true
  owners = ["self"]

  // Filter code here
  // e.g. FICTIONAL CODE, DON'T USE
  filter {
    name = "tags:${var.filter-tags}"
  }
}

因此,显然 filter-tags 变量应该可以更改,并且过滤后的AMI应该具有所有匹配的标签。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

找到了一种使用dynamic blocks的方法

data "aws_ami" "aws-ami" {
  most_recent = true
  owners      = ["self"]

  dynamic "filter" {
    for_each = var.filter-tags
    iterator = tag

    content {
      name   = "tag:${tag.key}"
      values = ["${tag.value}"]
    }
  }
}