Добавить пользовательский обработчик деталей CloudInit в AMI
Можно ли добавить собственный обработчик детали CloudInit непосредственно в AMI, чтобы он был доступен для всех новых экземпляров без необходимости каждый раз добавлять его в пользовательские данные?
У меня есть несколько пользовательских типов MIME, которые мы используем для определения данных конфигурации для наших экземпляров облака EC2 и сценариев #part-handler python, необходимых для их обработки. Я хотел бы упростить процесс создания экземпляра, исключив необходимость включать эти обработчики деталей в пользовательские данные каждый раз, когда я создаю новый экземпляр. Есть ли какой-то хук в скриптах CloudInit, где я мог бы добавить свои обработчики деталей непосредственно в AMI, чтобы единственной вещью, которую мне нужно было передать через пользовательские данные, были сами файлы конфигурации?
2 ответа
Похоже, механизма плагинов не существует, но вы могли бы сделать это, чтобы разместить конфигурацию на HTTP-сервере и просто включить ее при запуске экземпляра, а не повторять его:
начинается с "#include" или "Content-Type: text/x-include-url"
Этот контент является "включаемым" файлом. Файл содержит список URL-адресов, по одному на строку. Каждый из URL будет прочитан, и их содержание будет проходить по тому же набору правил. Т.е. содержимое, прочитанное с URL-адреса, может быть распакованным, mime-multi-part или обычным текстом.
Просто потратил несколько часов на это и обнаружил, что вы действительно можете сохранить обработчик части в / var / lib / cloud / handlers, но есть несколько предостережений.
Я не уверен, должен ли быть определенный шаблон для имени файла, но в моем случае я сохранил его как /var/lib/cloud/handlers/part-handler-000.py и создал из него AMI.
При запуске нового экземпляра, основанного на этом AMI, кажется, что данные пользователя для этого MIME должны быть предоставлены внутри MIME из нескольких частей (Да, даже если эта Multipart просто содержит вашу собственную часть).
Я попытался отправить следующее в первой строке
Content-Type: text/XXXXX;
или же
#XXXXX
но никто не работал