loops - 在 terraform 中映射所有现有的 aws 安全组
问题描述
我想获取现有的 aws 安全组信息,以便通过名称而不是 id 来引用它们。
我可以使用以下方法引用单个现有实例:
data "aws_security_groups" "single" {
filter {
name = "group-name"
values = ["Foo-all"]
}
}
output "singlename" {
value = "${data.aws_security_groups.single.ids[0]}"
}
这并不理想,因为我需要输入所有安全组 ID 作为自己的块。
我可以使用以下命令打印所有安全组的所有属性:
data "aws_security_groups" "sgroups" {
filter {
name = "vpc-id"
values = ["${data.aws_vpc.vpc.id}"]
}
}
data "aws_security_group" "instances" {
count = length(data.aws_security_groups.sgroups.ids)
id = data.aws_security_groups.test.ids[count.index]
}
output "groupinfo" {
value = "${data.aws_security_group.instances}"
}
这对我来说没用,因为我想要一个 Name = id 映射。
我希望做的是将所有现有的安全组定义为一个映射,这样我就可以执行以下操作:
resource "aws_instance" "fooTest" {
ami = "${var.ami}"
instance_type = "t2.nano"
subnet_id = "${var.subnets["Foo-net"]}"
key_name = "Fookey"
vpc_security_group_ids = [
"${var.existingsgs["Foo-all"]}",
]
}
这可以做到吗?还是有更好的方法来实现基于名称的安全组引用?
解决方案
我不认为您可以输出地图,您应该能够使用数据源输出 sec 组 id 的列表,就像您对示例代码所做的那样。通过过滤数据源以获取带有特定标签的资源,更进一步。然后只需引用您的 aws_instance 资源块中的数据资源。
请求示例:
要读取现有的 vpc 和安全组,请使用数据源。通过过滤应用于 vpc 和安全组的特定标签来选择所需的目标。
data "aws_vpc" "my_vpc" {
tags = {
Project = "my_vpc"
Environment = "qa"
}
}
data "aws_security_group" "my_sg" {
vpc_id = "${data.aws_vpc.my_vpc.id}"
tags = {
Name = "my_sg"
Environment = "qa"
}
}
创建资源时,您可以引用已获取的数据源。请记住,首先读取数据源以使它们在创建其他资源时可用。
resource "aws_instance" "fooTest" {
ami = "${var.ami}"
instance_type = "t2.nano"
subnet_id = "${var.subnets["Foo-net"]}"
key_name = "Fookey"
vpc_security_group_ids = ["${data.aws_security_group.my_sg.ids}"]
}
您也可以对子网执行相同的操作,AWS 中存在的几乎所有内容都可以读取到数据源块中,以便在创建其他资源时进行引用。
https://www.terraform.io/docs/configuration/data-sources.html
推荐阅读
- algorithm - 如何生成随机字符串类型的主键,可以自动增加长度?
- android - 添加 kotlin-kapt 插件后,Retrofit 界面中的 Kapt InvocationTargetException 异常
- r - 使用包“synthpop”来自加权原始样本的 R 合成样本
- android - 使用 ExoPlayer 时 4k 视频出现大量丢帧
- java - Log4j2 没有在午夜创建新的日志文件和备份旧的
- javascript - Material UI Data Grid:有没有办法右对齐整列?
- c# - Mongodb C#更新具有多个值的多个数组中的元素
- javascript - 将整数解析为浮点数,从输入中选择值
- python - 计算日期上方的列数
- python - 为什么 cv2.DescriptorMatcher 效果不佳?