【问题标题】:Creating multiple EBS volumes using AWS EC2_instance module使用 AWS EC2_instance 模块创建多个 EBS 卷
【发布时间】:2021-11-12 18:34:55
【问题描述】:

计数索引在 ebs_block_device 中不起作用, 关于如何使其工作的任何建议? 这是我正在使用的代码示例。 作为输出,它只创建计数中的第一个驱动器。

module "ec2_instance" {
  source  = "terraform-aws-modules/ec2-instance/aws"
  version = "~> 3.0"

  count = "${var.count_ec2}"
  name = "${var.name}${count.index + 1 }"

  ami                    = var.ami
  instance_type          = var.instance_type
  key_name               = var.key_name
  monitoring             = true
  vpc_security_group_ids = [var.security_id]
  subnet_id              = var.subnet_id

  root_block_device = [
    {
      volume_type = var.root_drive_type
      volume_size = var.root_drive_size
      encrypted   = true
      kms_key_id  = var.kms_key
    }
]

  ebs_block_device = [
    {
      count       = "${var.count_drives}"
      device_name = "${element(var.ebs_devices_names, count.index)}"
      volume_type = var.ebs_drives_type
      volume_size = "${element(var.ebs_devices_size, count.index)}"
      encrypted   = true
      delete_on_termination = false
      kms_key_id  = var.kms_key

    },
]

【问题讨论】:

  • “不在 ebs_block_device 内工作” - 不具体。到底发生了什么?有任何错误信息吗?
  • terraform plan 给出的信息是只创建一个块设备,而不是 var.count_drives 中设置的 4 个
  • 评论了 ebs_block_device,并使用了 aws_ebs_volume/aws_volume_attachment,它可以工作。按照应有的方式创建 4 个 EBS 卷。这是否意味着 count 在 terraform-aws-modules/ec2-instance/aws 模块中的 ebs_block_device 中不起作用?还是我的代码有错误?

标签: amazon-web-services count terraform terraform-provider-aws


【解决方案1】:

countebs_block_device 的无效参数。如果要创建多个 ebs 卷,则必须使用 for 循环 将它们全部列出:

ebs_block_device = [for index in var.count_drives:
    {
      device_name = "${element(var.ebs_devices_names, index)}"
      volume_type = var.ebs_drives_type
      volume_size = "${element(var.ebs_devices_size, index)}"
      encrypted   = true
      delete_on_termination = false
      kms_key_id  = var.kms_key

    }
  ]

【讨论】:

  • 谢谢你,Marcin,周一会检查。它应该工作!
  • @Alex 没问题。让我知道它会如何进行。如果您觉得它有用,我们将不胜感激。
【解决方案2】:

以下建议为 ebs_block_device 设置一个循环,如果添加的 ebs_block_device 等于或大于为 var.volume_count 配置的值,循环将停止。

dynamic "ebs_block_device" {
for_each = {
for k,v in var.id : k => v
if k < var.volume_count
}
content {
device_name = "/dev/sd${ebs_block_device.value}"
volume_type = var.volume_type
volume_size = var.volume_size
delete_on_termination = var.delete_on_termination
}

在 variables.tf 中你可以有如下内容:

variable "id" {
  type        = list
  description = "part of ID to identify each volume"
  default     = ["d", "e", "f", "g", "h", "i", "j", "k", "l" ,"m", "n", "o", "p", 
                 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2018-04-26
    • 2019-04-06
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多