

• Das AWS Systems Manager CloudWatch Dashboard wird nach dem 30. April 2026 nicht mehr verfügbar sein. Kunden können weiterhin die CloudWatch Amazon-Konsole verwenden, um ihre CloudWatch Amazon-Dashboards anzusehen, zu erstellen und zu verwalten, so wie sie es heute tun. Weitere Informationen finden Sie in der [Amazon CloudWatch Dashboard-Dokumentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# `aws:executeScript` - Führen Sie ein Skript aus
<a name="automation-action-executeScript"></a>

Führt das bereitgestellte Python- oder PowerShell Skript mit der angegebenen Laufzeit und dem angegebenen Handler aus. Jede `aws:executeScript`-Aktion kann bis zu einer maximalen Dauer von 600 Sekunden (10 Minuten) laufen. Sie können die Zeitüberschreitung über den Parameter `timeoutSeconds` für einen `aws:executeScript`-Schritt limitieren.

Verwenden Sie Rückgabe-Anweisungen in Ihrer Funktion, um Ihrer Ausgabenutzlast Ausgaben hinzuzufügen. Für Beispiele zum Definieren von Ausgaben für Ihre `aws:executeScript`-Aktion, siehe [Beispiel 2: Skriptbasiertes Runbook](automation-authoring-runbooks-scripted-example.md). Sie können auch die Ausgabe von `aws:executeScript` Aktionen in Ihren Runbooks an die von Ihnen angegebene Amazon CloudWatch Logs-Protokollgruppe senden. Weitere Informationen finden Sie unter [Ausgabe von Automatisierungsaktionen mit CloudWatch Protokollen protokollieren](automation-action-logging.md).

Wenn Sie die Ausgabe von `aws:executeScript` Aktionen an CloudWatch Logs senden möchten oder wenn die Skripts, die Sie für `aws:executeScript` Aktionen angeben, AWS API-Operationen aufrufen, ist für die Ausführung des Runbooks immer eine AWS Identity and Access Management (IAM-) Service-Rolle (oder Übernahme einer Rolle) erforderlich.

**Anmerkung**  
Die Aktion `aws:executeScript` unterstützt die automatische Drosselungswiederholung nicht. Wenn Ihr Skript AWS API-Aufrufe durchführt, die möglicherweise gedrosselt werden, müssen Sie Ihre eigene Wiederholungslogik in Ihren Skriptcode implementieren.

Die `aws:executeScript` Aktion enthält die folgenden PowerShell vorinstallierten Core-Module:
+ Microsoft. PowerShell. Gastgeber
+ Microsoft. PowerShell. Verwaltung
+ Microsoft. PowerShell. Sicherheit
+ Microsoft. PowerShell. Hilfsprogramm
+ PackageManagement
+ PowerShellGet

Um PowerShell Core-Module zu verwenden, die nicht vorinstalliert sind, muss Ihr Skript das Modul mit der `-Force` Markierung installieren, wie im folgenden Befehl gezeigt. Das `AWSPowerShell.NetCore`-Modul wird nicht unterstützt. *ModuleName*Ersetzen Sie es durch das Modul, das Sie installieren möchten.

```
Install-Module ModuleName -Force
```

Um PowerShell Core-Cmdlets in Ihrem Skript zu verwenden, empfehlen wir die Verwendung der `AWS.Tools` Module, wie in den folgenden Befehlen gezeigt. Ersetzen Sie jeden *example resource placeholder* durch Ihre Informationen.
+ Amazon S3 Cmdlets.

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

  ```
  Install-Module AWS.Tools.EC2 -Force
  Get-EC2InstanceStatus -InstanceId instance-id
  ```
+ Allgemeine oder dienstunabhängige AWS Tools for Windows PowerShell Cmdlets.

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

Wenn Ihr Skript zusätzlich zur Verwendung von PowerShell Core-Cmdlets neue Objekte initialisiert, müssen Sie das Modul auch importieren, wie im folgenden Befehl gezeigt.

```
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
```

Beispiele für die Installation und den Import von `AWS.Tools` Modulen und die Verwendung von PowerShell Core-Cmdlets in Runbooks finden Sie unter. [Visuelle Designerfahrung für Automation-Runbooks](automation-visual-designer.md)

**Input**  
Geben Sie die zum Ausführen Ihres Skripts erforderlichen Informationen an. Ersetzen Sie jeden *example resource placeholder* durch Ihre Informationen.

**Anmerkung**  
Der Anhang für ein Python-Skript kann eine .py-Datei oder eine .zip-Datei sein, die das Skript enthält. PowerShell Skripten müssen in ZIP-Dateien gespeichert werden.

------
#### [ 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"
    }
}
```

------

Laufzeit  
Die Laufzeitsprache, die für die Ausführung des bereitgestellten Skripts verwendet werden soll. `aws:executeScript`unterstützt die Laufzeiten in der folgenden Tabelle.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/systems-manager/latest/userguide/automation-action-executeScript.html)
Typ: Zeichenfolge  
Erforderlich: Ja  
Für Python-Laufzeiten bietet die Umgebung 512 MB Arbeitsspeicher und 512 MB Speicherplatz. Für PowerShell Laufzeiten stellt die Umgebung 1024 MB Arbeitsspeicher und 512 MB Festplattenspeicher zur Verfügung.

Handler  
Der Name Ihrer Funktion. Sie müssen sicherstellen, dass die im Handler definierte Funktion über zwei Parameter verfügt: `events` und `context`. Die PowerShell Laufzeit unterstützt diesen Parameter nicht.  
Typ: Zeichenfolge  
Erforderlich: Ja (Python) \$1 Nicht unterstützt (PowerShell)

InputPayload  
Ein JSON- oder YAML-Objekt, das an den ersten Parameter des Handlers übergeben wird. Dies kann verwendet werden, um Eingabedaten an das Skript zu übergeben.  
Typ: Zeichenfolge  
Erforderlich: Nein  

```
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.11"
        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": "ExamplePython"
            }
            print(f"Adding tag {tag} to instance id {instanceId}")
            ec2.create_tags(
                Resources=[instanceId],
                Tags=[tag]
            )
            return tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

```
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
    isEnd: true
    inputs:
      Runtime: PowerShell 7.4
      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 = "ExamplePowerShell"

        Write-Information "Adding tag key: $($tag.Key) and value: $($tag.Value) to instance id $($input.instanceId)"
        New-EC2Tag -Resource $input.instanceId -Tag $tag

        return $tag
    outputs:
      - Type: String
        Name: TagKey
        Selector: $.Payload.Key
outputs:
  - tagInstance.TagKey
```

Script  
Ein eingebettetes Skript, das während der Automatisierung ausgeführt werden soll.  
Typ: Zeichenfolge  
Erforderlich: Nein (Python) \$1 Ja (PowerShell)

Attachment  
Der Name einer eigenständigen Skriptdatei oder einer ZIP-Datei, die von der Aktion aufgerufen werden kann. Geben Sie denselben Wert wie den `Name` der Dokument-Anhangsdatei an, den Sie im Anforderungsparameter `Attachments` angeben. Weitere Informationen finden Sie unter [Anhänge](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_CreateDocument.html#systemsmanager-CreateDocument-request-Attachments) in der *API-Referenz für AWS Systems Manager *. Wenn Sie ein Skript mithilfe einer Anlage bereitstellen, müssen Sie auch einen `files`-Abschnitt in den Elementen der obersten Ebene Ihres Runbooks definieren. Weitere Informationen finden Sie unter [Schema der Version 0.3](documents-schemas-features.md#automation-doc-syntax-examples).  
Um eine Datei für Python aufzurufen, verwenden Sie das `filename.method_name`-Format in `Handler`.   
Der Anhang für ein Python-Skript kann eine .py-Datei oder eine .zip-Datei sein, die das Skript enthält. PowerShell Skripten müssen in ZIP-Dateien gespeichert werden.
Wenn Sie Python-Bibliotheken in Ihren Anhang einfügen, empfehlen wir, eine leere `__init__.py`-Datei in jedem Modulverzeichnis hinzuzufügen. Auf diese Weise können Sie die Module aus der Bibliothek in Ihrem Anhang innerhalb Ihres Skriptinhalts importieren. Beispiel: `from library import module`  
Typ: Zeichenfolge  
Erforderlich: NeinAusgabe

Nutzlast  
Die JSON-Darstellung des Objekts, das von Ihrer Funktion zurückgegeben wird. Bis zu 100 KB werden zurückgegeben. Wenn Sie eine Liste ausgeben, werden maximal 100 Elemente zurückgegeben.

## Verwenden von Anhängen mit aws:executeScript
<a name="automation-action-executeScript-attachments"></a>

Anhänge bieten eine leistungsstarke Möglichkeit, komplexe Skripts, mehrere Module und externe Abhängigkeiten zu verpacken und für `aws:executeScript`-Aktionen wiederzuverwenden. Sie können Anhänge in folgenden Fällen verwenden:
+ Packen Sie mehrere Python-Module oder PowerShell -Skripte zusammen.
+ Wiederverwenden derselben Skriptlogik in mehreren Runbooks
+ Einfügen externer Bibliotheken oder Abhängigkeiten in Skripts
+ Runbook-Definition übersichtlich halten, indem Sie Elemente komplexer Skriptlogik trennen
+ Freigeben von Skriptpaketen für Teams oder Automatisierungs-Workflows

### Struktur und Verpackung von Anhängen
<a name="automation-action-executeScript-attachment-structure"></a>

Sie können einzelne Dateien oder ZIP-Pakete mit mehreren Dateien anhängen. Die Struktur hängt von Ihrem Anwendungsfall ab:

**Einzelne Dateianhänge**  
Bei einfachen Skripten können Sie eine einzelne `.py` Datei (Python) oder eine `.zip` Datei, die ein einzelnes PowerShell Skript enthält, anhängen.

**Pakete mit mehreren Modulen**  
Für komplexe Automatisierungen, die mehrere Module erfordern, erstellen Sie ein ZIP-Paket mit der folgenden empfohlenen Struktur:

```
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
```

**Wichtig**  
Für Python-Pakete müssen Sie in jedes Verzeichnis, das Python-Module enthält, eine leere `__init__.py`-Datei einfügen. Dadurch können Sie Module mit einer standardmäßigen Python-Importsyntax importieren, z. B. `from utils import helper_functions`.

**PowerShell Struktur des Pakets**  
PowerShell Anlagen müssen in ZIP-Dateien mit der folgenden Struktur gepackt werden:

```
my-powershell-package.zip
├── Main.ps1                  # Entry point script
├── Modules/
│   ├── HelperFunctions.ps1   # Utility functions
│   └── AWSOperations.ps1     # AWS-specific operations
└── Config/
    └── Settings.ps1          # Configuration settings
```

### Erstellen von Runbooks mit Anhängen
<a name="automation-action-executeScript-attachment-workflow"></a>

Gehen Sie wie folgt vor, um Runbooks zu erstellen, die Anhänge verwenden:

1. **Anhang in Amazon S3 hochladen**

   Laden Sie Ihre Skriptdatei oder Ihr ZIP-Paket in einen S3-Bucket hoch, auf den Ihre Automatisierungsrolle Zugriff hat. Notieren Sie den S3-URI für den nächsten Schritt.

   ```
   aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
   ```

1. **Prüfsumme des Anhangs berechnen**

   Berechnen Sie die SHA-256-Prüfsumme Ihrer Anhangsdatei zur Sicherheitsüberprüfung:

   ```
   # Linux/macOS
   shasum -a 256 my-automation-package.zip
   
   # Windows PowerShell
   Get-FileHash -Algorithm SHA256 my-automation-package.zip
   ```

1. **Dateibereich im Runbook definieren**

   Fügen Sie auf der obersten Ebene Ihres Runbooks einen `files`-Abschnitt hinzu, der auf Ihren Anhang verweist:

   ```
   files:
     my-automation-package.zip:
       checksums:
         sha256: "your-calculated-checksum-here"
   ```

1. **Im executeScript-Schritt auf den Anhang verweisen**

   Verwenden Sie den Parameter `Attachment`, um auf die hochgeladene Datei zu verweisen:

   ```
   - name: runMyScript
     action: aws:executeScript
     inputs:
       Runtime: python3.11
       Handler: main.process_data
       Attachment: my-automation-package.zip
       InputPayload:
         inputData: "{{InputParameter}}"
   ```

## Beispiele für aws:executeScript-Anhänge
<a name="automation-action-executeScript-examples"></a>

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, Anhänge mit der Aktion `aws:executeScript` zu verwenden.

### Beispiel 1: einzelner Dateianhang
<a name="automation-action-executeScript-single-file-example"></a>

In diesem Beispiel wird eine einzelne Python-Datei als Anhang verwendet, um EC2-Instance-Daten zu verarbeiten.

**Anhangsdatei: process\$1instance.py**  
Erstellen Sie eine Python-Datei mit folgendem Inhalt:

```
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
```

**Vollständiges Runbook**  
Hier ist das vollständige Runbook, das den einzelnen Dateianhang verwendet:

```
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:
    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
```

### Beispiel 2: Paket mit mehreren Modulen
<a name="automation-action-executeScript-multi-module-example"></a>

In diesem Beispiel wird ein ZIP-Paket, das mehrere Python-Module enthält, für komplexe S3-Bucket-Vorgänge verwendet.

**Paketstruktur**  
Erstellen Sie ein ZIP-Paket mit der folgenden Struktur:

```
s3-operations.zip
├── main.py
├── utils/
│   ├── __init__.py
│   ├── s3_helper.py
│   └── validation.py
└── config/
    ├── __init__.py
    └── settings.py
```

**main.py (Eintrittspunkt)**  
Das Hauptskript, das die Vorgänge orchestriert:

```
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
```

## Fehlerbehebung bei aws:executeScript-Anhängen
<a name="automation-action-executeScript-troubleshooting"></a>

Beachten Sie die folgenden Informationen, um häufig auftretende Probleme mit `aws:executeScript`-Anhängen zu lösen:

**Modulimportfehler**  
Wenn Sie bei Paketen mit mehreren Modulen Importfehler erhalten:
+ Stellen Sie sicher, dass jedes Verzeichnis mit Python-Modulen eine leere `__init__.py`-Datei enthält.
+ Prüfen Sie, ob Ihre Importanweisungen der tatsächlichen Datei- und Verzeichnisstruktur im ZIP-Paket entsprechen.
+ Verwenden Sie konsistent relative Importe (z. B. `from .utils import helper`) oder absolute Importe (z. B. `from utils import helper`).

**Anhang kann nicht gefunden werden**  
Wenn Ihre Automatisierung den Anhang nicht finden kann:
+ Stellen Sie sicher, dass der `Attachment`-Parameterwert dem Schlüssel in Ihrem `files`-Abschnitt entspricht.
+ Vergewissern Sie sich, dass Ihr S3-Bucket-Pfad und Ihr Dateiname im `files`-Abschnitt korrekt sind.
+ Prüfen Sie, ob Ihre Automatisierungsrolle die Berechtigung `s3:GetObject` für den S3-Speicherort des Anhangs hat.
+ Stellen Sie sicher, dass die Prüfsumme in Ihrem Runbook mit der tatsächlichen Dateiprüfsumme übereinstimmt.

**Handler-Funktionsfehler**  
Wenn Fehler im Zusammenhang mit dem Handler auftreten:
+ Für Python: Verwenden Sie das Format `filename.function_name` im `Handler`-Parameter (z. B. `main.process_data`).
+ Sorgen Sie dafür, dass Ihre Handler-Funktion genau zwei Parameter akzeptiert: `events` und `context`.
+ Für PowerShell: Geben Sie keinen `Handler` Parameter an; das Skript wird direkt ausgeführt.

**Fehler bei der Skriptausführung**  
Wenn Ihr Skript während der Ausführung fehlschlägt:
+ Im Ausführungsverlauf der Automatisierung finden Sie detaillierte Fehlermeldungen und Stack-Traces.
+ Verwenden Sie `print()` Anweisungen (Python) oder `Write-Information` (PowerShell), um Debugging-Ausgaben hinzuzufügen.
+ Stellen Sie sicher, dass Ihrer Automatisierungsrolle alle erforderlichen AWS Berechtigungen erteilt wurden.
+ Testen Sie Ihre Skriptlogik lokal, bevor Sie sie als Anlage verpacken.

**Beendigungscodes und Fehlerbehandlung**  
Gehen Sie wie folgt vor, um Fehler zu bearbeiten und Beendigungscodes zurückzugeben:
+ In Python: Verwenden Sie `raise Exception("error message")`, um auf einen Skriptfehler hinzuweisen.
+ In PowerShell: Verwenden Sie `throw "error message"` oder`Write-Error`, um auf einen Fehler hinzuweisen.
+ Geben Sie strukturierte Daten aus Ihren Funktionen zurück, um detaillierte success/failure Informationen bereitzustellen.
+ Verwenden Sie try-catch-Blöcke, um Ausnahmen ordnungsgemäß zu bearbeiten und aussagekräftige Fehlermeldungen bereitzustellen.