Come eseguire nuovamente lo script dei dati utente EC2 all'avvio?


19

Dopo che cloud-init esegue uno script di dati utente al primo avvio di un'istanza EC2, presumibilmente viene scritto un file di stato in modo che cloud-init non esegua nuovamente lo script ai successivi riavvii. Ci sono casi in cui vorrei eliminare questo file di stato in modo che lo script dei dati utente venga eseguito nuovamente. Dov'è?

Risposte:


24

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Confermato lavorando su:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Per completezza, se hai una situazione in cui tieni a cuore il fatto / la possibilità che questo AMI [avesse un AMI padre che ...] e tutti eseguissero cloud-initi dati dell'utente, puoi eliminare solo il semaforo corrente.

rm /var/lib/cloud/instance/sem/config_scripts_user


2
L'hai capito rapidamente.
24

9
@ c24w Quei timestamp sono fuorvianti. In realtà mi ci sono volute alcune ore di ricerca e test, quindi una volta capito, ho creato questa domanda per aiutare la prossima persona a cercare una risposta definitiva.
Mike,

1
Mi sono imbattuto in questo da allora e non mi ero reso conto che fosse incoraggiato a pubblicare domande e risposte di tipo wiki. Ti ringrazio per averlo documentato!
24

1
Sono contento che questo sia stato incoraggiato su serverfault. L'ho visto ridimensionare molte volte su SO
francamente l'

1
@ flag5 Che curlal servizio metadati per ottenere l'ID dell'istanza corrente non è necessario perché /var/lib/cloud/instanceè già un collegamento simbolico all'istanza corrente in /var/lib/cloud/instances. :-)
Mike

2

Puoi mettere il tuo script in /etc/rc.local, che eseguirà lo script ad ogni riavvio.


/etc/rc.localnon ha nulla a che fare con i dati dell'utente EC2.
Mike,

@MikeConigliaro Volevo usare i dati utente per far funzionare qualcosa ad ogni avvio, così ho fatto lo script dei dati utente aggiungerlo a /etc/rc.local.
user253751

0

È inoltre possibile configurare i dati utente per eseguirli nuovamente ad ogni avvio, anziché rimuovere il file di stato. Devi usare il cloud_final_modulestuo script userdata per rieseguire lo script userdata e per questo devi personalizzare uderdata per avere file mipleple in userdata. Esempio di file userdata sarebbe simile:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Questo renderà l'esecuzione dello script userdata nell'ultimo passaggio di ogni processo di avvio. Qui è bin/echo "Hello World" >> /tmp/userdata-test.txtpossibile eseguire solo una singola riga , sostituirla con lo script della shell che deve essere eseguito ogni volta che si avvia una macchina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.