首页 > 解决方案 > Terraform 快照不适用于 ebs_block_device 的动态块

问题描述

我创建了一些带有“ ResourceName -”Master-Node-1-SNAPmount-/X01 或 XO2”等标签的 EBS 快照(标签中只有 1 个值),我想在创建 EC2 时动态使用这些快照.在我的场景中,我必须创建 6 个主节点和 2 个边缘节点。

例如,当我想创建主节点 1。我想过滤属于主节点 1 的快照,然后需要确定快照应该挂载为 /x01 还是 /x02。

我创建了与 terraform 输出一起使用的示例逻辑。但是当我将它应用于 EC2 模块时,它会给出如下错误

调用函数“元素”失败:不能将元素函数与空列表一起使用。

我的模块代码如下。

data "aws_ebs_snapshot" "ebs_volume" {
    for_each = toset(local.pre_snapshot_ids)
    snapshot_ids = [each.value]
}

resource "aws_instance" "this" {
  count = var.instance_count

Dynamic Block,在snapshot_id中,需要找到正确的ID

dynamic "ebs_block_device" {
    for_each = var.ebs_block_device
    content {
      delete_on_termination = lookup(ebs_block_device.value, "delete_on_termination", null)
      device_name           = ebs_block_device.value.device_name
      encrypted             = lookup(ebs_block_device.value, "encrypted", null)
      iops                  = lookup(ebs_block_device.value, "iops", null)
      kms_key_id            = lookup(ebs_block_device.value, "encrypted", null) == "true" ? var.kms_key_id : null
      # snapshot_id           = lookup(ebs_block_device.value, "snapshot_id", null)
      snapshot_id           = element([
        for val in data.aws_ebs_snapshot.ebs_volume : val.id
        if "${val.tags["mount"]}" == tostring(lookup(ebs_block_device.value, "mount", null))
        &&
        tostring(element(split("-", "${val.tags["ResourceName"]}"), length(split("-", "${val.tags["ResourceName"]}"))-2)) == "${tostring(count.index + 1)}"
      ],0)
      volume_size           = lookup(ebs_block_device.value, "volume_size", null)
      volume_type           = lookup(ebs_block_device.value, "volume_type", null)

示例 ebs_block_device 值

master_ebs_block_device = [
    {
        device_name = "/dev/sdb"
        encrypted = true
        volume_type = "gp2"
        volume_size = 100
        mount = "/x01"            
        },
        {
        device_name = "/dev/sdc"
        encrypted = true
        volume_type = "gp2"
        volume_size = 500
        mount = "/x02"            
        },

]

标签: amazon-ec2terraform

解决方案


推荐阅读