我正在尝试使用 的每次启动脚本工具在 Ubuntu 14 LTS AMI ( ami-3bdd502c
)上启动时启动一个进程cloud-init
,并使用 EC2 用户数据配置该进程。该进程具有合理的默认值,但我试图通过使用 EC2 用户数据将一些位写入 来允许覆盖这些默认值/etc/default/foo
。
但是,当我将自定义启动脚本放到磁盘上 ( /var/lib/cloud/scripts/per-boot/run-process.sh
) 时,它会按预期执行,但 EC2 用户数据步骤不会运行。如果我启动此 AMI 的一个版本时没有启动脚本,EC2 用户数据步骤会按预期运行。似乎启动脚本正在破坏 EC2 用户数据步骤。
我使用的 EC2 用户数据脚本如下所示:
#!/bin/bash
echo "CLUSTER=foo" >> /etc/default/foo
按照/etc/cloud/cloud.cfg
我的预期,这一步应该在以下步骤之前运行scripts-per-boot
:
cloud_final_modules:
- rightscale_userdata
- scripts-vendor
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
...
此外,手动运行运行cloud-final
步骤以及用户数据步骤单独工作正常
sudo cloud-init modules --mode=final
sudo cloud-init single -n rightscale_userdata
调查即将结束时,我注意到,当我#cloud-boothook
在用户数据脚本顶部添加指令时,一切都按预期工作:
#cloud-boothook
#!/bin/bash
echo "CLUSTER=foo" >> /etc/default/foo
我意识到还有十几种其他方法可以实现这一点,但我真的想了解为什么我会看到这种行为。那么,我在这里遗漏了什么?
答案1
Amazon 的用户数据仅在机器首次启动时执行。如果您创建自定义,则ami
用于创建此映像的机器已启动过一次。
您可能尝试设置 MIME,以便每次启动时都运行它。Google 可帮助您实现这一点