Comment référencer les paramètres de Systems Manager dans différents services AWS ?

Lecture de 6 minute(s)
0

Je souhaite utiliser Parameter Store, une fonctionnalité d'AWS Systems Manager, pour intégrer les paramètres de Systems Manager dans divers services AWS.

Brève description

Les exemples de scénarios suivants présentent différentes manières de référencer les paramètres de Systems Manager :

  • Référencer un paramètre de type chaîne normal dans un document de commande de Systems Manager
  • Référencer un paramètre de type chaîne sécurisé dans un document de commande de Systems Manager
  • Référencer un paramètre de type chaîne dans un modèle AWS CloudFormation
  • Référencer un paramètre de type chaîne dans un script Boto3
  • Référencer un paramètre de type chaîne dans un document d'automatisation du Systems Manager
  • Référencer un paramètre de type chaîne dans une interface de la ligne de commande AWS (AWS CLI)

Résolution

Référencer un paramètre de type chaîne normal dans un document de commande de Systems Manager

Dans cet exemple, vous installez une version spécifique de l'interface de ligne de commande AWS (AWS CLI) sur une instance Amazon Elastic Compute Cloud (Amazon EC2) Linux x86 (64-bit). Le numéro de version de l'AWS CLI est stocké dans le magasin de paramètres sous /CLI/required-version.

L'exemple fait référence au paramètre dans un document de commande sous {{ssm : /cli/required-version}} :

Remarque : vous pouvez référencer n'importe quel paramètre de Systems Manager dans un document de commande au format suivant {{ssm:parameter-name}}.

{  
  "mainSteps": [  
    {  
      "action": "aws:runShellScript",  
      "name": "installSoftware",  
      "inputs": {  
        "runCommand": [  
          "echo 'Installing AWS CLI version {{ssm:/CLI/required-version}}'",  
          "curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-{{ssm:/CLI/required-version}}" -o "awscliv2.zip",  
          "unzip awscliv2.zip",  
          "sudo ./aws/install"  
        ]  
      }  
    }  
  ]  
}

Référencer un paramètre de type chaîne sécurisé dans un document de commande de Systems Manager

Si vous utilisez un type de paramètre SecureString, vous devez d'abord le déchiffrer via une commande de l'interface de ligne de commande AWS. Vous pouvez ensuite utiliser le paramètre dans le document de commande.

Remarque : si vous ne déchiffrez pas d'abord le paramètre, la valeur qui est écrite est la valeur des métadonnées.

Voici un exemple de référencement d'un paramètre de type chaîne sécurisé dans un document de commande :

{  
  "mainSteps": [  
    {  
      "action": "aws:runShellScript",  
      "name": "installSoftware",  
      "inputs": {  
        "runCommand": [  
          "secure=$(aws ssm get-parameters --names /CLI/required-version --with-decryption --query Parameters[0].Value)",  
          "curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-$secure" -o "awscliv2.zip",  
          "unzip awscliv2.zip",  
          "sudo ./aws/install"  
        ]  
      }  
    }  
  ]  
}

Référencer un paramètre de type chaîne dans un modèle CloudFormation

Vous pouvez utiliser un modèle CloudFormation pour référencer un paramètre de type chaîne. Définir la valeur sous forme de Chaîne indique que la valeur renvoyée pour ce paramètre est une chaîne. Pour les autres types de paramètres pris en charge, consultez la section Types de paramètres SSM pris en charge.

Voici un exemple de lancement d'une instance Amazon EC2 dont le nom est stocké dans Parameter Store sous le nom de paramètre InstanceName :

{  
  "Parameters": {  
    "MyInstanceName": {  
      "Type": "AWS::SSM::Parameter::Value<String>",  
      "Default": "InstanceName",  
      "Description": "Name of the EC2 instance"  
    }  
  },  
  "Resources": {  
    "TestInstance": {  
      "Type": "AWS::EC2::Instance",  
      "Properties": {  
        "ImageId": "ami-xxxx",  
        "InstanceType": "t3.xlarge",  
        "Tags": [{  
          "Key": "Name",  
          "Value": { "Ref": "MyInstanceName" }  
        }]  
      }  
    }  
  }  
}

CloudFormation ne prend pas en charge la définition des paramètres du modèle en tant que types de paramètres SecureString Systems Manager. Toutefois, vous pouvez utiliser des références dynamiques pour référencer un paramètre de chaîne sécurisé dans un modèle CloudFormation pour les ressources prises en charge uniquement.

Si vous utilisez une référence dynamique pour un paramètre de chaîne sécurisé dans un modèle CloudFormation, consultez cet Exemple.

Référencer un paramètre de type chaîne dans un script Boto3

Avec Boto3, vous pouvez appeler une fonction get_parameter avec un paramètre Name. Vous pouvez également inclure le champ WithDecryption pour référencer un paramètre crypté.

L'exemple suivant fait référence à la valeur d'un paramètre de chaîne sécurisée Systems Manager appelé /instance/name pour démarrer l'instance. Dans cet exemple, le nom de l'instance EC2 est stocké dans le paramètre /instance/namede Systems Manager.

Remarque : si vous utilisez Boto3 avec un paramètre de type chaîne, vous pouvez supprimer le champ WithDecryption.

import boto3  
ec2_client = boto3.client('ec2')  
ssm_client = boto3.client('ssm')  
parameter_name = '/instance/name'  
response = ssm_client.get_parameter(  
    Name=parameter_name,  
    WithDecryption=True  
)  
instance_name = response['Parameter']['Value']  
response = ec2_client.describe_instances(  
    Filters=[  
        {  
            'Name': 'tag:Name',  
            'Values': [instance_name]  
        }  
    ]  
)  
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']  
ec2_client.start_instances(InstanceIds=[instance_id])  
print("Instance started successfully.")

Référencer un paramètre de type chaîne dans un document d'automatisation du Systems Manager

Avec les documents d'automatisation de Systems Manager, vous pouvez utiliser l'API AWS:ExecuteAWSAPI pour référencer un paramètre de Systems Manager.

Dans l'exemple suivant, l'ID AMI est stocké dans le paramètre Systems Manager et analysé en tant qu'entrée pour ce document d'automatisation. La valeur du paramètre de l'étape 1 est transmise en tant qu'entrée à l'étape 2 pour le lancement d'une instance EC2.

Remarque : si vous faites référence à un paramètre SecureString, vous pouvez définir la valeur du champ WithDecryption sur Vrai. Toutefois, la sortie de l'étape d'automatisation getparameter affiche la valeur décryptée du paramètre.


description: Sample runbook using AWS API operations
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf.
    default: ''
  AMIParameter:
    type: String
    description: SSM Parameter name to get the AMI ID from
mainSteps:
  - name: getparameter
    action: 'aws:executeAwsApi'
    inputs:
      Service: ssm
      Api: GetParameter
      Name: '{{AMIParameter}}'
      WithDecryption: false
    outputs:
      - Name: ImageId
        Selector: Parameter.Value
        Type: String
  - name: launchOneInstance
    action: 'aws:executeAwsApi'
    inputs:
      Service: ec2
      Api: RunInstances
      ImageId: '{{ getparameter.ImageId }}'
      MaxCount: 1
      MinCount: 1
    outputs:
      - Name: InstanceId
        Selector: '$.Instances[0].InstanceId'
        Type: String

Référencer un paramètre de type chaîne dans l'AWS CLI

Le référencement des paramètres de Systems Manager dans l'interface de ligne de commande AWS est similaire au référencement des paramètres dans les documents de commande. Vous pouvez référencer un paramètre de type chaîne sous la forme ssm:parameter-name. Pour les paramètres de chaîne sécurisés, vous devez d'abord déchiffrer le paramètre. Vous pouvez ensuite utiliser le paramètre dans la commande AWS CLI.

Pour un exemple de référencement d'un paramètre dans l'AWS CLI, consultez Exécuter un paramètre (AWS CLI).

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