Pat*_*ick 13 amazon-web-services terraform
我有 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*"]
}
}
Run Code Online (Sandbox Code Playgroud)
一些标签名称有internal子串
需要获取标签名称具有内部子字符串的所有子网ID
values = ["*"]6但是,返回IDvalues = ["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
Run Code Online (Sandbox Code Playgroud)
应该有 6 个,但我只得到 3 个,这意味着应该有部分好的东西和部分坏的东西。
这 3 个子网internal在标签名称中没有子字符串。
这意味着它正在解析。aws_subnet_ids没有过滤选项。
应该有。对于一场比赛,这很简单,但是,我需要多场比赛。
在我现在的猜测中,错误是因为循环运行了 6 次。
这是没有过滤器的相同输出:
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*"]
}
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*ick 23
aws_subnet_ids有这个功能,但是方式不同。在这里它解决了我的问题:
data "aws_subnet_ids" "all" {
vpc_id = "${data.aws_vpc.vpc_nonprod-sctransportationops-vpc.id}"
tags = {
Name = "*internal*"
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的审核 :D
小智 13
根据 Terraform 文档,aws_subnet_ids数据源已被弃用,并将在未来版本中删除(https://registry.terraform.io/providers/hashicorp/aws/4.67.0/docs/data-sources/subnet_ids)。
你可以用aws_subnets它代替。
例子:
# Private Subnets (db_subnet)
data "aws_subnets" "private_db_subnet" {
filter {
name = "vpc-id"
values = [data.aws_vpc.main_vpc.id]
}
tags = {
Name = "{YOUR_FILTER}"
}
}
Run Code Online (Sandbox Code Playgroud)
它的输出是子网列表:data.aws_subnets.private_db_subnet.ids
用例示例:
resource "aws_lambda_function" "lambda_json_documentdb" {
...
vpc_config {
subnet_ids = data.aws_subnets.private_db_subnet.ids
security_group_ids = [aws_security_group.lambda_sg.id]
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8807 次 |
| 最近记录: |