AWS - UserData не выполняется, например, созданный из пользовательского изображения
Я тестировал с помощью простого скрипта PowerShell mkdir C:\tempdir
Когда я указываю его как UserData, например, запущенный из образа Amazon, все работает нормально. Если я запускаю экземпляр с указанными UserData и создаю образ этого экземпляра, UserData не выполняется для экземпляров, созданных из моего пользовательского образа. Что интересно, "C:\Program Files\Amazon\Ec2ConfigService\Scripts\UserScript.ps1"
содержит UserData начального запуска (до создания образа), хотя он должен содержать данные, указанные при последнем запуске. Что еще интереснее, даже UserScript.ps1 присутствует, он не выполняется (он должен создавать текстовый файл, но текстовый файл отсутствует). Вот UserData от второго запуска
<powershell>
mkdir C:\tempdir
</powershell>
1 ответ
Сценарии пользовательских данных запускаются только один раз, когда экземпляр запускается (создается не запускается). Они тогда отключены на экземпляре. Поэтому, когда вы берете AMI из этого экземпляра и запускаете новый, пользовательские данные уже отключены.
Включить UserData
Чтобы он снова запускался при запуске нового из созданного вами AMI, необходимо снова включить поддержку пользовательских данных в утилите настроек EC2ConfigService, установив флажок UserData (перед захватом AMI).
Постоянное включение UserData
Теперь после этого, если вы перезагрузите экземпляр еще раз, UserData запустится и снова отключится. Чтобы отключить эту функцию, вам нужно будет добавить <persist>true</persist>
к UserData экземпляра, который будет держать флажок в том же состоянии (если вы его включите).
Больше информации:
- http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html
- http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
- Скрипты пользовательских данных не работают на моем пользовательском AMI, но работают в стандартном Amazon Linux
- Пользовательский AMI Amazon EC2 не запускается при загрузке (пользовательские данные)
У меня такая же проблема. Вот что это решило
- Запустите экземпляр из вашего изображения, если вы еще этого не сделали
- RDP в него
- Откройте powershell и запустите это
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule
- Если у вас был собственный пароль для экземпляра, он будет сброшен на предыдущем шаге. Если вы хотите его вернуть, откройте powershell и запустите следующее (при условии, что ваше имя пользователя - администратор
net user Administrator "your_new_password"
(если у вас не было собственного пароля, а вы просто использовали пароль, сгенерированный.pem
файл, то вы можете проигнорировать этот шаг) - Теперь войдите в консоль AWS (т.е. в браузер) и создайте AMI из экземпляра.
- Убедитесь, что ваши пользовательские данные имеют следующую форму (важна часть persist/true).
<powershell>
# Some powershell code here
</powershell>
<persist>true</persist>
Вот и все. Теперь ваш сценарий PowerShell для пользовательских данных будет запущен при следующем запуске вашего экземпляра.