'Terraform - module input like variable

I can use ad input of module like variable to tag volume? I've this block:

module "jenkins" {
  source  = "terraform-aws-modules/ec2-instance/aws"
  version = "3.4.0"
  name = "Jenkins"
  ami                         = data.aws_ami.amazon_linux.id
  instance_type               = "t3.nano"
  availability_zone           = element(module.vpc.azs, 0)
  subnet_id                   = element(module.vpc.public_subnets, 0)
  vpc_security_group_ids      = [module.jenkins-sg.security_group_id]
  associate_public_ip_address = true
  key_name = "my_key"
  user_data = file("userdata/init.sh")
  enable_volume_tags = false
  root_block_device = [
    {
      encrypted   = false
      volume_type = "gp3"
      volume_size = 15
      throughput  = 150
      tags = {
        Name = "${name}-root"
        terraform = "true"
        user_type = "ebs"
      }
    },
  ]
  ebs_block_device = [
    {
      encrypted   = false
      device_name = "/dev/sdf"
      volume_type = "gp3"
      volume_size = 50
      throughput  = 150
    }
  ]
  volume_tags = {
        Name = "${name}-data"
        terraform = "true"
        user_type = "ebs"
      }
  tags = {
    terraform = "true"
    user_type = "ec2"
  }
}

As seen in "$ {name} -root" and "$ {name} -data", is it possible to tag with the input name "name"?

Thanks



Solution 1:[1]

You can't reference this module variable likes this. However, you can use a input variable (can be overridden from outside) or a local value (fixed value) to achieve this.

input variable

variable "ec2_instance_name" {
  type        = string
  description = "The name of the ec2 instance"
  default     = "jenkins"
}

module "jenkins" {
  source                      = "terraform-aws-modules/ec2-instance/aws"
  version                     = "3.4.0"
  name                        = var.ec2_instance_name
  ami                         = data.aws_ami.amazon_linux.id
  instance_type               = "t3.nano"
  availability_zone           = element(module.vpc.azs, 0)
  subnet_id                   = element(module.vpc.public_subnets, 0)
  vpc_security_group_ids      = [module.jenkins-sg.security_group_id]
  associate_public_ip_address = true
  key_name                    = "my_key"
  user_data                   = file("userdata/init.sh")
  enable_volume_tags          = false
  root_block_device = [
    {
      encrypted   = false
      volume_type = "gp3"
      volume_size = 15
      throughput  = 150
      tags = {
        Name      = "${var.ec2_instance_name}-root"
        terraform = "true"
        user_type = "ebs"
      }
    },
  ]
  ebs_block_device = [
    {
      encrypted   = false
      device_name = "/dev/sdf"
      volume_type = "gp3"
      volume_size = 50
      throughput  = 150
    }
  ]
  volume_tags = {
    Name      = "${var.ec2_instance_name}-data"
    terraform = "true"
    user_type = "ebs"
  }
  tags = {
    terraform = "true"
    user_type = "ec2"
  }
}

local value

locals {
  ec2_instance_name = "jenkins"
}

module "jenkins" {
  source                      = "terraform-aws-modules/ec2-instance/aws"
  version                     = "3.4.0"
  name                        = local.ec2_instance_name
  ami                         = data.aws_ami.amazon_linux.id
  instance_type               = "t3.nano"
  availability_zone           = element(module.vpc.azs, 0)
  subnet_id                   = element(module.vpc.public_subnets, 0)
  vpc_security_group_ids      = [module.jenkins-sg.security_group_id]
  associate_public_ip_address = true
  key_name                    = "my_key"
  user_data                   = file("userdata/init.sh")
  enable_volume_tags          = false
  root_block_device = [
    {
      encrypted   = false
      volume_type = "gp3"
      volume_size = 15
      throughput  = 150
      tags = {
        Name      = "${local.ec2_instance_name}-root"
        terraform = "true"
        user_type = "ebs"
      }
    },
  ]
  ebs_block_device = [
    {
      encrypted   = false
      device_name = "/dev/sdf"
      volume_type = "gp3"
      volume_size = 50
      throughput  = 150
    }
  ]
  volume_tags = {
    Name      = "${local.ec2_instance_name}-data"
    terraform = "true"
    user_type = "ebs"
  }
  tags = {
    terraform = "true"
    user_type = "ec2"
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1