【问题标题】:Terraform: How to append the server count and assign servers to multiple AZ's?Terraform:如何附加服务器计数并将服务器分配给多个可用区?
【发布时间】:2023-03-03 02:30:01
【问题描述】:

ma​​in.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}"
  }
}

变量.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/@987654330 @/4 但不是dla/sla/pla 取决于环境; IP 地址是随机分配给服务器的,因为我无法传递 IP 列表,最后,如何在不同的 AZ 中创建服务器,即 AZ1a 中的 2 个服务器和 AZ1b 中的 2 个服务器?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    第一个答案很简单:在标签名称中添加前缀。

    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]}"
    

    【讨论】:

    • 建议您不要使用 ${var.environment},而是使用 ${terraform.workspace}
    • @giulio vian,我收到以下错误。错误:资源“aws_subnet.private”配置:变量 data.aws_availability_zones.available.names main.tfresource "aws_subnet" "private" { vpc_id = "${aws_vpc.vpcname.id}" cidr_block = "${var.private_subnet}" availability_zone = "${data.aws_availability_zones.available.names[count.index]}" map_public_ip_on_launch = false tags { Name = "${var.private}" Environment = "${terraform.workspace}" } } 中引用了未知资源“data.aws_availability_zones.available”
    • variable.tf variable "aws_availability_zones" { default = [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1e" ] type = "list" }
    • 需要声明数据源data "aws_availability_zones" "available" {}terraform.io/docs/providers/aws/d/availability_zones.html
    • 你说得对。谢谢!!在 main.tf 中声明了数据“aws_availability_zones”“available”{},它起作用了。最后一个问题,我想从一个资源块创建多个私有子网,我正在执行以下操作,但这是行不通的。
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2020-10-19
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多