Wie referenziere ich Systems-Manager-Parameter in verschiedenen AWS-Services?

Lesedauer: 5 Minute
0

Ich möchte Parameter Store, eine Funktion von AWS Systems Manager, verwenden, um Systems-Manager-Parameter in verschiedene AWS-Services zu integrieren.

Kurzbeschreibung

In den folgenden Beispielszenarien können Sie auf unterschiedliche Weise Systems-Manager-Parameter referenzieren:

  • In einem Systems-Manager-Befehlsdokument einen regulären Parameter vom Typ „String“ referenzieren
  • In einem Systems-Manager-Befehlsdokument einen Parameter vom Typ „SecureString“ referenzieren
  • In einer AWS-CloudFormation-Vorlage einen Parameter vom Typ „String“ referenzieren
  • In einem Boto3-Skript einen Parameter vom Typ „String“ referenzieren
  • In einem Systems-Manager-Automatisierungsdokument einen Parameter vom Typ „String“ referenzieren
  • In einer AWS-Befehlszeilenschnittstelle (AWS CLI) einen Parameter vom Typ „String“ referenzieren

Behebung

In einem Systems-Manager-Befehlsdokument einen regulären Parameter vom Typ „String“ referenzieren

In diesem Beispiel installieren Sie eine Version der AWS-Befehlszeilenschnittstelle (AWS CLI) in einer Instance von Amazon Elastic Compute Cloud (Amazon EC2) Linux x86 (64-Bit). Die AWS-CLI-Versionsnummer wird im Parameter Store als /CLI/required-version gespeichert.

Das Beispiel referenziert den Parameter in einem Befehlsdokument als {{ssm:/CLI/required-version}}:

Hinweis: Sie können jeden Systems-Manager-Parameter in einem Befehlsdokument im folgenden Format referenzieren: {{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"  
        ]  
      }  
    }  
  ]  
}

In einem Systems-Manager-Befehlsdokument einen Parameter vom Typ „SecureString“ referenzieren

Wenn Sie einen SecureString-Parametertyp verwenden, müssen Sie den Parameter zuerst mit einem AWS-CLI-Befehl entschlüsseln. Anschließend können Sie den Parameter im Befehlsdokument verwenden.

Hinweis: Wenn Sie den Parameter nicht zuerst entschlüsseln, ist der geschriebene Wert der Metadatenwert.

Im Folgenden finden Sie ein Beispiel für die Referenzierung eines Parameters vom Typ „SecureString“ (Sichere Zeichenfolge) in einem Befehlsdokument:

{  
  "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"  
        ]  
      }  
    }  
  ]  
}

In einer CloudFormation-Vorlage einen Parameter vom Typ „String“ referenzieren

Sie können eine CloudFormation-Vorlage verwenden, um einen Parameter vom Typ „String“ zu referenzieren. Die Definition des Werts als String gibt an, dass der Wert, der für diesen Parameter zurückgegeben wird, eine Zeichenfolge ist. Weitere unterstützte Parametertypen finden Sie unter Unterstützte SSM-Parametertypen.

Im Folgenden finden Sie ein Beispiel für den Start einer Amazon-EC2-Instance, deren Name im Parameter Store unter dem Parameternamen InstanceName gespeichert ist:

{  
  "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 unterstützt nicht die Definition von Vorlagenparametern als SecureString-Systems-Manager-Parametertypen. Sie können jedoch dynamische Referenzen verwenden, um einen Parameter vom Typ „SecureString“ in einer CloudFormation-Vorlage nur für unterstützte Ressourcen zu referenzieren.

Wenn Sie eine dynamische Referenz für einen SecureString-Parameter in einer CloudFormation-Vorlage verwenden, sehen Sie sich dieses Beispiel an.

In einem Boto3-Skript einen Parameter vom Typ „String“ referenzieren

Mit Boto3 können Sie eine get_parameter-Funktion mit einem Name-Parameter aufrufen. Sie können auch das WithDecryption-Feld hinzufügen, um einen verschlüsselten Parameter zu referenzieren.

Das folgende Beispiel referenziert den Wert eines Systems-Manager-Parameters vom Typ „SecureString“ namens /instance/name, um die Instance zu starten. In diesem Beispiel wird der EC2-Instance-Name im Systems Manager-Parameter /instance/name: gespeichert.

Hinweis: Wenn Sie Boto3 mit einem Parameter vom Typ „String“ verwenden, können Sie das Feld WithDecryption entfernen.

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.")

In einem Systems-Manager-Automatisierungsdokument einen Parameter vom Typ „String“ referenzieren

Bei Systems-Manager-Automatisierungsdokumenten können Sie die aws:executeAwsApi-API verwenden, um einen Systems Manager-Parameter zu referenzieren.

Im folgenden Beispiel wird die AMI Id im Systems Manager-Parameter gespeichert und als Eingabe für dieses Automatisierungsdokument analysiert. Der Parameterwert aus Schritt 1 wird als Eingabe an Schritt 2 übergeben, um eine EC2-Instance zu starten.

Hinweis: Wenn Sie einen SecureString-Parameter referenzieren, können Sie den Wert für das Feld WithDecryption auf True setzen. Die Ausgabe für den Automatisierungsschritt getparameter zeigt jedoch den entschlüsselten Wert des Parameters an.


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

In der AWS-CLI einen Parameter vom Typ „String“ referenzieren

Das Referenzieren von Systems Manager-Parametern in der AWS-CLI ähnelt dem Referenzieren von Parametern in Befehlsdokumenten. Sie können einen Parameter vom Typ „String“ als ssm:parameter-name referenzieren. Für SecureString-Parameter müssen Sie den Parameter zuerst entschlüsseln. Anschließend können Sie den Parameter im AWS-CLI-Befehl verwenden.

Ein Beispiel für die Referenzierung eines Parameters in der AWS-CLI finden Sie unter Parameter ausführen (AWS CLI).

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr