Amazon ec2 Terraform:如何在子网的aws_lb内循环aws_实例
我有以下定义实例的TerraformAmazon ec2 Terraform:如何在子网的aws_lb内循环aws_实例,amazon-ec2,terraform,aws-load-balancer,Amazon Ec2,Terraform,Aws Load Balancer,我有以下定义实例的Terraform变量 variable "instance_types" { default = { k8_east_1_control_plane = { count = 1 role = "control-plane" ami = "ami-xxx"
变量
variable "instance_types" {
default = {
k8_east_1_control_plane = {
count = 1
role = "control-plane"
ami = "ami-xxx"
instance_type = "t2.large"
iam_instance_profile = "xxx-user"
subnet_id = "subnet-xxx-0"
}
k8_east_2_control_plane = {
count = 3
role = "contro-plane"
ami = "ami-xxx"
instance_type = "t2.large"
iam_instance_profile = "xxx-user"
subnet_id = "subnet-xxx-1"
}
...
}
我有N
许多aws\u实例
(下面的示例)
问题:如何循环这些aws\U实例
以从角色
类型的“控制平面”填充子网
伪代码中的目标,传统的for循环
resource "aws_lb" "k8s_load_balancer" {
depends_on = [aws_instance.k8s-node]
name = "k8_load_balancer"
load_balancer_type = "network"
dynamic "subnet_mapping" {
for(aws_instance instance : aws_instance.k8s-node) {
if(instance.role.equls("control-plane")){
subnet_mapping {
subnet_id = instance.subnet_id
private_ipv4_address = instance.private_ip
}
}
}
}
由于您的var.instance_类型
在您的aws_实例
和动态块中都使用,因此应该可以执行以下操作:
dynamic "subnet_mapping" {
for_each = { for key, value in variable.instance_types:
key => {
subnet_id = value.subnet_id
} if value.role == "control-plane"
}
content {
subnet_id = subnet_mapping.value.subnet_id
private_ipv4_address = aws_instance.k8s-node[subnet_mapping.key].private_ip
}
}
马辛又来救我了!感谢you@stackoverflow没问题。很高兴它成功了:-)
resource "aws_lb" "k8s_load_balancer" {
depends_on = [aws_instance.k8s-node]
name = "k8_load_balancer"
load_balancer_type = "network"
dynamic "subnet_mapping" {
for(aws_instance instance : aws_instance.k8s-node) {
if(instance.role.equls("control-plane")){
subnet_mapping {
subnet_id = instance.subnet_id
private_ipv4_address = instance.private_ip
}
}
}
}
dynamic "subnet_mapping" {
for_each = { for key, value in variable.instance_types:
key => {
subnet_id = value.subnet_id
} if value.role == "control-plane"
}
content {
subnet_id = subnet_mapping.value.subnet_id
private_ipv4_address = aws_instance.k8s-node[subnet_mapping.key].private_ip
}
}