我正在尝试创建一个 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应该具有所有匹配的标签。
有什么想法吗?
答案 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}"]
}
}
}