Je souhaite résoudre les problèmes liés à l'amorçage de mon instance Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7, RHEL 8 ou RHEL 9. Je souhaite journaliser l'invocation des données utilisateur, puis l'envoyer dans les journaux de la console.
Brève description
Pour résoudre les problèmes liés à l’amorçage de votre instance EC2, modifiez votre script Bash des données utilisateur pour rediriger toutes les sorties. Redirigez la sortie vers /var/log/user-data.log et /dev/console. Lorsque le script s'exécute, vous pouvez consulter les journaux d'invocation des données utilisateur directement dans votre console.
Remarque : La résolution suivante ne concerne que RHEL 7, RHEL 8 et RHEL 9. Pour plus d'informations sur Amazon Linux, Amazon Linux 2 et Amazon Linux 2023, consultez la section Comment puis-je envoyer les données utilisateur en sortie vers les journaux de console d'une instance EC2 pour Amazon Linux 1, Amazon Linux 2 ou Amazon Linux 2023 ?
Résolution
Pour envoyer la sortie des données utilisateur aux journaux de console d'une instance EC2 qui exécute RHEL, procédez comme suit :
-
Ouvrez la console Amazon EC2.
-
Connectez-vous à une instance existante ou lancez une nouvelle instance. Puis, utilisez SSH pour vous connecter à l'instance.
-
Modifiez la ligne GRUB_CMDLINE_LINUX dans /etc/default/grub et modifiez « console=ttyS0,115200n8 console=tty0 » en « console=tty1 console=ttyS0 » :
RHEL 7
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
RHEL 8
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
RHEL 9
# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved
-
Pour recréer le fichier /boot/grub2/grub.cfg, exécutez le script suivant :
RHEL 7
# grub2-mkconfig -o /boot/grub2/grub.cfgGenerating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1062.1.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.1.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-026767dbe06a4910a5ce3bd0def903c0
Found initrd image: /boot/initramfs-0-rescue-026767dbe06a4910a5ce3bd0def903c0.img
done
RHEL 8
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
RHEL 9
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
-
Arrêtez l’instance.
-
(Facultatif) Pour exécuter les données utilisateur à chaque redémarrage de l'instance, configurez votre script de données utilisateur et vos directives cloud-init à l'aide d'un fichier MIME multi-parties.
Remarque : Par défaut, les scripts de données utilisateur et les directives cloud-init s'exécutent uniquement lors du premier cycle de démarrage du lancement d'une instance EC2.
-
Pour rediriger la sortie des données utilisateur vers la console, exécutez la commande suivante pour modifier le champ de données utilisateur :
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
cat /etc/redhat-release
echo "Hello from user-data!"
--//--
Remarque : Le script permettant de rediriger la sortie des données utilisateur commence par la ligne #!/bin/bash -xe. Le script précédent est constitué de données de configuration cloud-init dans lesquelles le script Shell est exécuté à chaque démarrage de l'instance. Dans la commande précédente, la ligne suivante redirige la sortie des données utilisateur :
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
-
Démarrez l'instance, puis consultez la sortie du journal de la console. Vous recevez une sortie de console similaire à celle de l'exemple suivant :
RHEL 7
<13>May 21 03:11:44 user-data: + cat /etc/redhat-release
<13>May 21 03:11:44 user-data: Red Hat Enterprise Linux Server release 7.9 (Maipo)
<13>May 21 03:11:44 user-data: + echo 'Hello from user-data!'
<13>May 21 03:11:44 user-data: Hello from user-data!
RHEL 8
<13>May 21 03:11:21 user-data: + cat /etc/redhat-release
<13>May 21 03:11:21 user-data: Red Hat Enterprise Linux release 8.6 (Ootpa)
<13>May 21 03:11:21 user-data: + echo 'Hello from user-data!'
<13>May 21 03:11:21 user-data: Hello from user-data!
RHEL 9
<13>May 21 03:12:34 user-data: + cat /etc/redhat-release
<13>May 21 03:12:34 user-data: Red Hat Enterprise Linux release 9.3 (Plow)
<13>May 21 03:12:34 user-data: + echo 'Hello from user-data!'
<13>May 21 03:12:34 user-data: Hello from user-data!
Important : Vos données utilisateur sont visibles dans la console. N'incluez pas d'informations confidentielles dans les données que vous envoyez.
Informations connexes
Exécuter des commandes au moment du lancement sur votre instance Linux