

• El panel de AWS Systems Manager CloudWatch dejará de estar disponible después del 30 de abril de 2026. Los clientes pueden seguir utilizando la consola de Amazon CloudWatch para ver, crear y administrar sus paneles de Amazon CloudWatch, tal y como lo hacen actualmente. Para obtener más información, consulte la [documentación del panel de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

# Uso de `SendCommand` con un AWS SDK o la CLI
<a name="example_ssm_SendCommand_section"></a>

Los siguientes ejemplos de código muestran cómo utilizar `SendCommand`.

Los ejemplos de acciones son extractos de código de programas más grandes y deben ejecutarse en contexto. Puede ver esta acción en contexto en el siguiente ejemplo de código: 
+  [Conceptos básicos](example_ssm_Scenario_section.md) 

------
#### [ CLI ]

**AWS CLI**  
**Ejemplo 1: ejecución de un comando en una o más instancias remotas**  
En el siguiente ejemplo de `send-command` se ejecuta un comando `echo` en una instancia de destino.  

```
aws ssm send-command \
    --document-name {{"AWS-RunShellScript"}} \
    --parameters '{{commands=["echo HelloWorld"]}}' \
    --targets {{"Key=instanceids,Values=i-1234567890abcdef0"}} \
    --comment {{"echo HelloWorld"}}
```
Salida:  

```
{
    "Command": {
        "CommandId": "92853adf-ba41-4cd6-9a88-142d1EXAMPLE",
        "DocumentName": "AWS-RunShellScript",
        "DocumentVersion": "",
        "Comment": "echo HelloWorld",
        "ExpiresAfter": 1550181014.717,
        "Parameters": {
            "commands": [
                "echo HelloWorld"
            ]
        },
        "InstanceIds": [
            "i-0f00f008a2dcbefe2"
        ],
        "Targets": [],
        "RequestedDateTime": 1550173814.717,
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 1,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        }
    }
}
```
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 2: obtención de información sobre la IP de una instancia**  
En el siguiente ejemplo de `send-command` se obtiene información sobre la IP de una instancia.  

```
aws ssm send-command \
    --instance-ids {{"i-1234567890abcdef0"}} \
    --document-name {{"AWS-RunShellScript"}} \
    --comment {{"IP config"}} \
    --parameters {{"commands=ifconfig"}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 3: ejecución de un comando en instancias con etiquetas específicas**  
En el siguiente ejemplo de `send-command` se ejecuta un comando en instancias que tienen la clave de etiqueta “ENV” y el valor “Dev”.  

```
aws ssm send-command \
    --targets {{"Key=tag:ENV,Values=Dev"}} \
    --document-name {{"AWS-RunShellScript"}} \
    --parameters {{"commands=ifconfig"}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 4: ejecución de un comando que envía notificaciones de SNS**  
En el siguiente ejemplo de `send-command` se ejecuta un comando que envía notificaciones de SNS para todos los eventos de notificación y el tipo de notificación `Command`.  

```
aws ssm send-command \
    --instance-ids {{"i-1234567890abcdef0"}} \
    --document-name {{"AWS-RunShellScript"}} \
    --comment {{"IP config"}} \
    --parameters {{"commands=ifconfig"}} \
    --service-role-arn {{"arn:aws:iam::123456789012:role/SNS_Role"}} \
    --notification-config {{"NotificationArn=arn:aws:sns:us-east-1:123456789012:SNSTopicName,NotificationEvents=All,NotificationType=Command"}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 5: ejecución de un comando que genera un resultado en S3 y CloudWatch**  
En el siguiente ejemplo de `send-command` se ejecuta un comando que envía los detalles del comando a un bucket de S3 y a un grupo de registro de Registros de CloudWatch.  

```
aws ssm send-command \
    --instance-ids {{"i-1234567890abcdef0"}} \
    --document-name {{"AWS-RunShellScript"}} \
    --comment {{"IP config"}} \
    --parameters {{"commands=ifconfig"}} \
    --output-{{s3-bucket-name}} "s3-bucket-name" \
    --output-s3-key-prefix {{"runcommand"}} \
    --cloud-watch-output-config {{"CloudWatchOutputEnabled=true,CloudWatchLogGroupName=CWLGroupName"}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 6: ejecución de comandos en varias instancias con etiquetas diferentes**  
En el siguiente ejemplo de `send-command` se ejecuta un comando en instancias con dos claves y valores de etiqueta diferentes.  

```
aws ssm send-command \
    --document-name {{"AWS-RunPowerShellScript"}} \
    --parameters commands=["echo helloWorld"] \
    --targets {{Key=tag:Env,Values=Dev}} {{Key=tag:Role,Values=WebServers}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 7: definición de varias instancias como destino con la misma clave de etiqueta**  
En el siguiente ejemplo de `send-command` se ejecuta un comando en instancias que tienen la misma clave de etiqueta, pero con valores diferentes.  

```
aws ssm send-command \
    --document-name {{"AWS-RunPowerShellScript"}} \
    --parameters commands=["echo helloWorld"] \
    --targets {{Key=tag:Env,Values=Dev,Test}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Running Commands Using Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) en la *Guía del usuario de AWS Systems Manager*.  
**Ejemplo 8: ejecución de un comando que usa un documento compartido**  
En el siguiente ejemplo de `send-command` se ejecuta un documento compartido en una instancia de destino.  

```
aws ssm send-command \
    --document-name {{"arn:aws:ssm:us-east-1:123456789012:document/ExampleDocument"}} \
    --targets {{"Key=instanceids,Values=i-1234567890abcdef0"}}
```
Consulte el ejemplo 1 para ver una salida de muestra.  
Para obtener más información, consulte [Uso compartido de documentos de SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-using-shared.html) en la *Guía del usuario de AWS Systems Manager*.  
+  Para obtener información sobre la API, consulte [SendCommand](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ssm/send-command.html) en la *Referencia de comandos de la AWS CLI*. 

------
#### [ Java ]

**SDK para Java 2.x**  
 Hay más en GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/ssm#code-examples). 

```
    /**
     * Sends a SSM command to a managed node asynchronously.
     *
     * @param documentName The name of the document to use.
     * @param instanceId The ID of the instance to send the command to.
     * @return The command ID.
     * <p>
     * This method initiates asynchronous requests to send a SSM command to a managed node.
     * It waits until the document is active, sends the command, and checks the command execution status.
     */
    public String sendSSMCommand(String documentName, String instanceId) throws InterruptedException, SsmException {
        // Before we use Document to send a command - make sure it is active.
        CompletableFuture<Void> documentActiveFuture = CompletableFuture.runAsync(() -> {
            boolean isDocumentActive = false;
            DescribeDocumentRequest request = DescribeDocumentRequest.builder()
                    .name(documentName)
                    .build();

            while (!isDocumentActive) {
                CompletableFuture<DescribeDocumentResponse> response = getAsyncClient().describeDocument(request);
                String documentStatus = response.join().document().statusAsString();
                if (documentStatus.equals("Active")) {
                    System.out.println("The SSM document is active and ready to use.");
                    isDocumentActive = true;
                } else {
                    System.out.println("The SSM document is not active. Status: " + documentStatus);
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        });

        documentActiveFuture.join();

        // Create the SendCommandRequest.
        SendCommandRequest commandRequest = SendCommandRequest.builder()
                .documentName(documentName)
                .instanceIds(instanceId)
                .build();

        // Send the command.
        CompletableFuture<SendCommandResponse> commandFuture = getAsyncClient().sendCommand(commandRequest);
        final String[] commandId = {null};

        commandFuture.whenComplete((commandResponse, ex) -> {
            if (commandResponse != null) {
                commandId[0] = commandResponse.command().commandId();
                System.out.println("Command ID: " + commandId[0]);

                // Wait for the command execution to complete.
                GetCommandInvocationRequest invocationRequest = GetCommandInvocationRequest.builder()
                        .commandId(commandId[0])
                        .instanceId(instanceId)
                        .build();

                try {
                    System.out.println("Wait 5 secs");
                    TimeUnit.SECONDS.sleep(5);

                    // Retrieve the command execution details.
                    CompletableFuture<GetCommandInvocationResponse> invocationFuture = getAsyncClient().getCommandInvocation(invocationRequest);
                    invocationFuture.whenComplete((commandInvocationResponse, invocationEx) -> {
                        if (commandInvocationResponse != null) {
                            // Check the status of the command execution.
                            CommandInvocationStatus status = commandInvocationResponse.status();
                            if (status == CommandInvocationStatus.SUCCESS) {
                                System.out.println("Command execution successful");
                            } else {
                                System.out.println("Command execution failed. Status: " + status);
                            }
                        } else {
                            Throwable invocationCause = (invocationEx instanceof CompletionException) ? invocationEx.getCause() : invocationEx;
                            throw new CompletionException(invocationCause);
                        }
                    }).join();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            } else {
                Throwable cause = (ex instanceof CompletionException) ? ex.getCause() : ex;
                if (cause instanceof SsmException) {
                    throw (SsmException) cause;
                } else {
                    throw new RuntimeException(cause);
                }
            }
        }).join();

        return commandId[0];
    }
```
+  Para obtener información sobre la API, consulte [SendCommand](https://docs.aws.amazon.com/goto/SdkForJavaV2/ssm-2014-11-06/SendCommand) en la *Referencia de la API de AWS SDK for Java 2.x*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 Hay más en GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/ssm#code-examples). 

```
import { SendCommandCommand, SSMClient } from "@aws-sdk/client-ssm";
import { parseArgs } from "node:util";

/**
 * Send an SSM command to a managed node.
 * @param {{ documentName: string }}
 */
export const main = async ({ documentName }) => {
  const client = new SSMClient({});
  try {
    await client.send(
      new SendCommandCommand({
        DocumentName: documentName,
      }),
    );
    console.log("Command sent successfully.");
    return { Success: true };
  } catch (caught) {
    if (caught instanceof Error && caught.name === "ValidationError") {
      console.warn(`${caught.message}. Did you provide a valid document name?`);
    } else {
      throw caught;
    }
  }
};
```
+  Para obtener información sobre la API, consulte [SendCommand](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/ssm/command/SendCommandCommand) en la *Referencia de la API de AWS SDK para JavaScript*. 

------
#### [ PowerShell ]

**Herramientas para PowerShell V4**  
**Ejemplo 1: en este ejemplo se ejecuta un comando echo en una instancia de destino.**  

```
Send-SSMCommand -DocumentName "AWS-RunPowerShellScript" -Parameter @{commands = "echo helloWorld"} -Target @{Key="instanceids";Values=@("i-0cb2b964d3e14fd9f")}
```
**Salida:**  

```
CommandId          : d8d190fc-32c1-4d65-a0df-ff5ff3965524
Comment            : 
CompletedCount     : 0
DocumentName       : AWS-RunPowerShellScript
ErrorCount         : 0
ExpiresAfter       : 3/7/2017 10:48:37 PM
InstanceIds        : {}
MaxConcurrency     : 50
MaxErrors          : 0
NotificationConfig : Amazon.SimpleSystemsManagement.Model.NotificationConfig
OutputS3BucketName : 
OutputS3KeyPrefix  : 
OutputS3Region     : 
Parameters         : {[commands, Amazon.Runtime.Internal.Util.AlwaysSendList`1[System.String]]}
RequestedDateTime  : 3/7/2017 9:48:37 PM
ServiceRole        : 
Status             : Pending
StatusDetails      : Pending
TargetCount        : 0
Targets            : {instanceids}
```
**Ejemplo 2: en este ejemplo se muestra cómo ejecutar un comando que acepte parámetros anidados.**  

```
Send-SSMCommand -DocumentName "AWS-RunRemoteScript" -Parameter @{ sourceType="GitHub";sourceInfo='{"owner": "me","repository": "amazon-ssm","path": "Examples/Install-Win32OpenSSH"}'; "commandLine"=".\Install-Win32OpenSSH.ps1"} -InstanceId i-0cb2b964d3e14fd9f
```
+  Para obtener información sobre la API, consulte [SendCommand](https://docs.aws.amazon.com/powershell/v4/reference) en la *Referencia de Cmdlet de las Herramientas de AWS para PowerShell (V4)*. 

**Herramientas para PowerShell V5**  
**Ejemplo 1: en este ejemplo se ejecuta un comando echo en una instancia de destino.**  

```
Send-SSMCommand -DocumentName "AWS-RunPowerShellScript" -Parameter @{commands = "echo helloWorld"} -Target @{Key="instanceids";Values=@("i-0cb2b964d3e14fd9f")}
```
**Salida:**  

```
CommandId          : d8d190fc-32c1-4d65-a0df-ff5ff3965524
Comment            : 
CompletedCount     : 0
DocumentName       : AWS-RunPowerShellScript
ErrorCount         : 0
ExpiresAfter       : 3/7/2017 10:48:37 PM
InstanceIds        : {}
MaxConcurrency     : 50
MaxErrors          : 0
NotificationConfig : Amazon.SimpleSystemsManagement.Model.NotificationConfig
OutputS3BucketName : 
OutputS3KeyPrefix  : 
OutputS3Region     : 
Parameters         : {[commands, Amazon.Runtime.Internal.Util.AlwaysSendList`1[System.String]]}
RequestedDateTime  : 3/7/2017 9:48:37 PM
ServiceRole        : 
Status             : Pending
StatusDetails      : Pending
TargetCount        : 0
Targets            : {instanceids}
```
**Ejemplo 2: en este ejemplo se muestra cómo ejecutar un comando que acepte parámetros anidados.**  

```
Send-SSMCommand -DocumentName "AWS-RunRemoteScript" -Parameter @{ sourceType="GitHub";sourceInfo='{"owner": "me","repository": "amazon-ssm","path": "Examples/Install-Win32OpenSSH"}'; "commandLine"=".\Install-Win32OpenSSH.ps1"} -InstanceId i-0cb2b964d3e14fd9f
```
+  Para obtener información sobre la API, consulte [SendCommand](https://docs.aws.amazon.com/powershell/v5/reference) en la *Referencia de Cmdlet de las Herramientas de AWS para PowerShell (V5)*. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 Hay más en GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/ssm#code-examples). 

```
class DocumentWrapper:
    """Encapsulates AWS Systems Manager Document actions."""

    def __init__(self, ssm_client):
        """
        :param ssm_client: A Boto3 Systems Manager client.
        """
        self.ssm_client = ssm_client
        self.name = None

    @classmethod
    def from_client(cls):
        ssm_client = boto3.client("ssm")
        return cls(ssm_client)


    def send_command(self, instance_ids):
        """
        Sends a command to one or more instances.

        :param instance_ids: The IDs of the instances to send the command to.
        :return: The ID of the command.
        """
        try:
            response = self.ssm_client.send_command(
                InstanceIds=instance_ids, DocumentName=self.name, TimeoutSeconds=3600
            )
            return response["Command"]["CommandId"]
        except ClientError as err:
            logger.error(
                "Couldn't send command to %s. Here's why: %s: %s",
                self.name,
                err.response["Error"]["Code"],
                err.response["Error"]["Message"],
            )
            raise
```
+  Para obtener información sobre la API, consulte [SendCommand](https://docs.aws.amazon.com/goto/boto3/ssm-2014-11-06/SendCommand) en la *Referencia de la API de AWS SDK para Python (Boto3)*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 Hay más en GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el [Repositorio de ejemplos de código de AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/ssm#code-examples). 

```
    TRY.
        DATA(lo_result) = lo_ssm->sendcommand(
            it_instanceids = it_instance_ids
            iv_documentname = iv_document_name
            iv_timeoutseconds = 3600 ).
        DATA(lo_command) = lo_result->get_command( ).
        IF lo_command IS BOUND.
          rv_command_id = lo_command->get_commandid( ).
          MESSAGE 'Command sent successfully.' TYPE 'I'.
        ENDIF.
      CATCH /aws1/cx_ssminvaliddocument.
        MESSAGE 'Invalid document.' TYPE 'I'.
      CATCH /aws1/cx_ssminvalidinstanceid.
        MESSAGE 'Invalid instance ID.' TYPE 'I'.
    ENDTRY.
```
+  Para obtener información acerca de la APl, consulte [SendCommand](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) en la *Referencia de la API del SDK de AWS para SAP ABAP*. 

------

Para obtener una lista completa de las guías para desarrolladores de AWS SDK y ejemplos de código, consulte [Cómo utilizar este servicio con un AWS SDK](sdk-general-information-section.md). En este tema también se incluye información sobre cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.