Création d’associations exécutant des playbooks Ansible - AWS Systems Manager

Création d’associations exécutant des playbooks Ansible

Vous pouvez créer des associations State Manager qui exécutent des playbooks Ansible à l’aide du document SSM AWS-ApplyAnsiblePlaybooks. State Manager est une fonctionnalité AWS Systems Manager. Ce document offre les avantages suivants pour l'exécution de manuels stratégiques :

  • Prise en charge de l'exécution de manuels stratégiques complexes

  • Prise en charge du téléchargement de playbooks à partir de GitHub et d’Amazon Simple Storage Service (Amazon S3)

  • Prise en charge de la structure de manuel stratégique compressé

  • Journalisation améliorée

  • Possibilité de spécifier le manuel stratégique à exécuter lorsque les manuels stratégiques sont regroupés

Note

Systems Manager inclut deux documents SSM qui vous permettent de créer des associations State Manager exécutant des playbooks Ansible : AWS-RunAnsiblePlaybook et AWS-ApplyAnsiblePlaybooks. Le document AWS-RunAnsiblePlaybook est obsolète. Il reste disponible dans Systems Manager à des fins de conservation. Nous vous recommandons d'utiliser le document AWS-ApplyAnsiblePlaybooks en raison des améliorations décrites ici.

Les associations exécutant des playbooks Ansible ne sont pas prises en charge sur macOS.

Prise en charge de l'exécution de manuels stratégiques complexes

Le document AWS-ApplyAnsiblePlaybooks prend en charge les manuels stratégiques complexes et groupés, car il copie toute la structure de fichiers dans un répertoire local avant d'exécuter le manuel stratégique principal spécifié. Vous pouvez fournir des manuels stratégiques source dans des fichiers Zip ou dans une structure de répertoires. Le fichier .zip ou le répertoire peut être stocké dans GitHub ou Amazon S3.

Prise en charge du téléchargement de manuels stratégiques à partir de GitHub

Le document AWS-ApplyAnsiblePlaybooks utilise le plug-in aws:downloadContent pour télécharger les fichiers du manuel stratégique. Les fichiers peuvent être stockés dans GitHub dans un fichier unique ou sous la forme d’un ensemble combiné de fichiers de playbook. Pour télécharger du contenu à partir de GitHub, spécifiez les informations relatives à votre référentiel GitHub au format JSON. Voici un exemple.

{ "owner":"TestUser", "repository":"GitHubTest", "path":"scripts/python/test-script", "getOptions":"branch:master", "tokenInfo":"{{ssm-secure:secure-string-token}}" }

Prise en charge du téléchargement de playbooks à partir d'Amazon S3

Vous pouvez également stocker et télécharger les playbooks Ansible dans Amazon S3 sous la forme d’un fichier .zip unique ou d’une structure de répertoires. Pour télécharger du contenu depuis Amazon S3, vous devez spécifier le chemin d'accès au fichier. Voici deux exemples :

Exemple 1 : Télécharger un fichier de manuel stratégique spécifique

{ "path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/playbook.yml" }

Exemple 2 : Télécharger le contenu d'un répertoire

{ "path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/ansible/webservers/" }
Important

Si vous spécifiez Amazon S3, le profil d’instance AWS Identity and Access Management (IAM) sur vos nœuds gérés doit inclure les autorisations pour le compartiment S3. Pour plus d’informations, consultez la section Configurer des autorisations d’instance requises pour Systems Manager.

Prise en charge de la structure de manuel stratégique compressé

Le document AWS-ApplyAnsiblePlaybooks vous permet d'exécuter des fichiers .zip compressés dans le bundle téléchargé. Le document vérifie si les fichiers téléchargés contiennent un fichier compressé au format .zip. Si un fichier .zip est trouvé, le document décompresse automatiquement le fichier, puis exécute l’automatisation Ansible spécifiée.

Journalisation améliorée

Le document AWS-ApplyAnsiblePlaybooks inclut un paramètre facultatif pour spécifier différents niveaux de journalisation. Spécifiez -v pour une journalisation avec un niveau de détail faible, -vv ou -vvv pour une journalisation avec un niveau de détail moyen et -vvvv pour une journalisation avec u niveau de débogage. Ces options mappent directement sur les options de niveau de détail Ansible.

Possibilité de spécifier le manuel stratégique à exécuter lorsque les manuels stratégiques sont regroupés

Le document AWS-ApplyAnsiblePlaybooks inclut un paramètre obligatoire pour spécifier le manuel stratégique à exécuter lorsque plusieurs manuels sont regroupés. Cette option offre une flexibilité pour exécuter des manuels stratégiques afin de prendre en charge différents cas d'utilisation.

Comprendre les dépendances installées

Si vous spécifiez True (vrai) pour le paramètre InstallDependencies, Systems Manager vérifie que les dépendances suivantes sont installées sur vos nœuds :

  • Ubuntu Server/Debian Server : Apt-get (gestion de package), Python 3, Ansible, Unzip

  • Amazon Linux : Ansible

  • RHEL : Python 3, Ansible, Unzip

Si une ou plusieurs de ces dépendances sont introuvables, Systems Manager les installe automatiquement.

Création d’une association exécutant des playbooks Ansible (console)

La procédure suivante décrit comment utiliser la console Systems Manager pour créer une association State Manager qui exécute les playbooks Ansible à l’aide du document AWS-ApplyAnsiblePlaybooks.

Pour créer une association qui exécute les playbooks Ansible (console)
  1. Ouvrez la console AWS Systems Manager à l'adresse https://console.aws.amazon.com/systems-manager/.

  2. Dans le panneau de navigation, sélectionnez State Manager.

  3. Sélectionnez State Manager, puis Create association (Créer une association).

  4. Pour Name (Nom), spécifiez un nom qui vous aide à mémoriser l'objectif de l'association.

  5. Dans la liste Document, sélectionnez AWS-ApplyAnsiblePlaybooks.

  6. Dans la section Parameters (Paramètres) pour Source Type (Type de source), sélectionnez GitHub ou S3.

    GitHub

    Si vous sélectionnez GitHub, saisissez les informations de référentiel au format suivant.

    { "owner":"user_name", "repository":"name", "path":"path_to_directory_or_playbook_to_download", "getOptions":"branch:branch_name", "tokenInfo":"{{(Optional)_token_information}}" }

    S3

    Si vous sélectionnez S3, saisissez les informations de chemin au format suivant.

    { "path":"https://s3.amazonaws.com/path_to_directory_or_playbook_to_download" }
  7. Pour Install Dependencies (Installer des dépendances), sélectionnez une option.

  8. (Facultatif) Pour Playbook File (Fichier de manuel stratégique), entrez un nom de fichier. Si le playbook est contenu dans un fichier .zip, spécifiez un chemin d'accès relatif au fichier .zip.

  9. (Facultatif) Pour Variables supplémentaires, entrez les variables que vous souhaitez que State Manager envoie à Ansible lors de l’exécution.

  10. (Facultatif) Pour Check (Vérifier), sélectionnez une option.

  11. (Facultatif) Pour Verbose (Détails), sélectionnez une option.

  12. Pour Targets (Cibles), sélectionnez une option. Pour plus d'informations sur l'utilisation des cibles, consultez Comprendre les cibles et les contrôles du taux dans les associations State Manager.

  13. Dans la section Specify schedule (Spécifier une planification), sélectionnez On Schedule (Selon planification) ou No schedule (Pas de planification). Si vous sélectionnez On Schedule (Selon planification), utilisez les boutons fournis pour créer une planification de type cron ou rate pour l'association.

  14. Dans la section Advanced options (Options avancées), pour Compliance severity (Sévérité de conformité), sélectionnez un niveau de sévérité pour l'association. Les rapports de conformité indiquent si l'état de l'association est conforme ou non conforme, ainsi que le niveau de sévérité que vous spécifiez ici. Pour en savoir plus, consultez A propos de la conformité des associations State Manager.

  15. Dans la section Rate control (Contrôle du débit), configurez des options pour l'exécution d'associations State Manager dans un parc de nœuds gérés. Pour plus d'informations sur l'utilisation des contrôles de débit, consultez Comprendre les cibles et les contrôles du taux dans les associations State Manager.

    Dans la section Simultanéité, sélectionnez une option :

    • Sélectionnez targets (cibles) pour entrer un nombre absolu de cibles pouvant exécuter l'association simultanément.

    • Sélectionnez percentage (pourcentage) pour saisir un pourcentage de l'ensemble de cibles pouvant exécuter l'association simultanément.

    Dans la section Error threshold (Seuil d'erreurs), sélectionnez une option :

    • Sélectionnez errors (erreurs) pour saisir un nombre absolu d'erreurs autorisées avant que State Manager ne cesse d'exécuter des associations sur des cibles supplémentaires.

    • Sélectionnez percentage (pourcentage) pour saisir un pourcentage d'erreurs autorisées avant que State Manager ne cesse d'exécuter des associations sur des cibles supplémentaires.

  16. (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 les sections Configurer des autorisations d’instance requises pour Systems Manager et Créer un rôle de service IAM pour un environnement hybride. En outre, si le compartiment S3 spécifié se trouve sur un autre Compte AWS, vérifiez que le profil d'instance ou la fonction de service IAM associé au nœud géré dispose des autorisations nécessaires pour écrire dans ce compartiment.

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

Note

Si vous utilisez des identifications pour créer une association sur un ou plusieurs nœuds cibles, puis que vous supprimez les identifications d'un nœud, ce nœud n'exécute plus l'association. Le nœud est dissocié du document State Manager.

Création d’une association exécutant les playbooks Ansible (interface de ligne de commande)

La procédure suivante décrit comment utiliser l’AWS Command Line Interface (AWS CLI) pour créer une association State Manager qui exécute les playbooks Ansible à l’aide du document AWS-ApplyAnsiblePlaybooks.

Pour créer une association qui exécute les playbooks Ansible (interface de ligne de commande)
  1. Si vous ne l'avez pas déjà fait, installez et configurez l'AWS Command Line Interface (AWS CLI).

    Pour de plus amples informations, consultez Installation ou mise à jour de la version la plus récente de l'AWS CLI.

  2. Exécutez l’une des commandes suivantes pour créer une association qui exécute des playbooks Ansible en ciblant des nœuds à l’aide de balises. Remplacez chaque example resource placeholder (espace réservé pour les ressources) avec vos propres informations. La commande (A) spécifie GitHub comme type de source. La commande (B) spécifie Amazon S3 comme type de source.

    Source GitHub (A)

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"],"TimeoutSeconds":["3600"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"], "TimeoutSeconds":["3600"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    Voici un exemple.

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ansibleDocumentTest\", \"repository\": \"Ansible\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True"],"PlaybookFile":["hello-world-playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"

    Source S3 (B)

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    Voici un exemple.

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/amzn-s3-demo-bucket/playbook.yml\"}"],"InstallDependencies":["True"],"PlaybookFile":["playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"
    Note

    Les associations State Manager ne prennent pas en charge toutes les expressions cron et rate. Pour plus d'informations sur la création d'expressions cron et rate pour des associations, consultez Référence : Expressions Cron et Rate pour Systems Manager.

    Le système tente de créer l'association sur les nœuds et applique immédiatement l'état.

  3. Exécutez la commande suivante pour afficher le statut mis à jour de l'association que vous venez de créer.

    aws ssm describe-association --association-id "ID"