En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je envoyer les données utilisateur aux journaux de la console sur une instance EC2 exécutant RHEL 7 ou RHEL 8 ?

Lecture de 4 minute(s)
0

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 :

  1. Ouvrez la console Amazon EC2.

  2. Connectez-vous à une instance existante ou lancez une nouvelle instance. Puis, utilisez SSH pour vous connecter à l'instance.

  3. 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
  4. 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
  5. Arrêtez l’instance.

  6. (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.

  7. 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
  8. 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

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois