AWS - 不会为从自定义映像创建的实例执行UserData

时间:2016-06-08 17:00:05

标签: amazon-ec2 ec2-ami

我使用简单的PowerShell脚本mkdir C:\tempdir进行了测试 当我将其指定为UserData,例如从亚马逊图像启动时,一切正常。如果我使用指定的UserData启动实例并生成该实例的图像,则不会对从我的自定义图像创建的实例执行UserData。 有趣的是,"C:\Program Files\Amazon\Ec2ConfigService\Scripts\UserScript.ps1"包含初始启动的UserData(在创建映像之前),但它应包含上次启动时指定的数据。 更有趣的是,即使存在UserScript.ps1,也不会执行它(它应该创建文本文件但不存在文本文件)。 这是第二次发布的UserData

<powershell>
  mkdir C:\tempdir
</powershell>

2 个答案:

答案 0 :(得分:1)

用户数据脚本仅在启动实例(创建未启动)时运行一次。然后在实例上禁用它们。因此,当您从该实例获取AMI并启动新实例时,用户数据已被禁用。

启用UserData

要从您创建的AMI启动新版本时允许它再次运行,您必须通过选中UserData框(在获取AMI之前)在EC2ConfigService设置实用程序中重新启用用户数据支持。

坚持启用UserData

此后,如果再次重新启动实例,则UserData将运行并再次禁用自身。要禁用此功能,您需要将<persist>true</persist>添加到实例的UserData,这将使复选框保持相同状态(如果您打开它,则打开)。

更多信息:

答案 1 :(得分:0)

我有同样的问题。这是解决问题的方法

  1. 如果尚未从图像中启动实例,请
  2. 将RDP放入其中
  3. 打开powershell,然后运行此C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule
  4. 如果您具有实例的自定义密码,那么它将在上一步中重置。如果需要它,请打开powershell并运行以下命令(假设您的用户名是Administrator net user Administrator "your_new_password"(如果您没有自定义密码,并且仅使用.pem文件生成的密码,则您可以忽略此步骤)
  5. 现在进入AWS控制台(即在浏览器中)并从实例创建AMI
  6. 确保您的用户数据采用以下格式(持久/正确部分至关重要)。
<powershell>
# Some powershell code here
</powershell>
<persist>true</persist>

就是这样。您的userdata powershell脚本现在将在下次启动实例时运行。