是否可以将自定义的CloudInit部件处理程序直接添加到AMI中,以便它可用于所有新实例,而无需每次都将其添加到用户数据?
我有几个定制的MIMEtypes,我们用它们来定义EC2云实例的configuration数据以及处理它们所需的#部分处理器python脚本。 我想简化实例创build过程,不需要在每次创build新实例时将这些部件处理程序包含在用户数据中。 CloudInit脚本中是否存在一些钩子,我可以将我的部件处理程序直接添加到AMI中,这样我需要通过用户数据传递的唯一东西就是configuration文件本身?
似乎没有插件机制,但是您可以做的是在HTTP服务器上托pipeconfiguration,并在启动实例时将其包括在内而不是重复该实例:
以“#include”或“Content-Type:text / x-include-url”开始
这个内容是一个“包含”文件。 该文件包含一个url列表,每行一个。 每个URL都将被读取,并且其内容将通过这组相同的规则传递。 也就是说,从URL中读取的内容可以是gzip,mime-multi-part或纯文本
刚刚在这个问题上花了几个小时,发现你实际上可以保存/ var / lib / cloud / handlers下的部分处理程序,但是有一些注意事项。
我不确定是否应该有一个特定的模式文件名,但在我的情况下,我把它保存为/var/lib/cloud/handlers/part-handler-000.py并创build一个AMI。
当启动一个基于AMI的新实例时,似乎该MIME的用户数据必须在多部分MIME中提供(是的,即使这个多部分只包含你自己的部分)。
我确实尝试发送以下作为第一行
Content-Type: text/XXXXX;
要么
#XXXXX
但没有工作