Trabajo con parámetros con el uso de comandos Run Command - AWS Systems Manager

Trabajo con parámetros con el uso de comandos Run Command

Puede trabajar con parámetros en Run Command, una capacidad de AWS Systems Manager. Para obtener más información, consulte AWS Systems Manager Run Command.

Ejecutar un parámetro String (consola)

El siguiente procedimiento presenta el proceso de ejecución de un comando que utiliza un parámetro String.

Para ejecutar un parámetro de cadena mediante Parameter Store
  1. Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/.

  2. En el panel de navegación, elija Run Command.

  3. Elija Run command (Ejecutar comando).

  4. En la lista Command document (Documento de comandos), elija AWS-RunPowerShellScript (Windows) o AWS-RunShellScript (Linux).

  5. En Command parameters (Parámetros de comando), introduzca echo {{ssm:parameter-name}}. Por ejemplo: echo {{ssm:/Test/helloWorld}}.

  6. En la sección Targets (Destinos), para elegir los nodos administrados en los que desea ejecutar esta operación, especifique las etiquetas, seleccione las instancias o los dispositivos de borde manualmente o especifique un grupo de recursos.

    sugerencia

    Si un nodo administrado que espera ver no aparece en la lista, consulte Solución de problemas de disponibilidad de nodos administrados para obtener consejos de solución de problemas.

  7. En Otros parámetros:

    • En Comentario, ingrese la información acerca de este comando.

    • En Tiempo de espera (segundos), especifique el número de segundos que tiene que esperar el sistema antes de indicar que se ha producido un error en la ejecución del comando general.

  8. En Rate control (Control de velocidad):

    • En Concurrency (Simultaneidad), especifique un número o un porcentaje de los nodos administrados en los que desea ejecutar el comando al mismo tiempo.

      nota

      Si seleccionó los destinos mediante la especificación de etiquetas aplicadas a nodos administrados o de grupos de recursos de AWS y no está seguro de cuántos nodos administrados tienen destino, limite el número de destinos que puede ejecutar el documento al mismo tiempo. Para ello, especifique un porcentaje.

    • En Error threshold (Umbral de errores), especifique cuándo desea parar la ejecución del comando en los demás nodos administrados después de que haya fallado en un número o un porcentaje de los nodos. Por ejemplo, si especifica tres errores, Systems Manager dejará de enviar el comando cuando se reciba el cuarto error. Los nodos administrados que estén procesando el comando todavía pueden enviar errores.

  9. (Opcional) En Opciones de salida, para guardar la salida del comando en un archivo, seleccione el cuadro Write command output to an S3 bucket. Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.

    nota

    Los permisos de S3 que conceden la capacidad de escribir datos en un bucket de S3 son los del perfil de instancia (para instancias de EC2) o rol de servicio de IAM (máquinas activadas de manera híbrida) asignados a la instancia, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte Configuración de permisos de instancia requeridos para Systems Manager o Creación de un rol de servicio de IAM para un entorno híbrido. Además, si el bucket de S3 especificado se encuentra en una Cuenta de AWS diferente, asegúrese de que el perfil de instancias o el rol de servicio de IAM asociado al nodo administrado tenga los permisos necesarios para escribir en ese bucket.

  10. En la sección Notificaciones de SNS, seleccione la casilla de verificación Habilitar notificaciones de SNS si desea recibir notificaciones sobre el estado de ejecución de los comandos.

    Para obtener más información acerca de la configuración de las notificaciones de Amazon SNS para Run Command, consulte Monitoreo de los cambios de estado de Systems Manager mediante las notificaciones de Amazon SNS.

  11. Elija Ejecutar.

  12. En la página Command ID (ID de comando), en el área Targets and outputs (Destinos y salidas), seleccione el botón junto al ID de un nodo donde ejecutó el comando y, a continuación, elija View output (Ver salida). Compruebe que el resultado del comando sea el valor proporcionado para el parámetro, como This is my first parameter.

Ejecutar un parámetro (AWS CLI)

Ejemplo 1: Comando simple

El siguiente comando de ejemplo incluye un parámetro de Systems Manager denominado DNS-IP. El valor de este parámetro es simplemente la dirección IP de un nodo. En este ejemplo se utiliza un comando de AWS Command Line Interface (AWS CLI) para reflejar el valor del parámetro.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters "commands='echo {{ssm:DNS-IP}}'" \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands='echo {{ssm:DNS-IP}}'" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

El comando devuelve información similar a la siguiente.

{
    "Command": {
        "CommandId": "c70a4671-8098-42da-b885-89716EXAMPLE",
        "DocumentName": "AWS-RunShellScript",
        "DocumentVersion": "1",
        "Comment": "",
        "ExpiresAfter": "2023-12-26T15:19:17.771000-05:00",
        "Parameters": {
            "commands": [
                "echo {{ssm:DNS-IP}}"
            ]
        },
        "InstanceIds": [],
        "Targets": [
            {
                "Key": "instanceids",
                "Values": [
                    "i-02573cafcfEXAMPLE"
                ]
            }
        ],
        "RequestedDateTime": "2023-12-26T14:09:17.771000-05:00",
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3Region": "us-east-2",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 0,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        },
        "TimeoutSeconds": 600,
        "AlarmConfiguration": {
            "IgnorePollAlarmFailure": false,
            "Alarms": []
        },
        "TriggeredAlarms": []
    }
}

Una vez finalizada la ejecución de un comando, podrá ver más información sobre él mediante los siguientes comandos:

Ejemplo 2: Descifrar el valor del parámetro SecureString

El siguiente comando de ejemplo utiliza un SecureString parámetro denominado SecurePassword. El comando utilizado en el campo parameters recupera y descifra el valor del parámetro SecureString y, a continuación, restablece la contraseña de administrador local sin tener que transferir la contraseña en texto sin cifrar.

Linux
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters '{"commands":["secure=$(aws ssm get-parameters --names SecurePassword --with-decryption --query Parameters[0].Value --output text --region us-east-2)","echo $secure | passwd myuser --stdin"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

Ejemplo 3: Hacer referencia a un parámetro en un documento SSM

También puede hacer referencia a los parámetros de Systems Manager en la sección Parameters (Parámetros) de un documento de SSM, tal y como se muestra en el siguiente ejemplo.

{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:parameter-name}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand": "{{commands}}" } } ] }

No confunda la sintaxis similar para los parámetros locales utilizados en la sección runtimeConfig de documentos de SSM con parámetros de Parameter Store. Un parámetro local no es lo mismo que un parámetro de Systems Manager. Puede diferenciar los parámetros locales de los parámetros de Systems Manager por la ausencia del prefijo ssm:.

"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"
nota

Los documentos de SSM no admiten referencias a los parámetros de SecureString. Esto significa que, para utilizar los parámetros SecureString con, por ejemplo, Run Command, tendrá que recuperar el valor de parámetro antes de pasarlo a Run Command, tal y como se muestra en los siguientes ejemplos.

Linux & macOS
value=$(aws ssm get-parameters --names parameter-name --with-decryption)
aws ssm send-command \ --name AWS-JoinDomain \ --parameters password=$value \ --instance-id instance-id
Windows
aws ssm send-command ^ --name AWS-JoinDomain ^ --parameters password=$value ^ --instance-id instance-id
Powershell
$secure = (Get-SSMParameterValue -Names parameter-name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user-name,$secure