¿Cómo puedo hacer referencia a los parámetros de Systems Manager en los diferentes servicios de AWS?
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).
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año