我使用简单的 PowerShell 脚本进行了测试mkdir C:\tempdir
当我将其指定为 UserData(例如从 Amazon 镜像启动)时,一切正常。如果我使用指定的 UserData 启动实例并制作该实例的镜像,则不会为从我的自定义镜像创建的实例执行 UserData。
有趣的是,“C:\Program Files\Amazon\Ec2ConfigService\Scripts\UserScript.ps1”
包含初始启动的 UserData(在创建镜像之前),尽管它应该包含上次启动期间指定的数据。
更有趣的是,即使 UserScript.ps1 存在,它也不会执行(它应该创建文本文件,但文本文件不存在)。
这是第二次启动时的用户数据
<powershell>
mkdir C:\tempdir
</powershell>
最佳答案
用户数据脚本仅在实例启动时运行一次(创建而不是启动)。然后它们在实例上被禁用。因此,当您从该实例获取 AMI 并启动新的 AMI 时,用户数据已被禁用。
启用用户数据
要允许它在您从创建的 AMI 启动新的 AMI 时再次运行,您必须在 EC2ConfigService 设置实用程序中选中 UserData 框(在获取 AMI 之前)重新打开用户数据支持。
持续启用用户数据
现在,如果您再次重新启动实例,则 UserData 将运行并再次禁用自身。要禁用此功能,您需要添加 <persist>true</persist>
到实例的 UserData ,这将使复选框保持相同状态(如果您打开它,则处于打开状态)。
更多信息:
关于amazon-ec2 - AWS - 对于从自定义镜像创建的实例,不会执行 UserData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37708636/