virginia script run log instalar example ec2 east data bootstrap aws linux amazon-ec2 cloud-init

linux - script - La secuencia de comandos user-data(cloud-init) no se ejecuta en EC2



us east virginia aws (3)

En realidad, cloud-init permite un único script de shell como entrada (aunque es posible que desee utilizar un archivo MIME para configuraciones más complejas).

El problema con el script OP es que la primera línea es incorrecta. Deberías usar algo como esto:

#!/bin/sh

La razón de esto es que, mientras que cloud-init usa #! para reconocer un script de usuario, el sistema operativo necesita una línea de shebang completa para ejecutar el script.

Entonces, lo que está sucediendo en el caso del OP es que cloud-init se comporta correctamente (es decir, descarga e intenta ejecutar el script), pero el sistema operativo no puede ejecutarlo realmente.

Ver: Shebang (Unix) en Wikipedia

mi script de datos de usuario

#! set -e -x echo `whoami` su root yum update -y touch ~/PLEASE_WORK.txt

que se alimenta desde el comando:

ec2-run-instances ami-05355a6c -n 1 -g mongo-group -k mykey -f myscript.sh -t t1.micro -z us-east-1a

pero cuando miro el archivo /var/log/cloud-init.log , el tail -n 5 es:

[CLOUDINIT] 2013-07-22 16:02:29,566 - cloud-init-cfg[INFO]: cloud-init-cfg [''runcmd''] [CLOUDINIT] 2013-07-22 16:02:29,583 - __init__.py[DEBUG]: restored from cache type DataSourceEc2 [CLOUDINIT] 2013-07-22 16:02:29,686 - cloud-init-cfg[DEBUG]: handling runcmd with freq=None and args=[] [CLOUDINIT] 2013-07-22 16:02:33,691 - cloud-init-run-module[INFO]: cloud-init-run-module [''once-per-instance'', ''user-scripts'', ''execute'', ''run-parts'', ''/var/lib/cloud/data/scripts''] [CLOUDINIT] 2013-07-22 16:02:33,699 - __init__.py[DEBUG]: restored from cache type DataSourceEc2

También he verificado que curl http://169.254.169.254/latest/user-data devuelve mi archivo como estaba previsto.

y no ocurre ningún otro error o el resultado de mi secuencia de comandos. ¿Cómo puedo obtener el script de datos de usuario para ejecutar en el arranque correctamente?


Ahora tengo un par de años, pero para otros me beneficia tuve el mismo problema, y ​​resultó que cloud-init se ejecutaba dos veces, desde /etc/rc3.d . La eliminación de estos archivos dentro de la carpeta permitió que userdata se ejecutara correctamente:

lrwxrwxrwx 1 root root 22 Jun 5 02:49 S-1cloud-config -> ../init.d/cloud-config lrwxrwxrwx 1 root root 20 Jun 5 02:49 S-1cloud-init -> ../init.d/cloud-init lrwxrwxrwx 1 root root 26 Jun 5 02:49 S-1cloud-init-local -> ../init.d/cloud-init-local


Cloud-init no acepta scripts sencillos de bash, solo así. Es una bestia que se come el archivo YAML que define su instancia (paquetes, claves ssh y otras cosas).

Usando MIME también puedes enviar scripts de shell arbitrarios, pero tienes que codificarlos MIME.

$ cat my-boothook.txt #!/bin/sh echo "Hello World!" echo "This will run as soon as possible in the boot sequence" $ cat my-user-script.txt #!/usr/bin/perl print "This is a user script (rc.local)/n" $ cat my-include.txt # these urls will be read pulled in if they were part of user-data # comments are allowed. The format is one url per line http://www.ubuntu.com/robots.txt http://www.w3schools.com/html/lastpage.htm $ cat my-upstart-job.txt description "a test upstart job" start on stopped rc RUNLEVEL=[2345] console output task script echo "====BEGIN=======" echo "HELLO From an Upstart Job" echo "=====END========" end script $ cat my-cloudconfig.txt #cloud-config ssh_import_id: [smoser] apt_sources: - source: "ppa:smoser/ppa" $ ls my-boothook.txt my-include.txt my-user-script.txt my-cloudconfig.txt my-upstart-job.txt $ write-mime-multipart --output=combined-userdata.txt / my-boothook.txt:text/cloud-boothook / my-include.txt:text/x-include-url / my-upstart-job.txt:text/upstart-job / my-user-script.txt:text/x-shellscript / my-cloudconfig.txt $ ls -l combined-userdata.txt -rw-r--r-- 1 smoser smoser 1782 2010-07-01 16:08 combined-userdata.txt

El archivo combinado userdata.txt es el archivo que desea pegar allí.

Más información aquí:

https://help.ubuntu.com/community/CloudInit

También tenga en cuenta que esto depende en gran medida de la imagen que está utilizando. Pero dices que es realmente una imagen basada en la nube, así que esto aplica. Hay otros iniciadores en la nube que no se denominan cloud-init, entonces podría ser diferente.