Choolai Raj
Choolai Raj

Reputation: 131

setting hostname on multiple EC2 based on tags

I am running a terraform code to create multiple EC2 instances. Is there a way to setup the hostname of the instance based on tag and a domain name . Currently i login and run hostnamectl set-hostname ..

here is my tf script i use the create the instance.

resource "aws_instance" "RR-TEMP-V-DB" {
  ami                     = var.linux_ami[var.region]
  availability_zone       = var.availability_zone
  instance_type           = var.temp_instance_type
  key_name                = var.linux_key_name
  vpc_security_group_ids  = [var.vpc_security_group_ids[var.region]]
  subnet_id               = var.db_subnet_id
  count                   = var.temp_count
  tags = {
    Name        = "RR-TEMP-V-DB-${format("%02d", count.index + 1)}"
    Environment = var.env_tag
  }
}

Thanks

Upvotes: 0

Views: 2136

Answers (2)

duhaas
duhaas

Reputation: 248

We accomplish as part of user data, looks similar to:

instance_name=$(aws ec2 describe-instances --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --query "Reservations[*].Instances[*].Tags[?Key=='Name'].Value" --region $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e "s/.$//") --output text)
sudo hostnamectl set-hostname --static $instance_name

Upvotes: 1

grgizem
grgizem

Reputation: 310

you can accomplish that with running as user data as @duhaas suggested or using remote-exec provisioner of terraform. here is the provisioner documentation of terraform, as you will see recommended way is setting user data on instance provision:

https://www.terraform.io/docs/provisioners/

for more details on remote-exec:

https://www.terraform.io/docs/provisioners/remote-exec.html

Upvotes: 0

Related Questions