Назад | Перейти на главную страницу

Пользовательские данные 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 директиве в верхней части скрипта userdata все работает как положено:

#cloud-boothook
#!/bin/bash

echo "CLUSTER=foo" >> /etc/default/foo

Я понимаю, что есть дюжина других способов добиться этого, но я действительно хочу понять, почему я наблюдаю такое поведение. Итак, что мне здесь не хватает?

Пользовательские данные Amazon выполняются только при первом запуске машины. Если вы создаете кастомный ami машина, которая использовалась для создания этого образа, уже была запущена один раз.

Вы можете попытаться настроить свой MIME так, чтобы он запускался каждый раз при загрузке. Google помогает в этом