aws:executeScript: ejecutar un script - AWS Systems Manager

aws:executeScript: ejecutar un script

importante

A partir del 4 de diciembre de 2024, no se podrán crear ni actualizar manuales de procedimientos que usen la acción aws:executeScript con los tiempos de ejecución de Python 3.6, 3.7 o 3.8. A partir del 18 de febrero de 2025, no se podrán ejecutar manuales de procedimientos que usen la acción aws:executeScript con los tiempos de ejecución de Python 3.6, 3.7 o 3.8. Recomendamos actualizar los manuales de procedimientos que utilizan la acción aws:executeScript con los tiempos de ejecución de Python a Python 3.11 antes del 4 de diciembre de 2024.

Ejecuta el script Python o PowerShell proporcionado mediante el uso del tiempo de ejecución y el controlador especificados. Cada acción aws:executeScript puede ejecutarse hasta un máximo de 600 segundos (10 minutos). Puede limitar el tiempo de espera mediante la especificación del parámetro timeoutSeconds para un paso aws:executeScript.

Utilice instrucciones de devolución en la función para agregar salidas a la carga útil de salida. Para ver ejemplos sobre cómo definir salidas para la acción aws:executeScript, consulte Ejemplo 2: manual de procedimientos con scripts. También puede enviar la salida de acciones aws:executeScript de los manuales de procedimientos al grupo de registros de Amazon CloudWatch Logs que especifique. Para obtener más información, consulte Registro de salida de acción de Automation con CloudWatch Logs.

Si desea enviar la salida desde acciones aws:executeScript a los Registros de CloudWatch o si los scripts que especifica para la llamada de acciones aws:executeScript las operaciones de la API de AWS, siempre se requiere un rol de servicio de AWS Identity and Access Management (IAM) (o asumir un rol) para ejecutar el manual de procedimientos.

La acción aws:executeScript contiene los siguientes módulos de PowerShell Core preinstalados:

  • Microsoft.PowerShell.Host

  • Microsoft.PowerShell.Management

  • Microsoft.PowerShell.Security

  • Microsoft.PowerShell.Utility

  • PackageManagement

  • PowerShellGet

Para utilizar módulos de PowerShell Core que no estén preinstalados, el script debe instalar el módulo con la marca -Force, como se muestra en el siguiente comando. No se admite el módulo AWSPowerShell.NetCore. Reemplace ModuleName con el módulo que desee instalar.

Install-Module ModuleName -Force

Para utilizar cmdlets de PowerShell Core en el script, se recomienda utilizar los módulos de AWS.Tools, como se muestra en los siguientes comandos. Reemplace cada example resource placeholder con su propia información.

  • Cmdlets de Amazon S3

    Install-Module AWS.Tools.S3 -Force Get-S3Bucket -BucketName amzn-s3-demo-bucket
  • Cmdlets de Amazon EC2

    Install-Module AWS.Tools.EC2 -Force Get-EC2InstanceStatus -InstanceId instance-id
  • Cmdlets de AWS Tools for Windows PowerShell comunes o independientes del servicio

    Install-Module AWS.Tools.Common -Force Get-AWSRegion

Si el script inicializa nuevos objetos además de usar cmdlets de PowerShell Core, también debe importar el módulo como se muestra en el siguiente comando.

Install-Module AWS.Tools.EC2 -Force Import-Module AWS.Tools.EC2 $tag = New-Object Amazon.EC2.Model.Tag $tag.Key = "Tag" $tag.Value = "TagValue" New-EC2Tag -Resource i-02573cafcfEXAMPLE -Tag $tag

Para obtener ejemplos de instalación e importación de módulos de AWS.Tools, y de uso de cmdlets de PowerShell Core en los manuales de procedimientos, consulte Uso del Generador de documentos para crear un manual de procedimientos.

Entrada

Proporcione la información necesaria para ejecutar el script. Reemplace cada example resource placeholder con su propia información.

nota

El archivo adjunto de un script de Python puede ser un archivo .py o uno .zip que contenga el script. Los scripts de PowerShell deben almacenarse en archivos .zip.

YAML
action: "aws:executeScript" inputs: Runtime: runtime Handler: "functionName" InputPayload: scriptInput: '{{parameterValue}}' Script: |- def functionName(events, context): ... Attachment: "scriptAttachment.zip"
JSON
{ "action": "aws:executeScript", "inputs": { "Runtime": "runtime", "Handler": "functionName", "InputPayload": { "scriptInput": "{{parameterValue}}" }, "Attachment": "scriptAttachment.zip" } }
Tiempo de ejecución

Lenguaje de tiempo de ejecución que se utilizará para ejecutar el script proporcionado. aws:executeScript admite scripts de Python 3.7 (python3.7), Python 3.8 (python3.8), Python 3.9 (python3.9), Python 3.10 (python3.10), Python 3.11 (python3.11), PowerShell Core 6.0 (dotnetcore2.1) y PowerShell 7.0 (dotnetcore3.1).

Valores admitidos: python3.7 | python3.8 | python3.9 | python3.10 | python3.11 | PowerShell Core 6.0 | PowerShell 7.0

Tipo: cadena

Obligatorio: sí

Controlador

Nombre de la función. Debe asegurarse de que la función definida en el controlador tenga dos parámetros, events y context. El tiempo de ejecución de PowerShell no admite este parámetro.

Tipo: cadena

Requerido: Sí (Python) | No admitido (PowerShell)

InputPayload

Un objeto JSON o YAML que se pasará al primer parámetro del controlador. Se puede usar para pasar los datos de entrada al script.

Tipo: cadena

Requerido: no

Python
description: Tag an instance schemaVersion: '0.3' assumeRole: '{{AutomationAssumeRole}}' parameters: AutomationAssumeRole: type: String description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.' InstanceId: type: String description: (Required) The ID of the EC2 instance you want to tag. mainSteps: - name: tagInstance action: 'aws:executeScript' inputs: Runtime: "python3.8" Handler: tagInstance InputPayload: instanceId: '{{InstanceId}}' Script: |- def tagInstance(events,context): import boto3 #Initialize client ec2 = boto3.client('ec2') instanceId = events['instanceId'] tag = { "Key": "Env", "Value": "Example" } ec2.create_tags( Resources=[instanceId], Tags=[tag] )
PowerShell
description: Tag an instance schemaVersion: '0.3' assumeRole: '{{AutomationAssumeRole}}' parameters: AutomationAssumeRole: type: String description: '(Required) The Amazon Resource Name (ARN) of the IAM role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to operate this runbook.' InstanceId: type: String description: (Required) The ID of the EC2 instance you want to tag. mainSteps: - name: tagInstance action: 'aws:executeScript' inputs: Runtime: PowerShell 7.0 InputPayload: instanceId: '{{InstanceId}}' Script: |- Install-Module AWS.Tools.EC2 -Force Import-Module AWS.Tools.EC2 $input = $env:InputPayload | ConvertFrom-Json $tag = New-Object Amazon.EC2.Model.Tag $tag.Key = "Env" $tag.Value = "Example" New-EC2Tag -Resource $input.instanceId -Tag $tag
Script

Un script insertado que desea ejecutar durante la automatización.

Tipo: cadena

Requerido: No (Python) | Sí (PowerShell)

Conexión

Nombre de un archivo de script independiente o archivo .zip que puede invocarse mediante la acción. Especifique el mismo valor que el Name del archivo adjunto de documento que especifique en el parámetro de solicitud Attachments. Para obtener más información, consulte Archivos adjuntos en la referencia de la API de AWS Systems Manager. Si proporciona un script mediante un archivo adjunto, también debe definir una sección files en los elementos de nivel superior del manual de procedimientos. Para obtener más información, consulte Versión de esquema 0.3.

Si desea invocar un archivo para Python, use el formato filename.method_name en Handler.

nota

El archivo adjunto de un script de Python puede ser un archivo .py o uno .zip que contenga el script. Los scripts de PowerShell deben almacenarse en archivos .zip.

Al incluir bibliotecas de Python en su archivo adjunto, recomendamos que agregue un archivo __init__.py vacío en cada directorio del módulo. Esto le permite importar los módulos desde la biblioteca del archivo adjunto dentro del contenido de su script. Por ejemplo: from library import module

Tipo: cadena

Requerido: no

Salida
Carga

La representación JSON del objeto devuelta por su función. Se devuelven hasta 100 KB. Si genera una lista, incluirá un máximo de 100 elementos.