我使用简单的PowerShell脚本mkdir C:\tempdir
进行了测试
当我将其指定为UserData,例如从亚马逊图像启动时,一切正常。如果我使用指定的UserData启动实例并生成该实例的图像,则不会对从我的自定义图像创建的实例执行UserData。
有趣的是,"C:\Program Files\Amazon\Ec2ConfigService\Scripts\UserScript.ps1"
包含初始启动的UserData(在创建映像之前),但它应包含上次启动时指定的数据。
更有趣的是,即使存在UserScript.ps1,也不会执行它(它应该创建文本文件但不存在文本文件)。
这是第二次发布的UserData
<powershell>
mkdir C:\tempdir
</powershell>
答案 0 :(得分:1)
用户数据脚本仅在启动实例(创建未启动)时运行一次。然后在实例上禁用它们。因此,当您从该实例获取AMI并启动新实例时,用户数据已被禁用。
启用UserData
要从您创建的AMI启动新版本时允许它再次运行,您必须通过选中UserData框(在获取AMI之前)在EC2ConfigService设置实用程序中重新启用用户数据支持。
坚持启用UserData
此后,如果再次重新启动实例,则UserData将运行并再次禁用自身。要禁用此功能,您需要将<persist>true</persist>
添加到实例的UserData,这将使复选框保持相同状态(如果您打开它,则打开)。
更多信息:
答案 1 :(得分:0)
我有同样的问题。这是解决问题的方法
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule
net user Administrator "your_new_password"
(如果您没有自定义密码,并且仅使用.pem
文件生成的密码,则您可以忽略此步骤)<powershell>
# Some powershell code here
</powershell>
<persist>true</persist>
就是这样。您的userdata powershell脚本现在将在下次启动实例时运行。