Как заставить скрипт данных пользователя EC2 снова запускаться при запуске?

19

После того, как cloud-init запустит сценарий пользовательских данных при первой загрузке экземпляра EC2, файл состояния предположительно записывается так, чтобы cloud-init больше не запускал сценарий при последующих перезагрузках. В некоторых случаях я хотел бы удалить этот файл состояния, чтобы скрипт пользовательских данных снова запустился. Где это?

Майк
источник

Ответы:

24

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

Подтвердили работу над:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Для полноты картины, если у вас есть ситуация, когда вы хотите отслеживать факт / вероятность того, что этот AMI [имел родительский AMI, который ...], и все они запускали cloud-initпользовательские данные, вы можете удалить только текущий семафор.

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

Майк
источник
2
Вы поняли это быстро.
c24w
9
@ c24w Эти временные метки вводят в заблуждение. На самом деле это заняло у меня несколько часов исследований и испытаний, поэтому, как только я понял это, я создал этот вопрос, чтобы помочь следующему человеку, ищущему окончательный ответ.
Майк
1
С тех пор я сталкивался с этим и не осознавал, что меня поощряют публиковать вопросы и ответы вики-типа. Благодарю вас за это!
c24w
1
Я рад, что это было поощрено на serverfault. Я видел это много раз на SO
откровенно
1
@ flag5 Службе curlметаданных для получения текущего идентификатора экземпляра нет необходимости, поскольку /var/lib/cloud/instanceона уже является символической ссылкой на текущий экземпляр в /var/lib/cloud/instances. :-)
Майк
2

Вы можете поместить свой скрипт в /etc/rc.local, который будет запускать скрипт при каждой перезагрузке.

Пратик Сингхал
источник
/etc/rc.localне имеет ничего общего с пользовательскими данными EC2.
Майк
@MikeConigliaro Я хотел использовать пользовательские данные для запуска чего-либо при каждой загрузке, поэтому я сделал скрипт пользовательских данных добавив его в /etc/rc.local.
user253751
0

Вы также можете настроить свои пользовательские данные для повторного запуска при каждой загрузке, вместо удаления файла состояния. Вы должны использовать cloud_final_modulesв своем сценарии userdata для повторного запуска сценария userdata, и для этого вам нужно настроить uderdata, чтобы иметь множество файлов в userdata. Пример файла userdata будет выглядеть так:

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

Это заставит скрипт userdata выполняться на последнем шаге каждого процесса загрузки. Здесь bin/echo "Hello World" >> /tmp/userdata-test.txtнужно выполнить только одну строку , замените ее своим сценарием оболочки, который должен выполняться каждый раз при загрузке машины.

Хардип Сингх
источник