I have provided an .sh
file as user_data
in my Terraform script:
resource "aws_instance" "alpha-terraform"{
ami=var.amis[var.region]
instance_type="t2.micro"
vpc_security_group_ids=[aws_security_group.alpha-terraform-sg.id]
user_data = file("user_data_bootstrap.sh")
key_name = "alpha-terraform"
tags={
type="alpha"
purpose="terraform"
}
}
The .sh
file contains:
#Jenkins Installation:
sudo apt update
sudo apt install openjdk-8-jdk --yes
wget –q –O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add –
sudo sh -c 'echo deb https://pkg.jenkins.io/debian binary/ >> /etc/apt/sources.list'
sudo apt update
sudo apt install Jenkins
sudo systemctl status jenkins
find /usr/lib/jvm/java-1.8* | head -n 3
My instance is getting created all right. However, I believe my user_data is not getting executed. I can see the user_data is being copied to /var/lib/cloud/instance/
as user-data.txt
and user-data.txt.i
but still not getting executed.
Why is this happening and how can I debug it further?
Update
I tried accessing the server through and executing each command one by one but getting following error while updating apt packages:
ubuntu@ip-172-31-52-**:~$ apt update
Reading package lists... Done
W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
ubuntu@ip-172-31-52-**:~$ sudo apt update
Reading package lists... Done
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
4
Answers
I will prefer templatefile over file where you have more control and pass variable to user data as well.
then use the template_file in a userdata section
Also, add the hashbang in the file with debug
You’re missing
#!/bin/bash
at the beginning of the file. From the documentation:I verified the script on my sandbox account.
It had mistakes. The corrected version is as follows:
The changes were:
sudo
–
to-
apt install Jenkins
toapt install -y jenkins
I can confirm that it works now with
terraform
on Ubuntu 18.04 instance.Upon launching the instance,
jenkins
is available athttp://<instance-ip>:8080
:To help troubleshooting, it’s a good idea to SSH and check folder
/var/lib/cloud/instances/instance-id/
. You should find the data_user script there. Read it to check if everything is as expected.