如何使用数据 "aws_vpc_endpoint" 资源检索多个端点?
How to retrieve multiple endpoints using data "aws_vpc_endpoint" resource?
错误:“多个 VPC 端点匹配”
我正在使用数据“aws_vpc_endpoint”根据 vpc ID 检索多个端点 ID。我如何检索这些端点以在另一个资源中引用它们?或者是否可以从此数据资源中检索多个端点。有什么建议么?或者建议将不胜感激。这是代码片段。 count.index 已在资源“aws_route”中正确说明,现在我专注于检索多个端点以添加到 aws_route。
data "aws_vpc_endpoint" "firewall-endpoints" {
vpc_id = aws_vpc.vpc.id
filter {
name = "tag:Example"
values = [true]
}
}
resource "aws_route" "example" {
count = var.number_azs
route_table_id = aws_route_table.example[count.index].id
destination_cidr_block = var.tgw_aws_route[0]
vpc_endpoint_id = data.aws_vpc_endpoint_service.firewall-endpoints.id
}
documentation 非常明确:
The arguments of this data source act as filters for querying the available VPC endpoints. The given filters must match exactly one VPC endpoint whose data will be exported as attributes.
如果您想为多个服务使用 VPC 端点,则需要为每个服务创建一个数据源。这可以用 for_each
.
简洁地完成
更新: 我不确定您的端点是如何设置的,但您需要找到一种独特的方式来引用它们。此处使用 for_each
的示例如下所示:
locals {
services = {
s3 = "com.amazonaws.us-east-2.s3"
ssm = "com.amazonaws.us-east-2.ssm"
}
}
data "aws_vpc_endpoint" "services" {
for_each = local.services
vpc_id = aws_vpc.vpc.id
service_name = each.value
}
然后要使用端点,您可以将其称为例如data.aws_vpc_endpoint.services["s3"].id
。如果你想遍历它们,你可以再次参考 local.services
字典。
您可以尝试 aws_resourcegroupstaggingapi_resources 到 return 多个具有特定标签的资源:
data "aws_resourcegroupstaggingapi_resources" "test" {
tag_filter {
key = "Example"
values = ["tag-value-1", "tag-value-2"]
}
}
您可以添加 resource_type_filters,但我不确定 VPC 端点的类型。
错误:“多个 VPC 端点匹配”
我正在使用数据“aws_vpc_endpoint”根据 vpc ID 检索多个端点 ID。我如何检索这些端点以在另一个资源中引用它们?或者是否可以从此数据资源中检索多个端点。有什么建议么?或者建议将不胜感激。这是代码片段。 count.index 已在资源“aws_route”中正确说明,现在我专注于检索多个端点以添加到 aws_route。
data "aws_vpc_endpoint" "firewall-endpoints" {
vpc_id = aws_vpc.vpc.id
filter {
name = "tag:Example"
values = [true]
}
}
resource "aws_route" "example" {
count = var.number_azs
route_table_id = aws_route_table.example[count.index].id
destination_cidr_block = var.tgw_aws_route[0]
vpc_endpoint_id = data.aws_vpc_endpoint_service.firewall-endpoints.id
}
documentation 非常明确:
The arguments of this data source act as filters for querying the available VPC endpoints. The given filters must match exactly one VPC endpoint whose data will be exported as attributes.
如果您想为多个服务使用 VPC 端点,则需要为每个服务创建一个数据源。这可以用 for_each
.
更新: 我不确定您的端点是如何设置的,但您需要找到一种独特的方式来引用它们。此处使用 for_each
的示例如下所示:
locals {
services = {
s3 = "com.amazonaws.us-east-2.s3"
ssm = "com.amazonaws.us-east-2.ssm"
}
}
data "aws_vpc_endpoint" "services" {
for_each = local.services
vpc_id = aws_vpc.vpc.id
service_name = each.value
}
然后要使用端点,您可以将其称为例如data.aws_vpc_endpoint.services["s3"].id
。如果你想遍历它们,你可以再次参考 local.services
字典。
您可以尝试 aws_resourcegroupstaggingapi_resources 到 return 多个具有特定标签的资源:
data "aws_resourcegroupstaggingapi_resources" "test" {
tag_filter {
key = "Example"
values = ["tag-value-1", "tag-value-2"]
}
}
您可以添加 resource_type_filters,但我不确定 VPC 端点的类型。