Как заставить пользовательские данные EC2 работать на недавно построенном AMI, сделанном с помощью Packer
Я могу создавать изображения AMI просто отлично. Но они перестали работать с пользовательскими данными EC2:
Есть пользовательские данные:
$ cat /tmp/user_data.sh
#!/bin/bash
touch /tmp/i_have_user_data /root/i_have_user_data
И я могу запустить простой образ Ubuntu:
aws ec2 run-instances --instance-type m3.medium --image-id ami-eed10e86 --user-data file:///tmp/user_data.sh
И это работает:
ubuntu@ip-10-165-90-180:~$ ls /tmp/i_have_user_data
/ TMP /i_have_user_data
Но если я построю AMI на основе этого с помощью Packer:
"builders": [
{
"type": "amazon-ebs",
"region": "us-east-1",
"source_ami": "ami-eed10e86",
"instance_type": "m3.large",
"ssh_username": "ubuntu",
"tags": {
"OS_Version": "Ubuntu",
"Release": "LTS"
}
}
],
... и выполните то же самое, что и раньше, в / tmp ничего нет. Тем не менее, ясно, что есть пользовательские данные, если вы запустите ec2metadata:
ramdisk-id: unavailable
reserveration-id: unavailable
security-groups: default
user-data: #!/bin/bash
touch /tmp/i_have_user_data /root/i_have_user_data
Я почти уверен, что это проблема состояния, и удаление файла состояния заставит все это работать волшебным образом. Или есть хитрость, чтобы заставить работать сценарий запуска из облака, который может быть неисправен. Во всяком случае, я еще не нашел это.
Обновление:
Я сделал это, превратив сценарий пользовательских данных в загрузочный крюк:
#cloud-boothook
#!/bin/sh
echo "RUNNING USER DATA SCRIPT"
Все еще ищу объяснение, почему они перестали работать. Документы Cloud Init улучшаются, но путь еще впереди.
1 ответ
Упаковщик создает ваше изображение, а затем делает снимок перед созданием AMI. Это ваша первая загрузка. На этом этапе вам нужно будет загрузить экземпляр, который, согласно Ubuntu, очистит каталог / tmp.
Я попытался бы поместить файл в другое место и посмотреть, сохраняется ли он.
# Cloud-boothook запускается каждый раз, учитывая документы, в которых указано, что вы ответственны за его отключение.