# How to add additional tag for EBS volume base on variable?

**URL:** <https://discuss.hashicorp.com/t/how-to-add-additional-tag-for-ebs-volume-base-on-variable/24394>\
**Category:** Terraform\
**Created:** [May 15, 2021, 6:30am UTC](https://discuss.hashicorp.com/t/how-to-add-additional-tag-for-ebs-volume-base-on-variable/24394 "2021-05-15T06:30:51Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![lahirushanaka](https://sea2.discourse-cdn.com/hashicorp/user_avatar/discuss.hashicorp.com/lahirushanaka/32/19386_2.png) [@lahirushanaka](https://discuss.hashicorp.com/u/lahirushanaka)\
**Post date:** [May 15, 2021, 6:30am UTC](https://discuss.hashicorp.com/t/how-to-add-additional-tag-for-ebs-volume-base-on-variable/24394/1 "2021-05-15T06:30:52Z")

</div>

I’m using this EC2 [module](https://github.com/terraform-aws-modules/terraform-aws-ec2-instance) with lite alteration to create EC2 instances and EBS volumes, Code is working without an issue, But I have requirement to add mount point as a tag in EBS, So I can use data filter to get that value and mount it using Ansible. Im trying to add tag value to "dynamic “ebs\_block\_device” through depoy-ec2.tf configuration file. As per the Terraform [documentation](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#ebs-ephemeral-and-root-block-devices) tags is an optional value. Anyway, when I executing this it provided Unsupported argument error for tags value. Appreciate your support to understand issue here.

```auto
locals {
  is_t_instance_type = replace(var.instance_type, "/^t(2|3|3a){1}\\..*$/", "1") == "1" ? true : false
}

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

  ami = var.ami
  instance_type = var.instance_type
  user_data = var.user_data
  user_data_base64 = var.user_data_base64
  subnet_id = length(var.network_interface) > 0 ? null : element(
    distinct(compact(concat([var.subnet_id], var.subnet_ids))),
    count.index,
  )
  key_name = var.key_name
  monitoring = var.monitoring
  get_password_data = var.get_password_data
  vpc_security_group_ids = var.vpc_security_group_ids
  iam_instance_profile = var.iam_instance_profile

  associate_public_ip_address = var.associate_public_ip_address
  private_ip = length(var.private_ips) > 0 ? element(var.private_ips, count.index) : var.private_ip
  ipv6_address_count = var.ipv6_address_count
  ipv6_addresses = var.ipv6_addresses

  ebs_optimized = var.ebs_optimized

  dynamic "root_block_device" {
    for_each = var.root_block_device
    content {
      delete_on_termination = lookup(root_block_device.value, "delete_on_termination", null)
      encrypted = lookup(root_block_device.value, "encrypted", null)
      iops = lookup(root_block_device.value, "iops", null)
      kms_key_id = lookup(root_block_device.value, "kms_key_id", null)
      volume_size = lookup(root_block_device.value, "volume_size", null)
      volume_type = lookup(root_block_device.value, "volume_type", null)
    }
  }

  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, "kms_key_id", null)
      snapshot_id = lookup(ebs_block_device.value, "snapshot_id", null)
      volume_size = lookup(ebs_block_device.value, "volume_size", null)
      volume_type = lookup(ebs_block_device.value, "volume_type", null)
      tags = lookup(ebs_block_device.value, "mount", null)
      
    }
  }

  dynamic "ephemeral_block_device" {
    for_each = var.ephemeral_block_device
    content {
      device_name = ephemeral_block_device.value.device_name
      no_device = lookup(ephemeral_block_device.value, "no_device", null)
      virtual_name = lookup(ephemeral_block_device.value, "virtual_name", null)
    }
  }

  dynamic "metadata_options" {
    for_each = length(keys(var.metadata_options)) == 0 ? [] : [var.metadata_options]
    content {
      http_endpoint = lookup(metadata_options.value, "http_endpoint", "enabled")
      http_tokens = lookup(metadata_options.value, "http_tokens", "optional")
      http_put_response_hop_limit = lookup(metadata_options.value, "http_put_response_hop_limit", "1")
    }
  }

  dynamic "network_interface" {
    for_each = var.network_interface
    content {
      device_index = network_interface.value.device_index
      network_interface_id = lookup(network_interface.value, "network_interface_id", null)
      delete_on_termination = lookup(network_interface.value, "delete_on_termination", false)
    }
  }

  source_dest_check = length(var.network_interface) > 0 ? null : var.source_dest_check
  disable_api_termination = var.disable_api_termination
  instance_initiated_shutdown_behavior = var.instance_initiated_shutdown_behavior
  placement_group = var.placement_group
  tenancy = var.tenancy

  tags = merge(
    {
      "Name" = var.instance_count > 1 || var.use_num_suffix ? format("%s${var.num_suffix_format}-EC2", var.name, count.index + 1) : format("%s-EC2",var.name)
    },
    {
      "ResourceName" = var.instance_count > 1 || var.use_num_suffix ? format("%s${var.num_suffix_format}-EC2", var.name, count.index + 1) : format("%s-EC2",var.name)
    },
    {"Account" = var.Account,
    "Environment" = var.Environment, 
    "ApplicationName" = var.ApplicationName,
    "ApplicationID" = var.ApplicationID,
    "Project" = var.Project,
    "ProjectCode" = var.ProjectCode,
    "Workload" = var.Workload, 
    "Division" = var.Division, 
    "Purpose" = var.Purpose, 
    "VersionNumber" = var.VersionNumber, 
    "RelVersion" = var.RelVersion, 
    "OSVersion" = var.OSVersion, 
    "DBVersion" = var.DBVersion,
    "DataClassification" = var.DataClassification,
    "Automation" = var.Automation,
    "AWSResoureceType" = "EC2",
    "BusinessEntitiy" = var.BusinessEntitiy,
    "CostCentre" = var.CostCentre,
    "BaseImageName" = var.BaseImageName},
    var.tags,
  )

  volume_tags = merge(
    {
      "Name" = var.instance_count > 1 || var.use_num_suffix ? format("%s${var.num_suffix_format}-EBS", var.name, count.index + 1) : format("%s-EBS",var.name)
    },
    {
      "ResourceName" = var.instance_count > 1 || var.use_num_suffix ? format("%s${var.num_suffix_format}-EBS", var.name, count.index + 1) : format("%s-EBS",var.name)
    },
    
    {"Account" = var.Account,
    "Environment" = var.Environment,
    "ApplicationName" = var.ApplicationName,
    "ApplicationID" = var.ApplicationID,
    "Project" = var.Project,
    "ProjectCode" = var.ProjectCode,
    "Workload" = var.Workload,
    "Division" = var.Division,
    "Purpose" = var.Purpose,
    "VersionNumber" = var.VersionNumber,
    "RelVersion" = var.RelVersion,
    "OSVersion" = var.OSVersion,
    "DBVersion" = var.DBVersion,
    "DataClassification" = var.DataClassification,
    "Automation" = var.Automation,
    "AWSResoureceType" = "EC2",
    "BusinessEntitiy" = var.BusinessEntitiy,
    "CostCentre" = var.CostCentre,
    "BaseImageName" = var.BaseImageName},
    var.volume_tags,
  )

  credit_specification {
    cpu_credits = local.is_t_instance_type ? var.cpu_credits : null
  }
}

```

```auto
module "mn-ec2" {
    source = "../../../terraform12-modules/aws/ec2-instance"

    instance_count = var.master_nodes

    name = "${var.Account}-${var.Environment}-${var.ApplicationName}-${var.Project}-${var.Division}-${var.Purpose}-MN"
    ami = var.ami_id
    instance_type = var.master_node_ec2_type
    subnet_ids = ["${data.aws_subnet.primary_subnet.id}","${data.aws_subnet.secondory_subnet.id}","${data.aws_subnet.tertiary_subnet.id}"]
    vpc_security_group_ids = ["${module.sg-application-servers.this_security_group_id}"]
    iam_instance_profile = "${var.iam_instance_profile}"
    key_name = var.key_pair_1
    
    Project = upper(var.Project)
    Account = var.Account
    Environment = var.Environment
    ApplicationName = var.ApplicationName
    ApplicationID = var.ApplicationID
    ProjectCode = var.ProjectCode
    Workload = var.Workload
    Division = var.Division
    RelVersion = var.RelVersion
    Purpose = var.Purpose
    DataClassification = var.DataClassification
    CostCentre = var.CostCentre
    Automation = var.Automation
    tags = {
        node_type = "master"
    }
    volume_tags = {
        node_type = "master"
    }

    root_block_device = [
        {
        encrypted = true
        kms_key_id = var.kms_key_id
        volume_type = "gp2"
        volume_size = 250
        },
    ]
    ebs_block_device = [
        {
        device_name = "/dev/sdc"
        encrypted = true
        kms_key_id = var.kms_key_id
        volume_type = "gp2"
        volume_size = 500
        mount = "/x02"            
        },
        {
        device_name = "/dev/sdd"
        encrypted = true
        kms_key_id = var.kms_key_id
        volume_type = "gp2"
        volume_size = 1000
        mount = "/x03"            
        },
        {
        device_name = "/dev/sde"
        encrypted = true
        kms_key_id = var.kms_key_id
        volume_type = "gp2"
        volume_size = 10000
        mount = "/x04"            
        },

    ]
}

```
