¿Cómo puedo hacer referencia a los parámetros de Systems Manager en los diferentes servicios de AWS?

6 minutos de lectura
0

Quiero usar el Almacén de parámetros, una función de AWS Systems Manager, para integrar los parámetros de Systems Manager en varios servicios de AWS.

Descripción corta

Los siguientes escenarios de ejemplo son diferentes formas de hacer referencia a los parámetros de Systems Manager:

  • Referencia de un parámetro de tipo cadena normal en un documento de comandos de Systems Manager
  • Referencia de un parámetro de tipo cadena segura en un documento de comandos de Systems Manager
  • Referencia de un parámetro de tipo cadena en una plantilla de AWS CloudFormation
  • Referencia de un parámetro de tipo cadena en un script de Boto3
  • Referencia de un parámetro de tipo cadena en un documento de automatización de Systems Manager
  • Referencia de un parámetro de tipo cadena en una Interfaz de la línea de comandos de AWS (AWS CLI)

Resolución

Referencia de un parámetro de tipo cadena normal en un documento de comandos de Systems Manager

En este escenario de ejemplo, va a instalar una versión específica de la Interfaz de la línea de comandos de AWS (AWS CLI) en una instancia Linux x86 (64 bits) de Amazon Elastic Compute Cloud (Amazon EC2). Además, el número de versión de AWS CLI se almacena en el Almacén de parámetros como /CLI/required-version.

El ejemplo hace referencia al parámetro en un documento de comandos como {{ssm:/CLI/required-version}}:

Nota: Puede hacer referencia a cualquier parámetro de Systems Manager en un documento de comandos con el 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"  
        ]  
      }  
    }  
  ]  
}

Referencia de un parámetro de tipo cadena segura en un documento de comandos de Systems Manager

Si utiliza un tipo de parámetro SecureString, primero debe descifrar el parámetro mediante un comando de AWS CLI. A continuación, puede utilizar el parámetro del documento de comandos.

Nota: Si no descifra primero el parámetro, el valor que se escribe es el valor de los metadatos.

A continuación se muestra un ejemplo de cómo hacer referencia a un parámetro de tipo cadena segura en un documento de comandos:

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

Referencia de un parámetro de tipo cadena en una plantilla de CloudFormation

Puede utilizar una plantilla de CloudFormation para hacer referencia a un parámetro de tipo cadena. Definir el valor como cadena indica que el valor devuelto para ese parámetro es una cadena. Para ver otros tipos de parámetros compatibles, consulte Tipos de parámetros SSM admitidos.

A continuación se muestra un ejemplo del lanzamiento de una instancia de Amazon EC2 cuyo nombre se almacena en el Almacén de parámetros con el nombre de parámetro 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 no admite la definición de parámetros de plantilla como tipos de parámetros de Systems Manager SecureString. Sin embargo, puede utilizar referencias dinámicas para hacer referencia a un parámetro de cadena segura en una plantilla de CloudFormation únicamente para los recursos compatibles.

Si utiliza una referencia dinámica para un parámetro de cadena segura en una plantilla de CloudFormation, consulte este ejemplo.

Referencia de un parámetro de tipo cadena en un script de Boto3

Con Boto3, puede llamar a una función get_parameter con un parámetro Name. También puede incluir el campo WithDecryption para hacer referencia a un parámetro cifrado.

El siguiente ejemplo hace referencia al valor de un parámetro de cadena segura de Systems Manager denominado /instance/name para iniciar la instancia. En este ejemplo, el nombre de la instancia de EC2 se almacena en el parámetro de Systems Manager /instance/name:.

Nota: Si utiliza Boto3 con un parámetro de tipo cadena, puede eliminar el 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.")

Referencia de un parámetro de tipo cadena en un documento de automatización de Systems Manager

Con los documentos de automatización de Systems Manager, puede utilizar la API aws:executeAwsApi para hacer referencia a un parámetro de Systems Manager.

En el siguiente ejemplo, el ID de la AMI se almacena en el parámetro de Systems Manager y se analiza como entrada para este documento de automatización. El valor del parámetro del paso 1 se transfiere como entrada al paso 2 para lanzar una instancia de EC2.

Nota: Si hace referencia a un parámetro SecureString, puede establecer el valor del campo WithDecryption en True. Sin embargo, la salida del paso de automatización getparameter muestra el valor descifrado del parámetro.


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

Referencia de un parámetro de tipo cadena en AWS CLI

Hacer referencia a los parámetros de Systems Manager en AWS CLI es similar a hacer referencia a los parámetros en los documentos de comandos. Puede hacer referencia a un parámetro de tipo cadena como ssm:parameter-name. Para garantizar la seguridad de los parámetros de cadena, primero debe descifrar el parámetro. A continuación, puede utilizar el parámetro en el comando de AWS CLI.

Para ver un ejemplo de cómo hacer referencia a un parámetro en AWS CLI, consulte Ejecutar un parámetro (AWS CLI).

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año