Ejecución de scripts desde Amazon S3 - AWS Systems Manager

Ejecución de scripts desde Amazon S3

En esta sección, se describe cómo descargar y ejecutar scripts desde Amazon Simple Storage Service (Amazon S3). El siguiente tema incluye información y terminología relacionadas a Amazon S3. Para obtener más información sobre Amazon S3, consulte ¿Qué es Amazon S3?. Puede ejecutar diversos tipos de scripts, incluidos los cuadernos de trabajos de Ansible, Python, Ruby, Shell y PowerShell.

También puede descargar un directorio en el que se incluyen varios scripts. Cuando ejecuta el script principal en el directorio, AWS Systems Manager también ejecuta los scripts a los que se hace referencia y se incluyen en el directorio.

Tenga en cuenta los siguientes detalles importantes acerca de la ejecución de scripts desde Amazon S3:

  • Systems Manager no comprueba que el script pueda ejecutarse en un nodo. Antes de descargar y ejecutar el script, verifique que el software necesario esté instalado en el nodo. O bien, puede crear un documento compuesto que instale el software mediante Run Command o State Manager, capacidades de AWS Systems Manager, y que luego descargue y ejecute el script.

  • Compruebe que su usuario, rol o grupo tenga los permisos de AWS Identity and Access Management (IAM) que se necesitan para la lectura del bucket de S3.

  • Asegúrese de que el perfil de instancias de las instancias de Amazon Elastic Compute Cloud (Amazon EC2) tenga los permisos s3:ListBucket y s3:GetObject. Si el perfil de instancia no tiene estos permisos, el sistema no puede descargar el script del bucket de S3. Para obtener más información, consulte Uso de perfiles de instancias en la Guía del usuario de IAM.

Ejecutar scripts de shell desde Amazon S3

La siguiente información incluye procedimientos que sirven de ayuda para ejecutar scripts desde Amazon Simple Storage Service (Amazon S3) utilizando la consola de AWS Systems Manager o la AWS Command Line Interface (AWS CLI). Aunque en los ejemplos se utilizan scripts de shell, se pueden sustituir por otros tipos de scripts.

Ejecutar un script de shell desde Amazon S3 (consola)

Ejecutar un script de shell desde Amazon S3
  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 Command), elija AWS-RunRemoteScript.

  5. En Command parameters haga lo siguiente:

    • En Source Type, seleccione S3.

    • En el cuadro de texto Source Info (Información de la fuente), ingrese la información requerida para acceder a la fuente, con el siguiente formato. Reemplace cada example resource placeholder con su propia información.

      nota

      Sustituya https://s3.aws-api-domain por la URL de su bucket. Puede copiar la URL de su bucket en Amazon S3 en la pestaña Objects (Objetos).

      {"path":"https://s3.aws-api-domain/path to script"}

      A continuación, se muestra un ejemplo.

      {"path":"https://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/scripts/shell/helloWorld.sh"}
    • En el campo Command Line (Línea de comandos), ingrese los parámetros para la ejecución de scripts. A continuación se muestra un ejemplo.

      helloWorld.sh argument-1 argument-2
    • (Opcional) En el campo Working Directory (Directorio de trabajo), ingrese el nombre de un directorio del nodo en el que desee descargar y ejecutar el script.

    • (Opcional) En Execution Timeout, especifique el número de segundos que esperará el sistema antes de fallar en la ejecución del comando de script.

  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.

Ejecutar un script de shell desde Amazon S3 (línea de comandos)

  1. Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).

    Para obtener más información, consulte Instalación o actualización de la última versión de la AWS CLI.

  2. Ejecute el siguiente comando de la . Reemplace cada example resource placeholder con su propia información.

    nota

    Sustituya https://s3.aws-api-domain por la URL de su bucket. Puede copiar la URL de su bucket en Amazon S3 en la pestaña Objects (Objetos).

    Linux & macOS
    aws ssm send-command \ --document-name "AWS-RunRemoteScript" \ --output-s3-bucket-name "bucket-name" \ --output-s3-key-prefix "key-prefix" \ --targets "Key=InstanceIds,Values=instance-id" \ --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/script path\"}"],"commandLine":["script name and arguments"]}'
    Windows
    aws ssm send-command ^ --document-name "AWS-RunRemoteScript" ^ --output-s3-bucket-name "bucket-name" ^ --output-s3-key-prefix "key-prefix" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --parameters "sourceType"="S3",sourceInfo='{\"path\":\"https://s3.aws-api-domain/script path\"}',"commandLine"="script name and arguments"
    PowerShell
    Send-SSMCommand ` -DocumentName "AWS-RunRemoteScript" ` -OutputS3BucketName "bucket-name" ` -OutputS3KeyPrefix "key-prefix" ` -Target @{Key="InstanceIds";Values=@("instance-id")} ` -Parameter @{ sourceType="S3";sourceInfo='{"path": "https://s3.aws-api-domain/script path"}',; "commandLine"="script name and arguments"}