He proporcionado un archivo .sh como user_data en mi script de Terraform:
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" } } El archivo .sh contiene:
#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 Mi instancia se está creando correctamente. Sin embargo, creo que mis datos de usuario no se ejecutan. Puedo ver que los datos de usuario se copian en /var/lib/cloud/instance/ como user-data.txt y user-data.txt.i pero aún no se ejecutan.
¿Por qué sucede esto y cómo puedo depurarlo más?
Intenté acceder al servidor y ejecutar cada comando uno por uno, pero recibí el siguiente error al actualizar los paquetes apt:
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/Verifiqué el script en mi cuenta de sandbox.
Tuvo errores . La versión corregida es la siguiente:
#!/bin/bash -xe #Jenkins Installation: apt update apt install openjdk-8-jdk --yes wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - echo "deb https://pkg.jenkins.io/debian binary/" >> /etc/apt/sources.list apt update apt install -y jenkins systemctl status jenkins find /usr/lib/jvm/java-1.8* | head -n 3Los cambios fueron:
sudo– a -apt install Jenkins a apt install -y jenkins Puedo confirmar que ahora funciona con terraform en la instancia de Ubuntu 18.04.
Al iniciar la instancia, jenkins está disponible en http://<instance-ip>:8080 :
Te falta #!/bin/bash al principio del archivo. De la documentación :
Los scripts de shell de datos de usuario deben comenzar con
#!caracteres y la ruta al intérprete que desea leer el script (comúnmente /bin/bash). Para obtener una excelente introducción a las secuencias de comandos de shell, consulte el CÓMO HACER la programación de BASH en el Proyecto de documentación de Linux ( tldp.org ).
Preferiré el archivo de plantilla sobreel archivo donde tiene más control y también pasa la variable a los datos del usuario.
templatefilelee el archivo en la ruta dada y presenta su contenido como una plantilla utilizando un conjunto de variables de plantilla proporcionado dondefilelee el contenido de un archivo en la ruta dada y lo devuelve como una cadena.
templatefile(path, vars) data "template_file" "backend_cloud_init" { template = "${file("user_data_bootstrap.sh")}" vars = { JDK_VERSION = "openjdk-8-jdk" } }luego use template_file en una sección de datos de usuario
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 = "${data.template_file.backend_cloud_init.rendered}" key_name = "alpha-terraform" tags={ type="alpha" purpose="terraform" } }Además, agregue el hashbang en el archivo con depuración
#!/usr/bin/env bash set -x