Come faccio a fare riferimento ai parametri di Systems Manager in diversi servizi AWS?

6 minuti di lettura
0

Desidero utilizzare Parameter Store, una funzionalità di AWS Systems Manager, per integrare i parametri di Systems Manager in vari servizi AWS.

Breve descrizione

I seguenti scenari di esempio sono diversi modi per fare riferimento ai parametri di Systems Manager:

  • Fai riferimento a un normale parametro di tipo stringa in un documento di comando di Systems Manager
  • Fai riferimento a un parametro di tipo stringa sicuro in un documento di comando di Systems Manager
  • Fai riferimento a un parametro di tipo stringa in un modello di AWS CloudFormation
  • Fai riferimento a un parametro di tipo stringa in uno script Boto3
  • Fai riferimento a un parametro di tipo stringa in un documento di automazione di Systems Manager
  • Fai riferimento a un parametro di tipo stringa in un'Interfaccia della linea di comando AWS (AWS CLI)

Risoluzione

Fai riferimento a un normale parametro di tipo stringa in un documento di comando di Systems Manager

In questo scenario di esempio, stai installando una versione specifica dell'Interfaccia della linea di comando AWS (AWS CLI) su un'istanza Amazon Elastic Compute Cloud (Amazon EC2) Linux x86 (64 bit). Inoltre, il numero di versione di AWS CLI è memorizzato nel Parameter Store come /CLI/required-version.

L'esempio fa riferimento al parametro in un documento di comando come {{ssm:/CLI/required-version}}:

Nota: puoi fare riferimento a qualsiasi parametro di Systems Manager in un documento di comando nel seguente formato {{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"  
        ]  
      }  
    }  
  ]  
}

Fai riferimento a un parametro di tipo stringa sicuro in un documento di comando di Systems Manager

Se utilizzi un tipo di parametro SecureString, devi prima decrittografare il parametro tramite un comando di AWS CLI. A questo punto puoi utilizzare il parametro nel documento di comando.

Nota: se non decritti prima il parametro, il valore scritto è il valore dei metadati.

Di seguito è riportato un esempio di riferimento a un parametro di tipo stringa sicuro in un documento di comando:

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

Fai riferimento a un parametro di tipo stringa in un modello CloudFormation

Puoi utilizzare un modello CloudFormation per fare riferimento a un parametro di tipo stringa. La definizione del valore come String indica che il valore restituito per quel parametro è una stringa. Per altri tipi di parametri supportati, vedi Tipi di parametri SSM supportati.

Di seguito è riportato un esempio di avvio di un'istanza Amazon EC2, il cui nome è memorizzato in Parameter Store con il nome del parametro 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 non supporta la definizione dei parametri dei modelli come tipi di parametri SecureString di Systems Manager. Tuttavia, puoi utilizzare riferimenti dinamici per fare riferimento a un parametro di stringa sicuro in un modello CloudFormation solo per le risorse supportate.

Se stai utilizzando un riferimento dinamico per un parametro di stringa sicuro in un modello CloudFormation, consulta questo Esempio.

Fai riferimento a un parametro di tipo stringa in uno script Boto3

Con Boto3, puoi chiamare una funzione get_parameter con un parametro Name. Puoi anche includere il campo WithDecryption per fare riferimento a un parametro crittografato.

L'esempio seguente fa riferimento al valore di un parametro di stringa sicuro di Systems Manager chiamato /instance/name per avviare l'istanza. In questo esempio, il nome dell'istanza EC2 è memorizzato nel parametro di Systems Manager /instance/name:.

Nota: se utilizzi Boto3 con un parametro di tipo stringa, puoi rimuovere il campo 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.")

Fai riferimento a un parametro di tipo stringa in un documento di automazione di Systems Manager

Con i documenti di automazione di Systems Manager, puoi utilizzare l'API aws:executeAwsApi per fare riferimento a un parametro di Systems Manager.

Nell'esempio seguente, l'Id dell'AMI viene memorizzato nel parametro Systems Manager e analizzato come input per questo documento di automazione. Il valore del parametro del passaggio 1 viene passato come input al passaggio 2 per l'avvio di un'istanza EC2.

Nota: se fai riferimento a un parametro SecureString, puoi impostare il valore per il campo WithDecryption su True. Tuttavia, l'output per la fase di automazione getparameter visualizza il valore decrittografato del parametro.


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

Fai riferimento a un parametro di tipo stringa nell'Interfaccia AWS CLI

Fare riferimento ai parametri di Systems Manager nell'interfaccia AWS CLI è simile al riferimento ai parametri nei documenti di comando. Puoi fare riferimento a un parametro di tipo stringa come ssm:parameter-name. Per i parametri di stringa sicuri, è necessario prima decrittografare il parametro. Quindi, puoi utilizzare il parametro nel comando AWS CLI.

Per un esempio di riferimento a un parametro nell'AWS CLI, vedi Eseguire un parametro (AWS CLI).

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa