Utilisation des paramètres dans Parameter Store à l’aide de commandes Run Command - AWS Systems Manager

Utilisation des paramètres dans Parameter Store à l’aide de commandes Run Command

Vous pouvez utiliser des paramètres dans Run Command, une fonctionnalité de AWS Systems Manager. Pour en savoir plus, consultez AWS Systems Manager Run Command.

Exécution d’un paramètre de chaîne à l’aide de la console

La procédure suivante vous guide à travers le processus d'exécution d'une commande utilisant un paramètre String.

Pour exécuter un paramètre de chaîne à l'aide de Parameter Store
  1. Ouvrez la console AWS Systems Manager à l'adresse https://console.aws.amazon.com/systems-manager/.

  2. Dans le panneau de navigation, sélectionnez Run Command.

  3. Sélectionnez Run Command (Exécuter la commande).

  4. Dans la liste Command document (Document de commande), sélectionnez AWS-RunPowerShellScript (Windows) ou AWS-RunShellScript (Linux).

  5. Pour Command parameters (Paramètres de commande), entrez echo {{ssm:parameter-name}}. olpPar exemple : echo {{ssm:/Test/helloWorld}}.

  6. Dans la section Targets (Cibles), sélectionnez les nœuds gérés sur lesquels vous souhaitez exécuter cette opération en spécifiant des balises, en sélectionnant des instances ou des appareils de périphérie manuellement ou en spécifiant un groupe de ressources.

    Astuce

    Si, contrairement à vos attentes, un nœud géré ne figure pas dans la liste, consultez Résolution des problèmes de disponibilité des nœuds gérés pour obtenir des conseils de dépannage.

  7. Pour Autres paramètres :

    • Pour Comment (Commentaire), saisissez des informations à propos de cette commande.

    • Pour Délai (secondes), précisez le nombre de secondes durant lesquelles le système doit attendre avant de mettre en échec l'exécution de la commande globale.

  8. Pour Rate control (Contrôle de débit) :

    • Dans Concurrency (Simultanéité), spécifiez un nombre ou un pourcentage de nœuds gérés sur lesquels exécuter simultanément la commande.

      Note

      Si vous avez sélectionné des cibles en spécifiant les balises appliquées aux nœuds gérés ou en spécifiant des groupes de ressources AWS, et que vous n'êtes pas certain du nombre de nœuds gérés ciblés, limitez le nombre de cibles autorisées à exécuter simultanément le document en indiquant un pourcentage.

    • Dans Error threshold (Seuil d'erreur), indiquez quand arrêter l'exécution de la commande sur les autres nœuds gérés après l'échec de celle-ci sur un certain nombre ou un certain pourcentage de nœuds. Si, par exemple, vous spécifiez trois erreurs, Systems Manager cesse d'envoyer la commande à la réception de la quatrième erreur. Les nœuds gérés sur lesquels la commande est toujours en cours de traitement peuvent également envoyer des erreurs.

  9. (Facultatif) Pour Output options (Options de sortie), pour enregistrer la sortie de la commande dans un fichier, cochez la case Write command output to an S3 bucket (Écrire la sortie de commande vers un compartiment S3). Saisissez les noms de compartiment et de préfixe (dossier) dans les zones.

    Note

    Les autorisations S3 qui accordent la possibilité d'écrire les données dans un compartiment S3 sont celles du profil d'instance (pour les instances EC2) ou de la fonction du service IAM (pour les machines activées par un système hybride) attribués à l'instance, 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, assurez-vous 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.

  10. Dans la section SNS notifications (Notifications SNS), si vous souhaitez envoyer des notifications sur le statut d'exécution des commandes, cochez la case Enable SNS notifications (Activer les notifications SNS).

    Pour plus d'informations sur la configuration des notifications Amazon SNS pour Run Command, consultez Surveillance des changements d'état du Systems Manager à l'aide des notifications Amazon SNS.

  11. Cliquez sur Exécuter.

  12. Sur la page Command ID (ID de commande) dans la zone Targets and outputs (Cibles et sorties) sélectionnez le bouton en regard de l'ID d'un nœud dans lequel vous avez exécuté la commande, puis sélectionnez View output (Afficher la sortie). Vérifiez que la sortie de la commande est la valeur que vous avez fournie pour le paramètre, par exemple, This is my first parameter.

Exécution d’un paramètre à l’aide de l’AWS CLI

Exemple 1 : commande simple

L'exemple de commande suivant inclut un paramètre Systems Manager appelé DNS-IP. La valeur de ce paramètre est simplement l'adresse IP d'un nœud. Cet exemple utilise une commande de l'AWS Command Line Interface (AWS CLI) pour reprendre la valeur du paramètre.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters "commands='echo {{ssm:DNS-IP}}'" \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands='echo {{ssm:DNS-IP}}'" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

La commande renvoie des informations telles que les suivantes.

{
    "Command": {
        "CommandId": "c70a4671-8098-42da-b885-89716EXAMPLE",
        "DocumentName": "AWS-RunShellScript",
        "DocumentVersion": "1",
        "Comment": "",
        "ExpiresAfter": "2023-12-26T15:19:17.771000-05:00",
        "Parameters": {
            "commands": [
                "echo {{ssm:DNS-IP}}"
            ]
        },
        "InstanceIds": [],
        "Targets": [
            {
                "Key": "instanceids",
                "Values": [
                    "i-02573cafcfEXAMPLE"
                ]
            }
        ],
        "RequestedDateTime": "2023-12-26T14:09:17.771000-05:00",
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3Region": "us-east-2",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 0,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        },
        "TimeoutSeconds": 600,
        "AlarmConfiguration": {
            "IgnorePollAlarmFailure": false,
            "Alarms": []
        },
        "TriggeredAlarms": []
    }
}

Une fois l’exécution d’une commande terminée, vous pouvez afficher plus d’informations à son sujet à l’aide des commandes suivantes :

  • get-command-invocation : affiche des informations détaillées sur l’exécution de la commande.

  • list-command-invocations : affiche l’état d’exécution des commandes sur un nœud géré spécifique.

  • list-commands : affiche l’état d’exécution des commandes sur les nœuds gérés.

Exemple 2 : déchiffrer une valeur de paramètre SecureString

L'exemple de commande suivant utilise un paramètre SecureString nommé SecurePassword. La commande utilisée dans le champ parameters récupère et déchiffre la valeur du paramètre SecureString, puis réinitialise le mot de passe administrateur local sans avoir à le transmettre en texte clair.

Linux
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters '{"commands":["secure=$(aws ssm get-parameters --names SecurePassword --with-decryption --query Parameters[0].Value --output text --region us-east-2)","echo $secure | passwd myuser --stdin"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2
Exemple 3 : référencer un paramètre dans un document SSM

Vous pouvez aussi référencer des paramètres Systems Manager dans la section Paramètres d'un document SSM, comme le montre l'exemple suivant.

{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:parameter-name}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand": "{{commands}}" } } ] }

Évitez de confondre la syntaxe similaire pour les paramètres locaux utilisés dans la section runtimeConfig des documents SSM avec les paramètres Parameter Store. Un paramètre local est différent d'un paramètre Systems Manager. Vous pouvez distinguer les paramètres locaux des paramètres Systems Manager par l'absence du préfixe ssm:.

"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"
Note

Les documents SSM ne prennent pas en charge les références aux paramètres SecureString. Cela signifie que pour utiliser les paramètres SecureString avec, par exemple, la fonctionnalité Run Command, vous devez récupérer la valeur du paramètre avant de la passer à Run Command, comme illustré dans les exemples suivants.

Linux & macOS
value=$(aws ssm get-parameters --names parameter-name --with-decryption)
aws ssm send-command \ --name AWS-JoinDomain \ --parameters password=$value \ --instance-id instance-id
Windows
aws ssm send-command ^ --name AWS-JoinDomain ^ --parameters password=$value ^ --instance-id instance-id
Powershell
$secure = (Get-SSMParameterValue -Names parameter-name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user-name,$secure