Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
aws:executeScript
- Exécuter un script
Exécute le Python ou le PowerShell script fourni à l'aide du runtime et du gestionnaire spécifiés. Chaque action aws:executeScript
peut être exécutée jusqu'à une durée maximale de 600 secondes (10 minutes). Vous pouvez limiter le délai d'attente en spécifiant le paramètre timeoutSeconds
pour une étape aws:executeScript
.
Utilisez les instructions de retour dans votre fonction pour ajouter des sorties à votre charge utile de sortie. Pour des exemples de définition de sorties pour votre action aws:executeScript
, consultez Exemple 2 : runbook scripté. Vous pouvez également envoyer le résultat des aws:executeScript
actions de vos runbooks vers le groupe de CloudWatch journaux Amazon Logs que vous spécifiez. Pour de plus amples informations, veuillez consulter Résultat de l'action d'automatisation de la CloudWatch journalisation avec journaux.
Si vous souhaitez envoyer le résultat des aws:executeScript
actions vers CloudWatch Logs, ou si les scripts que vous spécifiez pour les aws:executeScript
actions appellent des opérations d' AWS API, un rôle de service AWS Identity and Access Management (IAM) (ou un rôle assumé) est toujours requis pour exécuter le runbook.
L'aws:executeScript
action contient les modules PowerShell Core préinstallés suivants :
-
Microsoft. PowerShell.Hôte
-
Microsoft. PowerShell. Gestion
-
Microsoft. PowerShell.Sécurité
-
Microsoft. PowerShell.Utilitaire
-
PackageManagement
-
PowerShellGet
Pour utiliser des modules PowerShell Core qui ne sont pas préinstallés, votre script doit installer le module avec l'-Force
indicateur, comme indiqué dans la commande suivante. Le module AWSPowerShell.NetCore
n'est pas pris en charge. ModuleName
Remplacez-le par le module que vous souhaitez installer.
Install-Module
ModuleName
-Force
Pour utiliser les applets de commande PowerShell Core dans votre script, nous vous recommandons d'utiliser les AWS.Tools
modules, comme indiqué dans les commandes suivantes. Remplacez chaque example resource placeholder
par vos propres informations.
-
cmdlets Amazon S3.
Install-Module AWS.Tools.S3 -Force Get-S3Bucket -BucketName
amzn-s3-demo-bucket
-
EC2 Applets de commande Amazon.
Install-Module AWS.Tools.EC2 -Force Get-EC2InstanceStatus -InstanceId
instance-id
-
Applets de AWS Tools for Windows PowerShell commande communs ou indépendants du service.
Install-Module AWS.Tools.Common -Force Get-AWSRegion
Si votre script initialise de nouveaux objets en plus d'utiliser les applets de commande PowerShell Core, vous devez également importer le module comme indiqué dans la commande suivante.
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
Pour des exemples d'installation et d'importation de AWS.Tools
modules, ainsi que d'utilisation d'applets de commande PowerShell Core dans des runbooks, consultez. Expérience de conception visuelle pour les runbooks d’Automatisation
Entrée
Fournissez les informations requises pour exécuter votre script. Remplacez chaque example resource placeholder
par vos propres informations.
Note
La pièce jointe d'un script Python peut être un fichier .py ou .zip contenant le script. PowerShell les scripts doivent être stockés dans des fichiers .zip.
- Environnement d’exécution
-
Langage d'exécution à utiliser pour exécuter le script fourni.
aws:executeScript
prend en charge les scripts Python 3.7 (python3.7
python3.8
), Python 3.8 (python3.9
), Python 3.9 (python3.10
) Python 3.10 (), Python 3.11 (python3.11
) PowerShell Core 6.0 (dotnetcore2.1
), PowerShell 7.0 (dotnetcore3.1
) et PowerShell 7.4 (dotnet8
).Valeurs prises en charge :
python3.7
python3.8
|python3.9
|python3.10
|python3.11
|PowerShell Core 6.0
|PowerShell 7.0
|PowerShell 7.4
Type : String
Obligatoire : oui
Note
Pour les environnements d'exécution Python, l'environnement fournit 512 Mo de mémoire et 512 Mo d'espace disque. Pour les environnements PowerShell d'exécution, l'environnement fournit 1024 Mo de mémoire et 512 Mo d'espace disque.
- Handler (Gestionnaire)
-
Le nom de votre fonction. Vous devez vous assurer que la fonction définie dans le gestionnaire possède deux paramètres,
events
etcontext
. Le PowerShell moteur d'exécution ne prend pas en charge ce paramètre.Type : String
Obligatoire : Oui (Python) | Non pris en charge (PowerShell)
- InputPayload
-
Objet JSON ou YAML qui sera transmis au premier paramètre du gestionnaire. Il peut être utilisé pour transmettre des données d'entrée au script.
Type : chaîne
Obligatoire : non
- Script
-
Script incorporé que vous souhaitez exécuter pendant l'automatisation.
Type : String
Obligatoire : Non (Python) | Oui (PowerShell)
- Réseau de transit par passerelle
-
Nom d'un fichier de script autonome ou .zip pouvant être appelé par l'action. Indiquez la même valeur que le
Name
du fichier de pièce jointe du document que vous indiquez dans le paramètre de requêteAttachments
. Pour plus d'informations, consultez Pièces jointes dans AWS Systems Manager la référence API . Le fournissement d'un script à l'aide d'une pièce jointe nécessite également la définition d'une sectionfiles
dans les éléments de niveau supérieur de votre runbook. Pour de plus amples informations, veuillez consulter Version de schéma 0.3.Pour appeler un fichier pour Python, utilisez le format
filename.method_name
dansHandler
.Note
La pièce jointe d'un script Python peut être un fichier .py ou .zip contenant le script. PowerShell les scripts doivent être stockés dans des fichiers .zip.
Lorsque vous incluez des bibliothèques Python dans votre pièce jointe, nous vous recommandons d'ajouter un fichier
__init__.py
vide dans chaque répertoire de module. Cela vous permet d'importer les modules de la bibliothèque de votre pièce jointe dans le contenu de votre script. Par exemple :from library import module
Type : chaîne
Obligatoire : non
Sortie
- Charge utile
-
Représentation JSON de l'objet renvoyé par votre fonction. Jusqu'à 100 Ko sont renvoyés. La génération d'une liste permet le renvoi d'un maximum de 100 éléments.
Utilisation de pièces jointes avec AWS:ExecuteScript
Les pièces jointes constituent un moyen puissant d'empaqueter et de réutiliser des scripts complexes, des modules multiples et des dépendances externes dans le cadre de vos aws:executeScript
actions. Utilisez des pièces jointes lorsque vous devez :
-
Package de plusieurs modules ou PowerShell scripts Python ensemble.
-
Réutilisez la même logique de script sur plusieurs runbooks.
-
Incluez des bibliothèques ou des dépendances externes dans vos scripts.
-
Gardez la définition de votre runbook propre en séparant les logiques de script complexes.
-
Partagez des packages de scripts entre équipes ou des flux de travail d'automatisation.
Structure de fixation et emballage
Vous pouvez joindre des fichiers uniques ou des packages zip contenant plusieurs fichiers. La structure dépend de votre cas d'utilisation :
Pièces jointes à un seul fichier
Pour les scripts simples, vous pouvez joindre un seul .py
fichier (Python) ou un .zip
fichier contenant un seul PowerShell script.
Packages multimodules
Pour une automatisation complexe nécessitant plusieurs modules, créez un package zip avec la structure recommandée suivante :
my-automation-package.zip ├── main.py # Entry point script ├── utils/ │ ├── __init__.py # Required for Python module imports │ ├── helper_functions.py # Utility functions │ └── aws_operations.py # AWS-specific operations ├── config/ │ ├── __init__.py │ └── settings.py # Configuration settings └── requirements.txt # Optional: document dependencies
Important
Pour les packages Python, vous devez inclure un __init__.py
fichier vide dans chaque répertoire contenant des modules Python. Cela vous permet d'importer des modules en utilisant la syntaxe d'importation standard de Python, telle quefrom utils import helper_functions
.
PowerShell structure du package
PowerShell les pièces jointes doivent être regroupées dans des fichiers zip dont la structure est la suivante :
my-powershell-package.zip ├── Main.ps1 # Entry point script ├── Modules/ │ ├── HelperFunctions.ps1 # Utility functions │ └── AWSOperations.ps1 # AWS-specific operations └── Config/ └── Settings.ps1 # Configuration settings
Création de runbooks avec pièces jointes
Pour créer des runbooks utilisant des pièces jointes, procédez comme suit :
-
Téléchargez votre pièce jointe sur Amazon S3
Téléchargez votre fichier de script ou votre package zip dans un compartiment S3 auquel votre rôle d'automatisation peut accéder. Notez l'URI S3 à utiliser à l'étape suivante.
aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
-
Calculer la somme de contrôle de la pièce jointe
Calculez la somme de contrôle SHA-256 de votre fichier joint pour la vérification de sécurité :
# Linux/macOS shasum -a 256 my-automation-package.zip # Windows PowerShell Get-FileHash -Algorithm SHA256 my-automation-package.zip
-
Définissez la section des fichiers dans votre runbook
Ajoutez une
files
section au niveau supérieur de votre runbook pour référencer votre pièce jointe :files: my-automation-package.zip: sourceType: "S3" sourceInfo: path: "s3://my-automation-bucket/scripts/my-automation-package.zip" checksums: sha256: "your-calculated-checksum-here"
-
Référencez la pièce jointe dans votre étape ExecuteScript
Utilisez le
Attachment
paramètre pour référencer le fichier que vous avez chargé :- name: runMyScript action: aws:executeScript inputs: Runtime: python3.11 Handler: main.process_data Attachment: my-automation-package.zip InputPayload: inputData: "{{InputParameter}}"
AWS:Exemples de pièces jointes ExecuteScript
Les exemples suivants illustrent les différentes manières d'utiliser les pièces jointes avec l'aws:executeScript
action.
Exemple 1 : pièce jointe à un seul fichier
Cet exemple montre comment utiliser un seul fichier Python comme pièce jointe pour traiter les données d'une EC2 instance.
Fichier joint : process_instance.py
Créez un fichier Python avec le contenu suivant :
import boto3 import json def process_instance_data(events, context): """Process EC2 instance data and return formatted results.""" try: instance_id = events.get('instanceId') if not instance_id: raise ValueError("instanceId is required") ec2 = boto3.client('ec2') # Get instance details response = ec2.describe_instances(InstanceIds=[instance_id]) instance = response['Reservations'][0]['Instances'][0] # Format the response result = { 'instanceId': instance_id, 'instanceType': instance['InstanceType'], 'state': instance['State']['Name'], 'availabilityZone': instance['Placement']['AvailabilityZone'], 'tags': {tag['Key']: tag['Value'] for tag in instance.get('Tags', [])} } print(f"Successfully processed instance {instance_id}") return result except Exception as e: print(f"Error processing instance: {str(e)}") raise
Runbook complet
Voici le runbook complet qui utilise la pièce jointe unique :
description: Process EC2 instance data using single file attachment schemaVersion: '0.3' assumeRole: '{{AutomationAssumeRole}}' parameters: AutomationAssumeRole: type: String description: (Required) IAM role for automation execution InstanceId: type: String description: (Required) EC2 instance ID to process files: process_instance.py: sourceType: "S3" sourceInfo: path: "s3://my-automation-bucket/scripts/process_instance.py" checksums: sha256: "abc123def456..." mainSteps: - name: processInstance action: aws:executeScript inputs: Runtime: python3.11 Handler: process_instance.process_instance_data Attachment: process_instance.py InputPayload: instanceId: '{{InstanceId}}' outputs: - Type: StringMap Name: InstanceData Selector: $.Payload outputs: - processInstance.InstanceData
Exemple 2 : package multimodule
Cet exemple illustre l'utilisation d'un package zip contenant plusieurs modules Python pour des opérations de compartiment S3 complexes.
Structure du package
Créez un package zip avec la structure suivante :
s3-operations.zip ├── main.py ├── utils/ │ ├── __init__.py │ ├── s3_helper.py │ └── validation.py └── config/ ├── __init__.py └── settings.py
main.py (point d'entrée)
Le script principal qui orchestre les opérations :
from utils.s3_helper import S3Operations from utils.validation import validate_bucket_name from config.settings import get_default_settings def cleanup_s3_bucket(events, context): """Clean up S3 bucket based on specified criteria.""" try: bucket_name = events.get('bucketName') max_age_days = events.get('maxAgeDays', 30) # Validate inputs if not validate_bucket_name(bucket_name): raise ValueError(f"Invalid bucket name: {bucket_name}") # Initialize S3 operations s3_ops = S3Operations() settings = get_default_settings() # Perform cleanup deleted_objects = s3_ops.delete_old_objects( bucket_name, max_age_days, settings['dry_run'] ) result = { 'bucketName': bucket_name, 'deletedCount': len(deleted_objects), 'deletedObjects': deleted_objects[:10], # Return first 10 for brevity 'dryRun': settings['dry_run'] } print(f"Cleanup completed for bucket {bucket_name}") return result except Exception as e: print(f"Error during S3 cleanup: {str(e)}") raise
Résolution des problèmes liés à AWS : ExecuteScript
Suivez les instructions suivantes pour résoudre les problèmes courants liés aux aws:executeScript
pièces jointes :
Erreurs d'importation du module
Si vous recevez des erreurs d'importation lors de l'utilisation de packages multimodules :
-
Assurez-vous d'avoir inclus un
__init__.py
fichier vide dans chaque répertoire contenant des modules Python. -
Vérifiez que vos instructions d'importation correspondent à la structure réelle du fichier et du répertoire de votre package zip.
-
Utilisez les importations relatives (par exemple
from .utils import helper
) ou les importations absolues (par exemple,from utils import helper
) de manière cohérente.
Erreurs relatives à la pièce jointe non trouvée
Si votre système automatique ne trouve pas la pièce jointe :
-
Vérifiez que la valeur du
Attachment
paramètre correspond exactement à la clé de votrefiles
section. -
Vérifiez que le chemin de votre compartiment S3 et le nom de fichier sont corrects dans la
files
section. -
Assurez-vous que votre rôle d'automatisation est
s3:GetObject
autorisé à accéder à l'emplacement S3 de la pièce jointe. -
Vérifiez que le checksum de votre runbook correspond au checksum réel du fichier.
Erreurs de fonction du gestionnaire
Si vous recevez des erreurs liées au gestionnaire :
-
Pour Python : utilisez le format
filename.function_name
dans leHandler
paramètre (par exemple,main.process_data
). -
Assurez-vous que votre fonction de gestionnaire accepte exactement deux paramètres :
events
etcontext
. -
Pour PowerShell : ne spécifiez aucun
Handler
paramètre ; le script s'exécute directement.
Échec de l'exécution du script
Si votre script échoue lors de son exécution :
-
Consultez l'historique d'exécution de l'automatisation pour obtenir des messages d'erreur détaillés et des traces de pile.
-
Utilisez
print()
les instructions (Python) ouWrite-Information
(PowerShell) pour ajouter une sortie de débogage. -
Vérifiez que toutes les AWS autorisations requises sont accordées à votre rôle d'automatisation.
-
Testez la logique de votre script localement avant de l'empaqueter sous forme de pièce jointe.
Codes de sortie et gestion des erreurs
Pour gérer correctement les erreurs et renvoyer les codes de sortie :
-
En Python :
raise Exception("error message")
à utiliser pour indiquer l'échec du script. -
Dans PowerShell : utilisez
throw "error message"
ouWrite-Error
pour indiquer une défaillance. -
Retournez des données structurées à partir de vos fonctions pour fournir des success/failure informations détaillées.
-
Utilisez les blocs try-catch pour gérer les exceptions avec élégance et fournir des messages d'erreur significatifs.