这几天我搜索了很多关于“user-data script is not working”的主题,但是直到现在我还没有得到任何关于我的案例的想法,请帮我弄清楚发生了什么,非常感谢!
根据 AWS User-data 的 解释:
当您在 Amazon EC2 中启动实例时,您可以选择将用户数据传递给实例,这些数据可用于执行常见的自动配置任务,甚至在实例启动后运行脚本。
所以我尝试在实例启动时传递我自己的用户数据,这是我的用户数据:
\#!/bin/bash
echo 'test' > /home/ec2-user/user-script-output.txt
但是这个路径没有文件: /home/ec2-user/user-script-output.txt
我检查了 /var/lib/cloud/instance/user-data.txt
,该文件存在并且与我的用户数据脚本相同。
我还检查了登录 /var/log/cloud-init.log
,没有错误消息。
但是如果我使用 Amazon linux(2014.09.01) 启动一个新实例,用户数据脚本就可以工作,但我不确定我的 AMI(基于 Amazon linux)和 Amazon linux 之间有什么区别。
我看到的唯一不同的部分是如果我运行这个脚本:
sudo yum list installed | grep cloud-init
我的 AMI:
cloud-init.noarch 0.7.2-8.33.amzn1 @amzn-main
亚马逊Linux:
已安装 cloud-init.noarch 0.7.2-8.33.amzn1
我不确定这是不是这个原因?
如果您需要更多信息,我很乐意提供,请告诉我在我自己的 AMI 中发生了什么以及如何修复它?
非常感谢
更新
刚刚从这个 帖子 中找到答案,
如果我在用户数据文件的顶部添加#cloud-boothook,它就可以了!
#cloud-boothook
#!/bin/bash
echo 'test' > /home/ec2-user/user-script-output.txt
但仍然不确定为什么。
原文由 Kai 发布,翻译遵循 CC BY-SA 4.0 许可协议
User_data 仅在第一次启动时运行。由于您的图像是自定义图像,我想它已经启动过一次,因此 user_data 已停用。
对于 Windows,可以通过选中 Ec2 Services Properties 中的框来完成。我正在研究如何在自定义图像创建结束时以自动方式执行此操作。
对于linux,我想机制是一样的,需要在你的自定义镜像上重新激活user_data。
#cloud-boothook
使其工作,因为它将脚本从user_data
机制更改为在每次启动时运行的 云引导 程序。编辑 :
这是使用 powershell 在 Windows 上重新激活启动的代码:
(我知道问题集中在linux,但它可以帮助其他人……)