【问题标题】:AWS Terraform: Filter specific subnets by matching substring in tag nameAWS Terraform:通过匹配标签名称中的子字符串来过滤特定子网
【发布时间】:2018-07-26 20:14:00
【问题描述】:

我有 6 个子网,我想从中筛选出 3 个匹配子字符串 internal 的子网并在 rds 中使用。

标签名称有内部词,并希望根据它进行过滤。

谁能帮帮我?

data "aws_vpc" "vpc_nonprod-sctransportationops-vpc" {
  tags {
    Name = "vpc_nonprod-sctransportationops-vpc"
  }
}
    
data "aws_subnet_ids" "all" {
  vpc_id = "${data.aws_vpc.vpc_nonprod-sctransportationops-vpc.id}"
}
    
output "aws_subnet_ids" {
  value = "${data.aws_subnet_ids.all.ids}"
}
# 6 subnets
# Now look up details for each subnet
     

data "aws_subnet" "filtered_subnets" {
  count = "${length(data.aws_subnet_ids.all.ids)}"
  id    = "${data.aws_subnet_ids.all.ids[count.index]}"

  filter {
    name   = "tag:Name"
    values = ["*internal*"]
  }
}

一些标签名称有internal 子字符串

需要抓取所有标签名有内部子串的子网id

values = ["*"] 返回6 ids,但是values = ["any word not work"]values = ["*internal*"] 不起作用。

以下是错误:

Error: Error refreshing state: 1 error(s) occurred:

* data.aws_subnet.publicb: 3 error(s) occurred:

* data.aws_subnet.publicb[1]: data.aws_subnet.publicb.1: no matching subnet found
* data.aws_subnet.publicb[4]: data.aws_subnet.publicb.4: no matching subnet found
* data.aws_subnet.publicb[0]: data.aws_subnet.publicb.0: no matching subnet found

应该有 6 个,但我只得到 3 个,这意味着应该有部分好东西和部分坏东西。

这 3 个子网在标签名称中没有 internal 子字符串。

这意味着它正在解析。 aws_subnet_ids 没有过滤选项。

应该有。一场比赛,这很简单,但是,我需要多场比赛。

现在我猜这个错误是因为循环运行了 6 次。

这是没有过滤器的相同输出:

                  "data.aws_subnet.filtered_subnets.2": {
                    "type": "aws_subnet",
                    "depends_on": [
                        "data.aws_subnet_ids.all"
                    ],
                    "primary": {
                        "id": "subnet-14058972",
                        "attributes": {
                            "assign_ipv6_address_on_creation": "false",
                            "availability_zone": "us-west-2a",
                            "cidr_block": "172.18.201.0/29",
                            "default_for_az": "false",
                            "id": "subnet-14038772",
                            "map_public_ip_on_launch": "false",
                            "state": "available",
                            "tags.%": "4",
                            "tags.Designation": "internal",
                            "tags.Name": "subnet_nonprod-sctransportationops-vpc_internal_az2",
                            "tags.Permissions": "f00000",
                            "tags.PhysicalLocation": "us-west-2a",
                            "vpc_id": "vpc-a47k07c2"
                        },
                        "meta": {},
                        "tainted": false
                    },
                    "deposed": [],
                    "provider": "provider.aws"
                }

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    aws_subnet_ids 有这个功能,但是方式不同。这里解决了我的问题:

    data "aws_subnet_ids" "all" {
      vpc_id = "${data.aws_vpc.vpc_nonprod-sctransportationops-vpc.id}"
    
      tags = {
        Name = "*internal*"
      }
    }
    

    感谢您的评论:D

    【讨论】:

    • tags { 此处不应出现“标签”类型的块。您的意思是定义参数“标签”吗?如果是这样,请使用等号为其赋值。
    • @Adan 评论:terraform.io/docs/providers/aws/d/subnet_ids.htmldata "aws_subnet_ids" "private" { vpc_id = var.vpc_id tags = { Tier = "Private" } }
    • 是的,tags = { 中的 = 不见了。
    • 是的,丢失了。谢谢。
    猜你喜欢
    • 2022-01-10
    • 2021-11-28
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多