Я пытаюсь запустить процесс при загрузке на 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 помогает в этом