User_data dijalankan hanya pada permulaan pertama. Karena gambar Anda adalah gambar khusus, saya kira itu sudah dimulai satu kali sehingga data_pengguna dinonaktifkan.
Untuk windows, dapat dilakukan dengan mencentang kotak di Ec2 Services Properties. Saat ini saya sedang mencari cara melakukannya secara otomatis di akhir pembuatan gambar kustom.
Untuk linux, saya kira mekanismenya sama, dan user_data perlu diaktifkan kembali pada gambar khusus Anda.
#cloud-boothook
membuatnya berfungsi karena mengubah skrip dari user_data
mekanisme ke cloud-boothook yang berjalan pada setiap permulaan.
EDIT :
Berikut adalah kode untuk mengaktifkan kembali mulai di windows menggunakan powershell:
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2HandleUserData"} |%{ $_.State = "Enabled" }
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2SetComputerName"} |%{ $_.State = "Enabled" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\BundleConfig.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Property") |?{ $_.Name -eq "AutoSysprep"} |%{ $_.Value = "Yes" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile
(Saya tahu pertanyaan fokus linux, tapi bisa membantu orang lain ...)
Saat saya menguji, ada beberapa data bootstrap di /var/lib/cloud
directory.Setelah saya membersihkan direktori itu, Data Pengguna skrip berfungsi normal.
rm -rf /var/lib/cloud/*
Saya juga menghadapi masalah yang sama di Ubuntu 16.04 hvm AMI. Saya telah menyampaikan masalah ini ke dukungan AWS tetapi tetap saja saya tidak dapat menemukan alasan/bug pasti yang memengaruhinya.
Tapi tetap saja saya punya sesuatu yang mungkin bisa membantu Anda.
Sebelum mengambil AMI, hapus direktori /var/lib/cloud (setiap kali). Kemudian saat membuat Gambar, setel ke no-reboot.
Jika hal-hal ini masih tidak berfungsi, Anda dapat mengujinya lebih lanjut dengan memaksa data pengguna berjalan secara manual. Juga tailf /var/log/cloud-init-output.log
untuk status cloud-init. Itu harus diakhiri dengan sesuatu seperti modules:final untuk membuat data pengguna Anda berjalan. Seharusnya tidak macet di modules:config.
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
Saya tidak tahu apakah perintah di atas akan berfungsi di CentOS atau tidak. Saya telah mengujinya di Ubuntu.
Dalam kasus saya, saya juga telah mencoba menghapus direktori /var/lib/cloud, tetapi tetap gagal mengeksekusi data pengguna dalam skenario kami. Tetapi saya telah menemukan solusi berbeda untuk itu. Apa yang telah kami lakukan adalah membuat skrip dengan perintah di atas dan membuat skrip tersebut berjalan saat sistem melakukan booting.
Saya telah menambahkan baris di bawah ini di /etc/rc.local untuk mewujudkannya.
sudo bash /home/ubuntu/force-user-data.sh || exit 1
Tapi inilah tangkapannya, itu akan mengeksekusi skrip pada setiap boot sehingga akan membuat data pengguna Anda berjalan di setiap boot, seperti #cloud-boothook. Jangan khawatir, Anda bisa men-tweaknya hanya dengan menghapus force-user-data.sh itu sendiri di bagian akhir. Jadi force-user-data.sh Anda akan terlihat seperti
#!/bin/bash
sudo rm -rf /var/lib/cloud/*
sudo cloud-init init
sudo cloud-init modules -m final
sudo rm -f /home/ubuntu/force-user-data.sh
exit 0
Saya akan menghargai jika seseorang dapat menjelaskan mengapa tidak dapat mengeksekusi data pengguna.