main.tf
resource "aws_instance" "service" {
ami = "${lookup(var.aws_winamis, var.awsregion)}"
count = "${var.count}"
key_name = "${var.key_name}"
instance_type = "t2.medium"
subnet_id = "${aws_subnet.private.id}"
# private_ip = "${lookup(var.server_instance_ips, count.index)}"
vpc_security_group_ids = ["${aws_security_group.private-sg.id}"]
associate_public_ip_address = false
availability_zone = "${var.awsregion}a"
tags {
Name = "${format("server-%01d", count.index + 1)}"
Environment = "${var.environment}"
}
}
Variable.tf
variable "awsregion" {default =""}
variable "count" {default = ""}
variable "server_instance_ips" {default = ""}
dev.tfvars
server_instance_ips = ["10.0.2.25", "10.0.2.26"] #doesn't work as a list but works with single IP address
count = "4"
awsregion = "us-east-1"
我希望服务器在创建后有标签 -dla-server-1
/2
/3
/4
,但使用我上面的代码,我只能做server-1
/2
/3
/4
但不能dla
/sla
/pla
具体取决于环境;IP 地址是随机分配给服务器的,因为我无法传递 IP 列表,最后,我如何在不同的可用区中创建服务器,即 AZ1a 中的 2 台服务器和 AZ1b 中的 2 台服务器?
第一个答案很简单:在标签名称中添加前缀。
tags {
Name = "${var.environment}-${format("server-%01d", count.index + 1)}"
Environment = "${var.environment}"
}
您需要将变量的类型指定为列表:
variable "server_instance_ips"
{
type = "list"
default = []
}
最后一个问题可以通过多种方式解决,我会选择类似的东西
availability_zone = "${data.aws_availability_zones.available.names[count.index]}"