amazon-web-services - Terraform:如何从 VPC id 获取 VPC CIDR?
问题描述
我正在尝试为给定 VPC 获取PIV4_CIDR,使用 aws_vpcs 数据源首先识别 VPC 并从 ID 获取 CIDR - 可能吗?
只是一点背景,出于某种设计原因,我们在不同的 VPC 中有服务。说,例如。我有三个 VPC:xxxprod-n
,xxxprod-l
并且xxxprod-h
我想为整个子网添加一个 SG 规则以允许访问特定端口。这是我尝试过的:
data "aws_vpcs" "prod" {
tags = {
Name = "${var.project}prd-*"
}
}
resource "aws_security_group_rule" "pa-allow" {
count = length(data.aws_vpcs.prod.ids)
type = "ingress"
from_port = 8140
to_port = 8140
protocol = "tcp"
cidr_blocks = [sort(data.aws_vpcs.prod.ids)[count.index].cidr_block]
security_group_id = aws_security_group.secg.id
description = "allow from ${sort(data.aws_vpcs.prod.ids)[count.index]}"
}
我得到错误:
错误:不支持的属性
在 ../../modules/mgt/ec2.tf 第 42 行,在资源“aws_security_group_rule”“pa-allow”中:42: cidr_blocks = [sort(data.aws_vpcs.prod.ids)[count.index].cidr_block ]
该值没有任何属性。
我试过了,基于这个页面:https://www.terraform.io/docs/providers/aws/d/vpc.html
,认为aws_vpc和aws_vpcs会做类似的事情,但似乎没有。知道我该怎么做吗?
解决方案
您可以SET
使用 data.aws_vpcs 获取(不是列表)vpc。(我认为文档是错误的......)然后您可以使用data.aws_vpcs获取data.aws_vpc列表,并且您可以获取它们的cidr块。
data "aws_vpcs" "prod" {
tags = {
Name = "${var.project}prd-*"
}
}
data "aws_vpc" "prod" {
count = length(data.aws_vpcs.prod.ids)
id = tolist(data.aws_vpcs.prod.ids)[count.index]
}
resource "aws_security_group_rule" "pa-allow" {
count = length(data.aws_vpcs.prod.ids)
type = "ingress"
from_port = 8140
to_port = 8140
protocol = "tcp"
cidr_blocks = [data.aws_vpc.prod[count.index].cidr_block]
security_group_id = aws_security_group.secg.id
description = "allow from ${tolist(data.aws_vpcs.prod.ids)[count.index]}"
}
推荐阅读
- python - Pyspark 将 StructType 转换为 ArrayType
- javascript - 带有后端 REST API 的 Vue 应用程序的设计模式
- php - 选择运输方式后的 Woocommerce 结帐弹出窗口
- c# - 如何读取控制台输入直到空格或在 C# 中输入
- angular - Angular TemplateRef 问题
- c# - 无法将加密的文本从 C# 传递到 C++ 和相反
- javascript - 函数字面量是表达式吗?
- bash - Bash $0 与终端使用的命令不匹配
- python - 如何在 miniconda 中激活环境
- sql - SQL查询两次加入同一个父表