EC2 用户数据未使用自定义启动云初始化脚本运行

EC2 用户数据未使用自定义启动云初始化脚本运行

我正在尝试使用 的每次启动脚本工具在 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 可帮助您实现这一点

相关内容