【问题标题】:How to filter a data source (AWS AMI) based on a list of tags如何根据标签列表过滤数据源 (AWS AMI)
【发布时间】:2020-08-25 19:34:26
【问题描述】:

我正在尝试创建一个 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 应该具有匹配的所有标签。

有什么想法吗?

【问题讨论】:

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

标签: tags terraform-provider-aws


【解决方案1】:

找到了使用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}"]
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多