amazon-web-services - 来自两个 terraform 映射的子网之间的随机播放作为 ec2 实例创建的输入
问题描述
对于每个环境,我都有两组 CIDR,我希望 terraform 在创建新实例时在两组之间随机播放。
我查看了 terraformrandom_shuffle
提供程序和合并功能,但这些并没有为我的问题提供解决方案。
resource "aws_subnet" "myapp" {
cidr_block = "${cidrsubnet(var.vpc_cidr[terraform.workspace], 5, count.index + 16 + 5)}"
}
variable "vpc_cidr" {
type = "map"
default = {
QA = "20.30.100.0/23"
TEST = "20.37.200.0/23"
PROD = "20.37.200.0/23"
DEV = "20.37.100.0/23"
}
}
locals {
"vpc_cidr_2" = {
QA = "10.30.182.0/23"
TEST = "10.37.238.0/23"
PROD = "<none>"
DEV = "<none>"
}
}
我希望根据 vpc_cidr 或 vpc_cidr2 计算 cidr_block 并在每个之间随机播放。如果找到,它还需要检查并回退到另一张地图。
注意:
vpc_cidr
是变量,vpc_cidr_2
而是局部变量。
解决方案
random_shuffle
是您应该使用的正确资源,但您需要改变将变量和本地变量混合在一起的想法。
resource "aws_subnet" "myapp" {
vpc_id = "${aws_vpc.main.id}"
cidr_block = "${cidrsubnet(lookup(var.vpc_cidr[random_shuffle.vpc_cidr.result], terraform.workspace), 5, count.index + 16 + 5)}"
}
resource "random_shuffle" "vpc_cidr" {
input = ["vpc_cidr", "vpc_cidr_2"]
}
variable "vpc_cidr" {
type = "map"
default = {
vpc_cidr = {
"QA" = "20.30.100.0/23"
"TEST" = "20.37.200.0/23"
"PROD" = "20.37.200.0/23"
"DEV" = "20.37.100.0/23"
}
vpc_cidr_2 = {
"QA" = "10.30.182.0/23"
"TEST" = "10.37.238.0/23"
"PROD" = "<none>"
"DEV" = "<none>"
}
}
}
推荐阅读
- javascript - TypeError:无法在 Bootstrap tooltip.dispose() 上读取 null 的属性(读取“模板”)
- autodesk-forge - 将 IFC 旋转到正北
- reactjs - 如何使用 react 和 redux 从本地 api 获取单个数据?
- css - 只有具有特定数量子元素的容器的 ccs 样式
- apache-spark - 如何在 Emr 集群上安装定制的 .whl 外部库
- android - Xamarin.Forms Android 保留汉堡包/菜单图标而不是后退按钮
- javascript - Debounce 功能在 keyup 时立即触发,而是必须在一秒钟后触发
- python - _tkinter.TclError:图像“pyimage380”不存在
- python - 使用烧瓶重定向 url 时保存数据
- angular - 有没有办法遍历 TypeScript 中的自定义对象属性?