我正在使用 cloud-init 自动准备 AWS 映像 (AMI) 以在生产环境中使用 - 这样我可以在源代码控制系统中跟踪环境设置过程,但是当我需要时可以跳过那个冗长的过程新的生产服务器。
所以过程如下:
- 使用 cloud-init 文件启动新的基础映像(Ubuntu 14.04 cloud-image)
- 等待 cloud-init 完成,然后从正在运行的实例创建一个映像,然后终止它
- 为了启动一个新的生产服务器,我使用一个小型 cloud-init 从 AMI 启动并执行最终配置(设置正确的主机名、部署软件等)。
我遇到的问题是第一个 cloud-init 配置文件使用disk_setup
, 和mounts
模块来挂载 EBS 卷。完成后,实例已/etc/fstab
更新,一切正常。但是,在执行第 3 步之后,生成的实例已正确附加并安装了 EBS 卷(实际上是它的副本),但/etc/fstab
不包含该卷的安装。幸运的是,在第 3 步之后我没有重新启动,但我可能会破坏服务器。
知道发生了什么吗?我没有mounts
在步骤 3 的 cloud-init 配置中使用,但为什么它不保留fstab
图像中的设置?
我无法真正解释您遇到的行为,但 AWS 自己建议您不要使用 fstab 条目,而是使用 RC 初始化脚本。请参阅下面来自Cindy@AWS的报价。这个论坛帖子虽然很老,但并不能真正解决您遇到的同一问题,但也许这样做也可以解决您的问题。
来源:https ://forums.aws.amazon.com/message.jspa?messageID=304528#304549
问题在于第二个 cloud-init 配置(用于在 OP 的步骤 3 上启动生产实例)包含一个小
mounts
部分,用于挂载额外的实例特定卷。当 cloud-init 遇到一个mounts
部分时,它不会将任何找到的配置附加到当前 fstab,而是覆盖上游 cloud-init 创建的任何 cloud-init 设置。解决方案是要么包含所有先前生成的挂载配置,要么不包含任何新配置并在步骤 1 中完成所有卷配置。