Tags 如何基于标记列表筛选数据源(AWS AMI)

Tags 如何基于标记列表筛选数据源(AWS AMI),tags,terraform-provider-aws,Tags,Terraform Provider Aws,我正在尝试创建一个aws\u ami数据源,它根据几个标记获取最新的ami 问题是,我想用标记及其值的映射来实现,而不是为数据源中的每个特定标记定义过滤器 例如: 模块变量tf variable "filter-tags" { type = "map" default = { "java_vendor" = "oracle" } } data "aws_ami" "aws-ami" { most_recent = true owners = ["self"]

我正在尝试创建一个aws\u ami数据源,它根据几个标记获取最新的ami

问题是,我想用标记及其值的映射来实现,而不是为数据源中的每个特定标记定义过滤器

例如:

模块变量tf

variable "filter-tags" {
  type = "map"
  default = {
    "java_vendor" = "oracle"
  }
}
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}"
  }
}
模块.tf

variable "filter-tags" {
  type = "map"
  default = {
    "java_vendor" = "oracle"
  }
}
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}"
  }
}
因此,显然,这个过滤器标签变量应该能够更改,并且过滤后的AMI应该具有匹配的所有标签


有什么想法吗?

找到了用


找到了一种方法来解决这个问题


您是否尝试过设置参数
tags=var.filter-tags
?这只是给了我最新的AMI,我不认为它考虑了这些标记找到了一种使用动态块的方法。获取最新AMI的目的不是您已经设置了
most\u recent=true
?如果不考虑标记,则使用的
tags
参数是什么?tags参数甚至不是aws\u ami数据源文档的一部分。我猜它可能是从某个地方继承的,这就是为什么terraform在那里接受它,但它没有功能,或者该功能与数据源的过滤无关。您是否尝试过设置参数
tags=var.filter-tags
?这只会给我最新的AMI,我不认为它会考虑标签。找到了一种使用动态块的方法。获取最新ami的目的不是你已经设置了
most\u recent=true
吗?如果不考虑标记,则使用的
tags
参数是什么?tags参数甚至不是aws\u ami数据源文档的一部分。我猜它可能是从某个地方继承的,这就是为什么terraform在那里接受它,但它没有功能,或者该功能与数据源的过滤无关