Ejecución de comandos a escala - AWS Systems Manager

Ejecución de comandos a escala

Puede utilizar Run Command, una capacidad de AWS Systems Manager, para ejecutar comandos en una flota de nodos administrados mediante targets. El parámetro targets acepta una combinación de Key,Value basada en las etiquetas que haya especificado en los nodos administrados. Al ejecutar el comando, el sistema localiza e intenta ejecutar dicho comando en todos los nodos administrados que coinciden con las etiquetas especificadas. Para obtener más información sobre el etiquetado de instancias administradas consulte, Etiquetado de recursos de AWS en la Guía del usuario de Etiquetado de recursos de AWS. Para obtener más información acerca del etiquetado de dispositivos IoT administrados, consulte Etiquetado de recursos de AWS IoT Greengrass Version 2 en la Guía para desarrolladores de AWS IoT Greengrass Version 2.

También puede utilizar el parámetro targets para dirigirse a una lista de ID de nodos administrados específicos, tal y como se describe en la sección siguiente.

Para controlar la forma en que los comandos ejecutan cientos o miles de nodos administrados, Run Command también incluye parámetros con el fin de restringir cuántos nodos puede procesar una solicitud simultáneamente y qué cantidad de errores puede generar un comando antes de finalizar.

Indicar destino de varios nodos administrados

Puede ejecutar un comando y dirigirse a nodos administrados especificando etiquetas, nombres de grupos de recursos de AWS o ID de nodos administrados.

En los siguientes ejemplos, se muestra el formato de comandos cuando se utiliza Run Command desde la AWS Command Line Interface (AWS CLI ). Reemplace cada example resource placeholder con su propia información. Los ejemplos de comandos de esta sección se truncan con [...].

Ejemplo 1: dirigirse a etiquetas

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:tag-name,Values=tag-value \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:tag-name,Values=tag-value ^ [...]

Ejemplo 2: dirigirse a un grupo de recursos de AWS por nombre

Puede especificar un máximo de un nombre de grupo de recursos por comando. Al crear un grupo de recursos, le recomendamos que incluya AWS::SSM:ManagedInstance y AWS::EC2::Instance como tipos de recursos en sus criterios de creación de grupo.

nota

Con el fin de enviar comandos que tengan como destino un grupo de recursos, debe haber recibido los permisos de AWS Identity and Access Management (IAM) para mostrar o ver los recursos que pertenecen a ese grupo. Para obtener más información, consulte la sección Configuración de permisos en la Guía del usuario de AWS Resource Groups.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:Name,Values=resource-group-name \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:Name,Values=resource-group-name ^ [...]

Ejemplo 3: dirigirse a un grupo de recursos de AWS por tipo de recurso

Puede especificar un máximo de cinco tipos de grupos de recursos por comando. Al crear un grupo de recursos, le recomendamos que incluya AWS::SSM:ManagedInstance y AWS::EC2::Instance como tipos de recursos en sus criterios de creación de grupo.

nota

Con el fin de enviar comandos que tienen como destino un grupo de recursos, se le deben haber concedido los permisos de IAM para mostrar o ver los recursos que pertenecen a ese grupo. Para obtener más información, consulte la sección Configuración de permisos en la Guía del usuario de AWS Resource Groups.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 ^ [...]

Ejemplo 4: dirigirse a ID de instancias

En los siguientes ejemplos, se muestra cómo dirigirse a nodos administrados mediante la clave de instanceids con el parámetro targets. Puede utilizar esta clave para dirigirse a dispositivos de núcleo de AWS IoT Greengrass administrados porque a cada dispositivo se le asigna un mi-Id_number. Puede ver los ID de dispositivo en Fleet Manager, una capacidad de AWS Systems Manager.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 ^ [...]

Si ha etiquetado nodos administrados para diferentes entornos utilizando Environment para Key, y Development, Test, Pre-production y Production para Values, entonces podría enviar un comando a todos los nodos administrados que se encuentren en uno de estos entornos utilizando el parámetro targets con la siguiente sintaxis.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development ^ [...]

Podría dirigirse a nodos administrados adicionales en otros entornos agregando elementos a la lista Values. Separe los elementos mediante comas.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development,Test,Pre-production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development,Test,Pre-production ^ [...]

Variación: refinado de los destinos con varios criterios Key

Puede refinar el número de destinos para el comando incluyendo varios criterios Key. Si incluye más de un criterio de Key, el sistema se dirige a los nodos administrados que cumplen todos los criterios. El siguiente comando se dirige a todos los nodos administrados etiquetados para el Departamento de Finanzas y etiquetados para el rol de servidor de base de datos.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database ^ [...]

Variación : uso de varios criterios Key y Value

Profundizando en el ejemplo anterior, puede dirigirse a varios departamentos y diversas roles de servidor mediante la inclusión de elementos adicionales en el criterio Values.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^ [...]

Variación: dirigirse a nodos administrados etiquetados mediante varios criterios de Values

Si etiquetó nodos administrados para diferentes entornos utilizando una Key denominada Department y Values de Sales y Finance, podría enviar un comando a todos los nodos administrados de estos entornos mediante el uso del parámetro targets con la siguiente sintaxis.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Sales,Finance \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Sales,Finance ^ [...]

Puede especificar un máximo de cinco claves y cinco valores para cada clave.

Si una clave de etiqueta (el nombre de la etiqueta) o un valor de etiqueta incluye espacios, deberá encerrar la clave de etiqueta o el valor entre comillas, como se muestra en los siguientes ejemplos.

Ejemplo: espacios en la etiqueta Value

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:OS,Values="Windows Server 2016" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:OS,Values="Windows Server 2016" ^ [...]

Ejemplo: espacios en la clave y Value de una tag

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key="tag:Operating System",Values="Windows Server 2016" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key="tag:Operating System",Values="Windows Server 2016" ^ [...]

Ejemplo: espacios en un elemento de una lista de Values

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" ^ [...]

Uso de controles de velocidad

Puede controlar la velocidad a la que se envían los comandos a los nodos administrados de un grupo mediante controles de simultaneidad y controles de error.

Uso de controles de simultaneidad

Puede controlar el número de nodos administrados que ejecutan el comando al mismo tiempo mediante el parámetro max-concurrency (las opciones de Concurrency [Simultaneidad] de la página Run a command [Ejecutar un comando]). Puede especificar un número absoluto de nodos administrados, por ejemplo, 10, o un porcentaje del destino definido, por ejemplo, 10%. El sistema de colas entrega el comando a un único nodo y espera hasta que el sistema confirme la invocación inicial antes de enviar el comando a dos nodos más. El sistema envía comandos de forma exponencial a más nodos hasta que alcanza el valor de max-concurrency. El valor predeterminado del valor de max-concurrency es 50. Los siguientes ejemplos le muestran cómo especificar valores para el parámetro max-concurrency.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --max-concurrency 10 \ --targets Key=tag:Environment,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-concurrency 10% \ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 10 ^ --targets Key=tag:Environment,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 10% ^ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^ [...]

Uso de controles de error

También puede controlar la ejecución de un comando para cientos o miles de nodos administrado al configurar un límite de error mediante los parámetros max-errors (el campo Error threshold [Umbral de error] de la página Run a command [Ejecutar un comando]). El parámetro especifica la cantidad de errores que están permitidos antes de que el sistema detenga el envío del comando a nodos administrados adicionales. Puede especificar un número absoluto de errores, por ejemplo, 10, o un porcentaje del destino definido, por ejemplo, 10%. Si especifica 3, por ejemplo, el sistema dejará de enviar el comando cuando se reciba el cuarto error. Si especifica 0, el sistema dejará de enviar el comando a otros nodos administrados tras el primer resultado de error que se devuelva. Si envía un comando a 50 nodos administrados y configura max-errors en un 10%, el sistema dejará de enviar el comando a otros nodos cuando se reciba el sexto error.

Las invocaciones que ya están ejecutando un comando cuando se alcanza el max-errors tienen permiso para completarse, pero algunas de estas invocaciones también pueden producir errores. Si necesita asegurarse de que no habrá más de max-errors invocaciones erróneas, establezca max-concurrency en 1, de modo que las invocaciones continuarán de una en una. El valor predeterminado para max-errors es 0. Los siguientes ejemplos le muestran cómo especificar valores para el parámetro max-errors.

Linux & macOS
aws ssm send-command \ --document-name document-name \ --max-errors 10 \ --targets Key=tag:Database,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-errors 10% \ --targets Key=tag:Environment,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-concurrency 1 \ --max-errors 1 \ --targets Key=tag:Environment,Values=Production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --max-errors 10 ^ --targets Key=tag:Database,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-errors 10% ^ --targets Key=tag:Environment,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 1 ^ --max-errors 1 ^ --targets Key=tag:Environment,Values=Production ^ [...]