

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.

# Aufrufen DAGs mit einer Lambda-Funktion
<a name="samples-lambda"></a>

Das folgende Codebeispiel verwendet eine [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)Funktion, um ein Apache Airflow-CLI-Token abzurufen und einen gerichteten azyklischen Graphen (DAG) in einer Amazon MWAA-Umgebung aufzurufen.

**Topics**
+ [Version](#samples-lambda-version)
+ [Voraussetzungen](#samples-lambda-prereqs)
+ [Berechtigungen](#samples-lambda-permissions)
+ [Abhängigkeiten](#samples-lambda-dependencies)
+ [Codebeispiel](#samples-lambda-code)

## Version
<a name="samples-lambda-version"></a>

[Sie können das Codebeispiel auf dieser Seite mit **Apache Airflow v2** in [Python 3.10](https://peps.python.org/pep-0619/) und **Apache Airflow v3** in Python 3.11 verwenden.](https://peps.python.org/pep-0664/)

## Voraussetzungen
<a name="samples-lambda-prereqs"></a>

Um dieses Codebeispiel zu verwenden, müssen Sie:
+ Verwenden Sie den [öffentlichen Netzwerkzugriffsmodus](configuring-networking.md#webserver-options-public-network-onconsole) für Ihre [Amazon MWAA-Umgebung](get-started.md).
+ Verwenden Sie eine [Lambda-Funktion](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), die die neueste Python-Laufzeit verwendet.

**Anmerkung**  
Wenn sich die Lambda-Funktion und Ihre Amazon MWAA-Umgebung in derselben VPC befinden, können Sie diesen Code in einem privaten Netzwerk verwenden. Für diese Konfiguration benötigt die Ausführungsrolle der Lambda-Funktion die Erlaubnis, den **CreateNetworkInterface** API-Vorgang Amazon Elastic Compute Cloud (Amazon EC2) aufzurufen. Sie können diese Berechtigung mithilfe der [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor) AWS-managed Policy erteilen.

## Berechtigungen
<a name="samples-lambda-permissions"></a>

Um das Codebeispiel auf dieser Seite verwenden zu können, benötigt die Ausführungsrolle Ihrer Amazon MWAA-Umgebung Zugriff, um die `airflow:CreateCliToken` Aktion auszuführen. Sie können diese Berechtigung mithilfe der Richtlinie `AmazonMWAAAirflowCliAccess` AWS-managed erteilen:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "airflow:CreateCliToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Weitere Informationen finden Sie unter [Apache Airflow CLI-Richtlinie: Amazon MWAAAirflow CliAccess](access-policies.md#cli-access).

## Abhängigkeiten
<a name="samples-lambda-dependencies"></a>

Um dieses Codebeispiel mit Apache Airflow v2 und höher zu verwenden, sind keine zusätzlichen Abhängigkeiten erforderlich. Wird verwendet [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images), um Apache Airflow zu installieren.

## Codebeispiel
<a name="samples-lambda-code"></a>

1. Öffnen Sie die AWS Lambda Konsole unter. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Wählen Sie Ihre Lambda-Funktion aus der **Funktionsliste** aus.

1. Kopieren Sie auf der Funktionsseite den folgenden Code und ersetzen Sie ihn durch die Namen Ihrer Ressourcen:
   + `YOUR_ENVIRONMENT_NAME`— Der Name Ihrer Amazon MWAA-Umgebung.
   + `YOUR_DAG_NAME`— Der Name der DAG, die Sie aufrufen möchten.

   ```
   import boto3
   import http.client
   import base64
   import ast
   mwaa_env_name = 'YOUR_ENVIRONMENT_NAME'
   dag_name = 'YOUR_DAG_NAME'
   mwaa_cli_command = 'dags trigger'
   ​
   client = boto3.client('mwaa')
   ​
   def lambda_handler(event, context):
       # get web token
       mwaa_cli_token = client.create_cli_token(
           Name=mwaa_env_name
       )
       
       conn = http.client.HTTPSConnection(mwaa_cli_token['WebServerHostname'])
       payload = mwaa_cli_command + " " + dag_name
       headers = {
         'Authorization': 'Bearer ' + mwaa_cli_token['CliToken'],
         'Content-Type': 'text/plain'
       }
       conn.request("POST", "/aws_mwaa/cli", payload, headers)
       res = conn.getresponse()
       data = res.read()
       dict_str = data.decode("UTF-8")
       mydata = ast.literal_eval(dict_str)
       return base64.b64decode(mydata['stdout'])
   ```

1. Wählen Sie **Bereitstellen**.

1. Wählen Sie **Test**, um Ihre Funktion mit der Lambda-Konsole aufzurufen.

1. Um zu überprüfen, ob Ihr Lambda Ihre DAG erfolgreich aufgerufen hat, verwenden Sie die Amazon MWAA-Konsole, um zur Apache Airflow Airflow-Benutzeroberfläche Ihrer Umgebung zu navigieren, und gehen Sie dann wie folgt vor:

   1. Suchen Sie auf der **DAGs**Seite Ihre neue Ziel-DAG in der Liste von. DAGs

   1. Überprüfen Sie unter **Letzte Ausführung** den Zeitstempel für die letzte DAG-Ausführung. Dieser Zeitstempel sollte genau mit dem letzten Zeitstempel für Ihre andere `invoke_dag` Umgebung übereinstimmen.

   1. Überprüfen Sie unter **Letzte Aufgaben**, ob die letzte Ausführung erfolgreich war.