0

我们需要创建一个 ec2 模块并使用它来创建一个 ec2 实例(1 个或更多)+ ebs 设备/ebs 卷,并使用相同的 ec2 模块创建没有任何 ebs 卷的 ec2(1 个或更多)。

我通过条件(计数)尝试了它,但遇到了各种错误。帮助!

4

1 回答 1

0

当尝试有条件地创建资源时,可以使用三元来计算count参数。

几点注意事项:

  • 使用countaws_instance.exampleaws_ebs_volume.ebs-volume-1、 和aws_ebs_volume.ebs-volume-2资源 将是数组。
  • 将 EBS 卷附加到实例时,由于aws_volume_attachment资源具有count,您可以将它们视为迭代阵列以将卷附加到 EC2 实例。
  • 您可以使用count.index从 EC2 实例阵列和两个 EBS 卷资源中提取正确的项目。对于 count 的每个值,该块执行一次。
variable "create_ebs" {
  default = false
}

variable "instance_count" {
  default = "1"
}

resource "aws_instance" "example" {
  count         = "${var.instance_count}"
  ami           = "ami-1"
  instance_type = "t2.micro"
  subnet_id     = "subnet-1" #need to have more than one subnet
}

resource "aws_ebs_volume" "ebs-volume-1" {
  count             = "${var.create_ebs ? var.instance_count : 0}"
  availability_zone = "us-east-1a" #use az based on the subnet
  size              = 10
  type              = "standard"
}

resource "aws_ebs_volume" "ebs-volume-2" {
  count             = "${var.create_ebs ? var.instance_count : 0}"
  availability_zone = "us-east-1a"
  size              = 10
  type              = "gp2"
}

resource "aws_volume_attachment" "ebs-volume-1-attachment" {
  count         = "${var.create_ebs ? var.instance_count : 0}"
  device_name   = "/dev/sdf${count.index}"
  volume_id     = "${element(aws_ebs_volume.ebs-volume-1.*.id, count.index)}"
  instance_id   = "${element(aws_instance.example.*.id, count.index)}"
}

resource "aws_volume_attachment" "ebs-volume-2-attachment" {
  count         = "${var.create_ebs ? var.instance_count : 0}"
  device_name   = "/dev/sdg${count.index}"
  volume_id     = "${element(aws_ebs_volume.ebs-volume-2.*.id, count.index)}"
  instance_id   = "${element(aws_instance.example.*.id, count.index)}"
}

有关更多信息,count.index您可以在Terraform 插值页面上搜索

于 2019-02-11T12:57:11.957 回答