Didacticiel : mettre à jour les dépendances des applications, appliquer des correctifs sur un nœud géré et effectuer une surveillance de l'état spécifique à l'application - AWS Systems Manager

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Didacticiel : mettre à jour les dépendances des applications, appliquer des correctifs sur un nœud géré et effectuer une surveillance de l'état spécifique à l'application

Dans bien des cas, un nœud géré doit être redémarré après l'installation de la dernière mise à jour logicielle. Toutefois, le redémarrage d'un nœud en production sans mesures de protection peut occasionner différents problèmes, comme le déclenchement d'alarmes, l'enregistrement de données métriques incorrectes et l'interruption des synchronisations de données.

Ce didacticiel illustre la façon d'éviter les problèmes de ce genre en utilisant le document AWS Systems Manager (document SSM) AWS-RunPatchBaselineWithHooks pour réaliser une opération complexe d'application de correctifs en plusieurs étapes qui effectue les opérations suivantes :

  1. Empêcher de nouvelles connexions à l'application

  2. Installer les mises à jour du système d'exploitation

  3. Mettre à jour les dépendances de package de l'application

  4. Redémarrer le système

  5. Effectuer une surveillance de l'état spécifique à l'application

Pour cet exemple, nous avons configuré notre infrastructure de la façon suivante :

  • Les machines virtuelles ciblées sont enregistrées en tant que nœuds gérés auprès de Systems Manager.

  • Iptables est utilisé comme pare-feu local.

  • L'application hébergée sur les nœuds gérés s'exécute sur le port 443.

  • L'application hébergée sur les nœuds gérés est une application nodeJS.

  • L'application hébergée sur les nœuds gérés est gérée par le gestionnaire de processus pm2.

  • L'application dispose déjà d'un point de terminaison de surveillance de l'état spécifié.

  • Le point de terminaison de surveillance de l'état de l'application n'exige aucune authentification de l'utilisateur final. Le point de terminaison autorise une surveillance de l'état qui répond aux exigences de l'organisation en matière d'établissement de la disponibilité. (Dans vos environnements, il pourrait suffire de vérifier simplement que l'application nodeJS est en cours d'exécution et peut écouter les demandes. Dans d'autres cas, vous pouvez également vouloir vérifier qu'une connexion à la couche de mise en cache ou à la couche de base de données est déjà établie.)

Les exemples de ce didacticiel sont fournis à titre indicatif uniquement. Ils ne sont pas destinés à être mis en œuvre en l'état dans les environnements de production. N'oubliez pas non plus que la fonction de hooks de cycle de vie de Patch Manager, une fonctionnalité de Systems Manager, avec le document AWS-RunPatchBaselineWithHooks peut prendre en charge de nombreux autres scénarios. Voici quelques exemples.

  • Arrêtez l'agent de génération de rapport de métriques avant d'appliquer les correctifs, et relancez-le après le redémarrage du nœud géré.

  • Détachez le nœud géré du cluster CRM ou PCS avant d'appliquer les correctifs, et attachez-le de nouveau après le redémarrage du nœud.

  • Mettez à jour les logiciels tiers (comme les applications Adobe, Java, Tomcat, etc.) sur les machines Windows Server après l'application des mises à jour du système d'exploitation, mais avant le redémarrage du nœud géré.

Pour mettre à jour les dépendances des applications, appliquer des correctifs sur un nœud géré et effectuer une surveillance de l'état spécifique à l'application
  1. Créez un document SSM avec le contenu suivant pour votre script de préinstallation et nommez-le NodeJSAppPrePatch. Remplacez your_application par le nom de votre application.

    Ce script bloque immédiatement les nouvelles demandes entrantes et fournit aux demandes déjà actives un délai de cinq secondes avant de commencer l'opération d'application de correctifs. Pour l'option sleep, spécifiez un nombre de secondes supérieur à ce qu'il faut habituellement aux requêtes entrantes pour s'effectuer.

    # exit on error set -e # set up rule to block incoming traffic iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1 # wait for current connections to end. Set timeout appropriate to your application's latency sleep 5 # Stop your application pm2 stop your_application

    Pour de plus amples informations sur la création de documents SSM, consultez Création du contenu du document SSM.

  2. Créez un autre document SSM avec le contenu suivant pour votre script postinstallation, pour mettre à jour vos dépendances d'application, et nommez-le NodeJSAppPostPatch. Remplacez /your/application/path par le chemin d'accès à votre application.

    cd /your/application/path npm update # you can use npm-check-updates if you want to upgrade major versions
  3. Créez un autre document SSM avec le contenu suivant pour votre script onExit, pour rétablir votre application et effectuer une surveillance de l'état. Nommez ce document SSM NodeJSAppOnExitPatch. Remplacez your_application par le nom de votre application.

    # exit on error set -e # restart nodeJs application pm2 start your_application # sleep while your application starts and to allow for a crash sleep 10 # check with pm2 to see if your application is running pm2 pid your_application # re-enable incoming connections iptables -D INPUT -j DROP -p tcp --syn --destination-port # perform health check /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1
  4. Créez une associationState Manager, une capacité de AWS Systems Manager, pour lancer l'opération en effectuant les étapes suivantes :

    1. Ouvrez la AWS Systems Manager console à l'adresse https://console.aws.amazon.com/systems-manager/.

    2. Dans le panneau de navigation, sélectionnez State Manager, puis Créer une association.

    3. Pour Nom, fournissez un nom permettant d'identifier le but de l'association.

    4. Dans la liste Document, sélectionnez AWS-RunPatchBaselineWithHooks.

    5. Pour Operation (Opération), sélectionnez Install (Installer).

    6. (Facultatif) Pour ID d'instantané, fournissez un GUID que vous générez pour accélérer l'opération et garantir la cohérence. La valeur du GUID peut être aussi simple que 00000000-0000-0000-0000-111122223333.

    7. Pour Nom de document du hook de préinstallation, saisissez NodeJSAppPrePatch.

    8. Pour Nom de document du hook de postinstallation, saisissez NodeJSAppPostPatch.

    9. Pour On ExitHook Doc Name, entrezNodeJSAppOnExitPatch.

  5. Dans Targets (Cibles), identifiez vos nœuds gérés en spécifiant des balises, en choisissant manuellement les nœuds, en choisissant un groupe de ressources ou en choisissant tous les nœuds gérés.

  6. Pour Spécifier le calendrier, spécifiez la fréquence d'exécution de l'association. La fréquence d'application des correctifs sur les nœuds gérés est couramment définie sur une fois par semaine.

  7. Dans la section Rate control (Contrôle du débit), sélectionnez les options permettant de contrôler la façon dont l'association s'exécute sur plusieurs nœuds gérés. Assurez-vous que seule une partie des nœuds gérés est mise à jour à la fois. Autrement, la totalité ou la majeure partie de votre flotte pourrait être déconnectée en même temps. Pour de plus amples informations sur l'utilisation des contrôles de débit, consultez À propos des cibles et des contrôles du débit dans les associations State Manager.

  8. (Facultatif) Dans Output options (Options de sortie), pour enregistrer la sortie de la commande dans un fichier, sélectionnez Enable writing to an S3 bucket (Autoriser l'écriture dans un compartiment S3) Saisissez les noms de compartiment et de préfixe (dossier) dans les zones.

    Note

    Les autorisations S3 qui donnent la possibilité d'écrire les données dans un compartiment S3 sont celles du profil d'instance attribué au nœud géré, et non celles de l'utilisateur IAM qui effectue cette tâche. Pour plus d'informations, consultez Configurer les autorisations d'instance requises pour Systems Manager ou Créer un rôle de service IAM pour un environnement hybride. En outre, si le compartiment S3 spécifié se trouve dans un autre compartiment Compte AWS, vérifiez que le profil d'instance ou le rôle de service IAM associé au nœud géré dispose des autorisations nécessaires pour écrire dans ce compartiment.

  9. Sélectionnez Create Association (Créer une association).