Procédure : utiliser les AWS CLI avec Run Command - AWS Systems Manager

Procédure : utiliser les AWS CLI avec Run Command

L'exemple de procédure suivant vous explique comment utiliser l'AWS Command Line Interface (AWS CLI) pour afficher les informations sur les commandes et leurs paramètres, comment exécuter les commandes et comment afficher le statut de ces dernières.

Important

Seuls les administrateurs de confiance doivent être autorisés à utiliser les documents préconfigurés AWS Systems Manager illustrés dans cette rubrique. Les commandes ou scripts spécifiés dans des documents Systems Manager sont exécutés avec des autorisations administratives sur vos nœuds gérés. Si un utilisateur a l'autorisation d'exécuter l'un des documents Systems Manager prédéfinis (tout document qui commence par AWS-), cet utilisateur dispose d'un accès administrateur au nœud. Pour tous les autres utilisateurs, vous devez créer des documents restrictifs et les partager avec des utilisateurs spécifiques.

Étape 1 : Démarrage

Vous devez disposer de autorisations administrateur sur les nœuds gérés que vous souhaitez configurer ou vous devez bénéficier de l'autorisation appropriée dans AWS Identity and Access Management (IAM). Notez également que cet exemple utilise la région USA Est (Ohio) (us-east-2). Run Command est disponible dans les Régions AWS répertoriées dans Points de terminaison de service Systems Manager dans la Référence générale d'Amazon Web Services. Pour en savoir plus, consultez Configuration de nœuds gérés pour AWS Systems Manager.

Pour exécuter des commandes à l'aide de l'AWS CLI
  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. Répertoriez tous les documents disponibles.

    Cette commande répertorie tous les documents disponibles pour votre compte en fonction des autorisations IAM.

    aws ssm list-documents
  3. Vérifier qu'un nœud géré est prêt à recevoir les commandes.

    La sortie de la commande suivante indique si les nœuds gérés sont en ligne.

    Linux & macOS
    aws ssm describe-instance-information \ --output text --query "InstanceInformationList[*]"
    Windows
    aws ssm describe-instance-information ^ --output text --query "InstanceInformationList[*]"
  4. Exécutez la commande suivante pour afficher les détails sur un nœud géré spécifique.

    Note

    Pour exécuter les commandes de cette procédure, remplacez l'instance et les ID de commande. Pour les appareils Core AWS IoT Greengrass gérés, utilisez mi-ID_number comme ID d'instance. L'ID de commande est renvoyé en réponse à send-command. Les ID d'instance sont disponibles depuis Fleet Manager, une fonctionnalité de AWS Systems Manager.

    Linux & macOS
    aws ssm describe-instance-information \ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
    Windows
    aws ssm describe-instance-information ^ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID

Étape 2 : Exécuter des scripts shell pour afficher les détails des ressources

Run Command et le document AWS-RunShellScript vous permettent d'exécuter n'importe quel script ou commande sur un nœud géré comme si vous vous étiez connecté localement.

Afficher la description et les paramètres disponibles

Exécutez la commande suivante pour afficher la description du document JSON Systems Manager.

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "[Document.Name,Document.Description]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "[Document.Name,Document.Description]"

Utilisez la commande suivante afin d'afficher les paramètres disponibles et les détails les concernant.

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "Document.Parameters[*]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "Document.Parameters[*]"

Étape 3 : Envoyer des commandes simples à l'aide du document AWS-RunShellScript

Utilisez la commande suivante afin d'obtenir des informations IP pour un nœud géré Linux.

Si vous ciblez un nœud géré Windows Server, remplacez document-name par AWS-RunPowerShellScript et command depuis ifconfig par ipconfig.

Linux & macOS
aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "IP config" \ --parameters commands=ifconfig \ --output text
Windows
aws ssm send-command ^ --instance-ids "instance-ID" ^ --document-name "AWS-RunShellScript" ^ --comment "IP config" ^ --parameters commands=ifconfig ^ --output text
Obtenir des informations sur la commande avec des données de réponse

La commande suivante utilise l'ID de commande qui a été retourné par la commande précédente afin d'obtenir les détails et les données de réponse de l'exécution de la commande. Le système renvoie les données de réponse si la commande a été exécutée. Si l'exécution de la commande indique "Pending" ou "InProgress", vous devrez l'exécuter à nouveau pour consulter les données de réponse.

Linux & macOS
aws ssm list-command-invocations \ --command-id $sh-command-id \ --details
Windows
aws ssm list-command-invocations ^ --command-id $sh-command-id ^ --details

Identification de l'utilisateur

La commande suivante affiche l'utilisateur par défaut qui exécute les commandes.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux managed node" \ --parameters commands=whoami \ --output text \ --query "Command.CommandId")
Obtenir le statut de la commande

La commande suivante utilise l'ID de commande afin d'obtenir le statut de l'exécution de la commande sur le nœud géré. Cet exemple utilise l'ID de commande qui a été renvoyé lors de la commande précédente.

Linux & macOS
aws ssm list-commands \ --command-id "command-ID"
Windows
aws ssm list-commands ^ --command-id "command-ID"
Obtenir les détails de la commande

La commande suivante utilise l'ID de la commande précédente afin d'obtenir le statut de l'exécution de la commande par nœud géré.

Linux & macOS
aws ssm list-command-invocations \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --command-id "command-ID" ^ --details
Obtention d'informations sur la commande avec des données de réponse pour un nœud géré

La commande suivante renvoie la sortie de la demande aws ssm send-command initiale pour un nœud géré spécifique.

Linux & macOS
aws ssm list-command-invocations \ --instance-id instance-ID \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --instance-id instance-ID ^ --command-id "command-ID" ^ --details

Afficher la version Python

La commande suivante retourne la version de Python exécutée sur un nœud.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux Instances" \ --parameters commands='python -V' \ --output text --query "Command.CommandId") \ sh -c 'aws ssm list-command-invocations \ --command-id "$sh_command_id" \ --details \ --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'

Étape 4 : Exécuter un script Python simple en utilisant Run Command

La commande suivante exécute un simple script Python « Hello World » à l'aide de Run Command.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux Instances" \ --parameters '{"commands":["#!/usr/bin/python","print \"Hello World from python\""]}' \ --output text \ --query "Command.CommandId") \ sh -c 'aws ssm list-command-invocations \ --command-id "$sh_command_id" \ --details \ --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'

Étape 5 : exécutez un script Bash avec Run Command

Les exemples de cette section montrent l'exécution du script bash suivant avec Run Command.

Pour obtenir des exemples d'utilisation de Run Command pour exécuter des scripts stockés dans des emplacements distants, consultez Exécution de scripts à partir d'Amazon S3 et Exécution de scripts depuis GitHub.

#!/bin/bash yum -y update yum install -y ruby cd /home/ec2-user curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install chmod +x ./install ./install auto

Ce script installe l'agent AWS CodeDeploy sur les instances Amazon Linux et Red Hat Enterprise Linux (RHEL), comme décrit dans Créer une instance Amazon EC2 pour CodeDeploy dans le Guide de l'utilisateur AWS CodeDeploy.

Le script installe l'agent CodeDeploy à partir d'un compartiment S3 géré par AWS dans la région USA Est (Ohio) (us-east-2), aws-codedeploy-us-east-2.

Exécuter un script bash dans une commande AWS CLI

L'exemple suivant montre comment inclure le script bash dans une commande CLI en utilisant l'option --parameters.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets '[{"Key":"InstanceIds","Values":["instance-id"]}]' \ --parameters '{"commands":["#!/bin/bash","yum -y update","yum install -y ruby","cd /home/ec2-user","curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install","chmod +x ./install","./install auto"]}'

Exécuter un script bash dans un fichier JSON

Dans l'exemple suivant, le contenu du script bash est stocké dans un fichier JSON, et le fichier est inclus dans la commande en utilisant l'option --cli-input-json.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets "Key=InstanceIds,Values=instance-id" \ --cli-input-json file://installCodeDeployAgent.json
Windows
aws ssm send-command ^ --document-name "AWS-RunShellScript" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --cli-input-json file://installCodeDeployAgent.json

L'exemple suivant montre le contenu du fichier installCodeDeployAgent.json référencé.

{ "Parameters": { "commands": [ "#!/bin/bash", "yum -y update", "yum install -y ruby", "cd /home/ec2-user", "curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install", "chmod +x ./install", "./install auto" ] } }