

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 einer Lambda-Funktion mit einer nativen Aurora MySQL-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda"></a>

**Anmerkung**  
Sie können die nativen Funktionen `lambda_sync` und `lambda_async` aufrufen, wenn Sie Aurora MySQL Version 2 oder Aurora MySQL Version 3.01 und höher verwenden. Weitere Informationen zu den Aurora MySQL-Versionen erhalten Sie unter [Datenbank-Engine-Updates für Amazon Aurora MySQLLTS-Versionen (Long-Term-Support, Langzeit-Support) und Betaversionen für Amazon Aurora MySQL](AuroraMySQL.Updates.md).

Sie können eine AWS Lambda Funktion aus einem Aurora MySQL-DB-Cluster aufrufen, indem Sie die nativen Funktionen `lambda_sync` und `lambda_async` aufrufen. Dieser Ansatz kann nützlich sein, wenn Sie Ihre Datenbank, die auf Aurora MySQL läuft, in andere AWS Dienste integrieren möchten. Beispielsweise soll jedes Mal, wenn eine Zeile in eine bestimmte Tabelle der Datenbank eingefügt wird, eine Benachrichtigung mit Amazon Simple Notification Service (Amazon SNS) gesendet werden.

**Contents**
+ [Arbeiten mit nativen Funktionen zum Aufrufen einer Lambda-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions)
  + [Gewähren der Rolle in Aurora MySQL Version 3](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3)
  + [Gewähren der Berechtigung in Aurora MySQL Version 2](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2)
  + [Syntax für die lambda\$1sync-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax)
  + [Parameter für die lambda\$1sync-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters)
  + [Beispiel für die lambda\$1sync-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example)
  + [Syntax für die lambda\$1async-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax)
  + [Parameter für die lambda\$1async-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters)
  + [Beispiel für die lambda\$1async-Funktion](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example)
  + [Aufrufen einer Lambda-Funktion innerhalb eines Auslösers](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger)

## Arbeiten mit nativen Funktionen zum Aufrufen einer Lambda-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions"></a>

Die Funktionen `lambda_sync` und `lambda_async` sind eingebaute, native Funktionen, die eine Lambda-Funktion synchron oder asynchron aufrufen. Wenn Sie das Ergebnis der Ausführung der aufgerufenen Lambda-Funktion kennen müssen, bevor Sie zu einer anderen Aktion übergehen, verwenden Sie die synchrone Funktion `lambda_sync`. Wenn Sie das Ergebnis der Ausführung der aufgerufenen Lambda-Funktion nicht kennen müssen, bevor Sie zu einer anderen Aktion übergehen, verwenden Sie die asynchrone Funktion `lambda_async`.

### Gewähren der Rolle in Aurora MySQL Version 3
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3"></a>

In Aurora MySQL Version 3 muss dem Benutzer, der eine native Funktion aufruft, die `AWS_LAMBDA_ACCESS`-Rolle gewährt werden. Um einem Benutzer diese Rolle zuzuweisen, stellen Sie als Administrator eine Verbindung zur DB-Instance her und führen Sie die folgende Anweisung aus.

```
GRANT AWS_LAMBDA_ACCESS TO user@domain-or-ip-address
```

Sie können diese Rolle widerrufen, indem Sie die folgende Anweisung ausführen.

```
REVOKE AWS_LAMBDA_ACCESS FROM user@domain-or-ip-address
```

**Tipp**  
Wenn Sie die Rollentechnik in Aurora MySQL Version 3 verwenden, können Sie die Rolle auch mit der Anweisung `SET ROLE role_name` oder `SET ROLE ALL` aktivieren. Wenn Sie mit dem MySQL 8.0-Rollensystem nicht vertraut sind, finden Sie in [Rollenbasiertes Berechtigungsmodell](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model) weitere Informationen. Weitere Informationen finden Sie unter [Verwenden von Rollen](https://dev.mysql.com/doc/refman/8.0/en/roles.html) im *MySQL-Referenzhandbuch*.  
Dies gilt nur für die aktuelle aktive Sitzung. Wenn Sie sich wieder verbinden, müssen Sie die `SET ROLE`-Anweisung noch einmal ausführen, um Berechtigungen zu gewähren. Weitere Informationen finden Sie unter [SET ROLE-Anweisung](https://dev.mysql.com/doc/refman/8.0/en/set-role.html) im *MySQL-Referenzhandbuch*.  
Sie können den DB-Cluster-Parameter `activate_all_roles_on_login` zum automatischen Aktivieren aller Rollen verwenden, wenn ein Benutzer eine Verbindung mit einer DB-Instance herstellt. Wenn dieser Parameter festgelegt ist, müssen Sie die `SET ROLE`-Anweisung in der Regel nicht explizit aufrufen, um eine Rolle zu aktivieren. Weitere Informationen finden Sie unter [activate\$1all\$1roles\$1on\$1login](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login) im *MySQL-Referenzhandbuch*.  
Sie müssen jedoch `SET ROLE ALL` zu Beginn einer gespeicherten Prozedur explizit aufrufen, um die Rolle zu aktivieren, wenn die gespeicherte Prozedur von einem anderen Benutzer aufgerufen wird.

Wenn Sie beim Versuch, eine Lambda-Funktion aufzurufen, eine Fehlermeldung wie die folgende erhalten, führen Sie eine `SET ROLE`-Anweisung aus.

```
SQL Error [1227] [42000]: Access denied; you need (at least one of) the Invoke Lambda privilege(s) for this operation
```

Stellen Sie sicher, dass Sie die Rolle dem richtigen Benutzer erteilen, wie in den `mysql.users`-Tabelleneinträgen gezeigt. Möglicherweise gibt es mehrere Benutzer mit demselben Namen, aber auf unterschiedlichen Hosts. Je nachdem, welche Anwendung oder welcher Host die Funktion `lambda_sync` aufruft, wählt MySQL anhand der `host`-Spalteneinträge den Benutzer mit der besten Übereinstimmung aus.

### Gewähren der Berechtigung in Aurora MySQL Version 2
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2"></a>

In Aurora MySQL Version 2 muss dem Benutzer, der eine native Funktion aufruft, die `INVOKE LAMBDA`-Berechtigung gewährt werden. Um einem Benutzer diese Berechtigung zu erteilen, stellen Sie als Administrator eine Verbindung zur DB-Instance her und führen Sie die folgende Anweisung aus.

```
GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address
```

Sie können das Recht für einen anderen Benutzer mithilfe der folgenden Anweisung erteilen.

```
REVOKE INVOKE LAMBDA ON *.* FROM user@domain-or-ip-address
```

### Syntax für die lambda\$1sync-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax"></a>

Sie rufen die Funktion `lambda_sync` synchron zum Aufruftyp `RequestResponse` auf. Die Funktion gibt das Ergebnis des Aufrufs von Lambda in einer JSON-Nutzlast zurück. Die Funktion weist die folgende Syntax auf.

```
lambda_sync (
  lambda_function_ARN,
  JSON_payload
)
```

### Parameter für die lambda\$1sync-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters"></a>

Die Funktion `lambda_sync` hat die folgenden Parameter.

* lambda\$1function\$1ARN *  
Der Amazon-Ressourcenname (ARN) der aufzurufenden Lambda-Funktion.

* JSON-Nutzlast *  
Die Nutzlast für die aufgerufene Lambda-Funktion im JSON-Format.

**Anmerkung**  
Aurora MySQL Version 3 unterstützt die JSON-Parsingfunktionen von MySQL 8.0. Aurora MySQL-Version 2 enthält diese Funktionen jedoch nicht. JSON-Parsing ist nicht erforderlich, wenn eine Lambda-Funktion einen atomaren Wert zurückgibt, wie z. B. eine Zahl oder einen String.

### Beispiel für die lambda\$1sync-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example"></a>

Die folgende Abfrage, die auf `lambda_sync` basiert, ruft die Lambda-Funktion `BasicTestLambda` synchron mithilfe der ARN-Funktion auf. Die Nutzlast für die Funktion ist `{"operation": "ping"}`.

```
SELECT lambda_sync(
    'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda',
    '{"operation": "ping"}');
```

### Syntax für die lambda\$1async-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax"></a>

Sie rufen die Funktion `lambda_async` asynchron zum Aufruftyp `Event` auf. Die Funktion gibt das Ergebnis des Aufrufs von Lambda in einer JSON-Nutzlast zurück. Die Funktion weist die folgende Syntax auf.

```
lambda_async (
  lambda_function_ARN,
  JSON_payload
)
```

### Parameter für die lambda\$1async-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters"></a>

Die Funktion `lambda_async` hat die folgenden Parameter.

* lambda\$1function\$1ARN *  
Der Amazon-Ressourcenname (ARN) der aufzurufenden Lambda-Funktion.

* JSON-Nutzlast *  
Die Nutzlast für die aufgerufene Lambda-Funktion im JSON-Format.

**Anmerkung**  
Aurora MySQL Version 3 unterstützt die JSON-Parsingfunktionen von MySQL 8.0. Aurora MySQL-Version 2 enthält diese Funktionen jedoch nicht. JSON-Parsing ist nicht erforderlich, wenn eine Lambda-Funktion einen atomaren Wert zurückgibt, wie z. B. eine Zahl oder einen String.

### Beispiel für die lambda\$1async-Funktion
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example"></a>

Die folgende Abfrage, die auf `lambda_async` basiert, ruft die Lambda-Funktion `BasicTestLambda` asynchron mithilfe der ARN-Funktion auf. Die Nutzlast für die Funktion ist `{"operation": "ping"}`.

```
SELECT lambda_async(
    'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda',
    '{"operation": "ping"}');
```

### Aufrufen einer Lambda-Funktion innerhalb eines Auslösers
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger"></a>

Sie können Auslöser verwenden, um Lambda für datenmodifizierende Anweisungen aufzurufen. Das folgende Beispiel verwendet die native `lambda_async`-Funktion und speichert das Ergebnis in einer Variablen.

```
mysql>SET @result=0;
mysql>DELIMITER //
mysql>CREATE TRIGGER myFirstTrigger
      AFTER INSERT
          ON Test_trigger FOR EACH ROW
      BEGIN
      SELECT lambda_async(
          'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda',
          '{"operation": "ping"}')
          INTO @result;
      END; //
mysql>DELIMITER ;
```

**Anmerkung**  
Auslöser werden nicht einmal pro SQL-Anweisung ausgeführt, sondern einmal pro geänderter Zeile, jeweils für eine einzelne Zeile. Wenn ein Trigger ausgeführt wird, ist der Prozess synchron. Die datenmodifizierende Anweisung wird nur zurückgegeben, wenn der Trigger abgeschlossen ist.  
Seien Sie vorsichtig, wenn Sie eine AWS Lambda Funktion über Trigger in Tabellen aufrufen, die einen hohen Schreibverkehr haben. `INSERT`,`UPDATE`, und `DELETE` Trigger werden pro Zeile aktiviert. Eine umfangreiche Arbeitslast in einer Tabelle mit `INSERT``UPDATE`, oder `DELETE` Triggern führt zu einer großen Anzahl von Aufrufen Ihrer AWS Lambda Funktion.