Wie wird das EC2-Benutzerdatenskript beim Start erneut ausgeführt?

19

Nachdem cloud-init beim ersten Start einer EC2-Instanz ein Benutzerdatenskript ausgeführt hat , wird vermutlich eine Statusdatei geschrieben, damit cloud-init das Skript bei nachfolgenden Neustarts nicht erneut ausführt. Es gibt Fälle, in denen ich diese Statusdatei löschen möchte, damit das Benutzerdatenskript erneut ausgeführt wird. Wo ist es?

Mike
quelle

Antworten:

24

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

Bestätigt arbeiten an:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Der Vollständigkeit halber cloud-initkönnen Sie nur das aktuelle Semaphor löschen , wenn Sie die Tatsache / die Möglichkeit, dass dieses AMI [ein übergeordnetes AMI, das ...] lief , im Auge behalten möchten.

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

Mike
quelle
2
Das hast du schnell herausgefunden.
c24w
9
@ c24w Diese Zeitstempel sind irreführend. Ich habe ein paar Stunden lang recherchiert und getestet. Nachdem ich es herausgefunden hatte, stellte ich diese Frage, um die nächste Person bei der Suche nach einer endgültigen Antwort zu unterstützen.
Mike
1
Ich bin seitdem auf dieses Problem gestoßen und habe nicht bemerkt, dass es dazu ermutigt wurde, Fragen und Antworten nach Art von Wiki zu veröffentlichen. Vielen Dank, dass Sie dies dokumentieren!
c24w
1
Ich bin froh, dass dies bei Serverfehler gefördert wurde. Ich habe es schon oft auf SO gesehen
frank
1
@ flag5 Das curlzum Abrufen der aktuellen Instanz-ID an den Metadatendienst ist unnötig, da /var/lib/cloud/instanceunter bereits ein Symlink zur aktuellen Instanz steht /var/lib/cloud/instances. :-)
Mike
2

Sie können Ihr Skript in /etc/rc.local ablegen, wodurch das Skript bei jedem Neustart ausgeführt wird.

Pratik Singhal
quelle
/etc/rc.localhat nichts mit EC2 Benutzerdaten zu tun.
Mike
@MikeConigliaro Ich wollte Benutzerdaten verwenden, um bei jedem Start etwas zum Laufen zu bringen, also habe ich das Benutzerdatenskript veranlasst, es an /etc/rc.local anzuhängen.
user253751
0

Sie können Ihre Benutzerdaten auch so konfigurieren, dass sie bei jedem Start erneut ausgeführt werden, anstatt die Statusdatei zu entfernen. Sie müssen cloud_final_modulesin Ihrem Benutzerdatenskript verwenden, um das Benutzerdatenskript erneut auszuführen, und dafür müssen Sie uderdata anpassen, um mehrere Dateien in Benutzerdaten zu haben. Beispiel für eine Userdaten-Datei:

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
--//

Dadurch wird das Benutzerdatenskript beim letzten Schritt jedes Startvorgangs ausgeführt. Hier muss nur eine einzelne Zeile bin/echo "Hello World" >> /tmp/userdata-test.txtausgeführt werden. Ersetzen Sie diese durch Ihr Shell-Skript, das jedes Mal ausgeführt werden muss, wenn eine Maschine gestartet wird.

Hardeep Singh
quelle