

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.

# Regeln für AWS IoT
<a name="iot-rules"></a>

Regeln geben Ihren Geräten die Möglichkeit, mit ihnen zu interagieren AWS-Services. Das Analysieren von Regeln sowie das Ausführen von Aktionen erfolgt ausgehend vom MQTT-Topic-Stream. Sie können Regeln verwenden, um die folgenden Aufgaben zu unterstützen:
+ Von einem Gerät empfangene Daten ausweiten oder filtern
+ Von einem Gerät empfangene Daten in eine Amazon DynamoDB-Datenbank schreiben
+ Speichern Sie eine Datei auf Amazon S3.
+ Senden Sie eine Push-Benachrichtigung an alle Benutzer, die Amazon SNS verwenden.
+ Veröffentlichen Sie Daten in einer Amazon SQS-Warteschlange.
+ Rufen Sie eine Lambda-Funktion zum Extrahieren von Daten auf.
+ Nachrichten von einer großen Anzahl an Geräten mithilfe von Amazon Kinesis verarbeiten
+ Senden Sie Daten an Amazon OpenSearch Service.
+ Erfassen Sie eine CloudWatch Metrik. 
+ Ändern Sie einen CloudWatch Alarm.
+ Senden Sie die Daten aus einer MQTT-Nachricht an Amazon SageMaker AI, um Vorhersagen auf der Grundlage eines Modells für maschinelles Lernen (ML) zu treffen. 
+ Senden Sie eine Nachricht an einen Salesforce IoT-Eingabe-Stream.
+ Starten Sie den Prozess eines Step Functions-Zustandsautomaten.
+ Sendet Nachrichtendaten an eine AWS IoT Events Eingabe.
+ Senden Sie Nachrichtendaten an eine Komponenteneigenschaft in AWS IoT SiteWise.
+ Senden Sie Nachrichtendaten an eine Webanwendung oder einen Dienst.

Ihre Regeln können MQTT-Nachrichten verwenden, die das von der [Gerätekommunikationsprotokolle](protocols.md) unterstützte publish/subscribe Protokoll durchlaufen. [Sie können auch die [Basic Ingest-Funktion](iot-basic-ingest.md) verwenden, um Gerätedaten sicher an die zuvor AWS-Services genannten Adressen zu senden, ohne dass Nachrichtengebühren anfallen.](https://aws.amazon.com/iot-core/pricing/) Die Funktion [Basic Ingest](iot-basic-ingest.md) optimiert den Datenfluss, indem der publish/subscribe Message Broker aus dem Aufnahmepfad entfernt wird. Dies macht sie kostengünstig und behält gleichzeitig die Sicherheits- und Datenverarbeitungsfunktionen von bei. AWS IoT

Bevor Sie diese Aktionen ausführen AWS IoT können, müssen Sie dem Unternehmen die Erlaubnis erteilen, in Ihrem Namen auf Ihre AWS Ressourcen zuzugreifen. Wenn die Aktionen ausgeführt werden, fallen die Standardgebühren für die Aktionen an AWS-Services , die Sie verwenden.

**Topics**
+ [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md)
+ [Rollenberechtigungen weitergeben](pass-role.md)
+ [Eine AWS IoT Regel erstellen](iot-create-rule.md)
+ [Eine Regel verwalten AWS IoT](iot-managae-rule.md)
+ [AWS IoT Regelaktionen](iot-rule-actions.md)
+ [Fehlerbehebung bei einer Regel](#iot-troubleshoot-rule)
+ [Mithilfe von Regeln auf kontoübergreifende Ressourcen zugreifen AWS IoT](accessing-cross-account-resources-using-rules.md)
+ [Fehlerbehandlung (Fehleraktion)](rule-error-handling.md)
+ [Senken der Messaging-Kosten mit Basic Ingest](iot-basic-ingest.md)
+ [AWS IoT SQL-Referenz](iot-sql-reference.md)

# Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt
<a name="iot-create-role"></a>

Verwenden Sie IAM-Rollen, um die AWS Ressourcen zu steuern, auf die jede Regel Zugriff hat. Bevor Sie eine Regel erstellen, müssen Sie eine IAM-Rolle mit einer Richtlinie erstellen, die den Zugriff auf die erforderlichen AWS Ressourcen ermöglicht. AWS IoT übernimmt diese Rolle bei der Implementierung einer Regel.

**Gehen Sie wie folgt vor, um die IAM-Rolle und die AWS IoT IAM-Richtlinie zu erstellen, die einer AWS IoT Regel den erforderlichen Zugriff gewähren (AWS CLI).**

1. Speichern Sie das folgende Dokument mit der Vertrauensrichtlinie, das die AWS IoT Berechtigung zur Übernahme der Rolle erteilt, in einer Datei mit dem Namen`iot-role-trust.json`.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "iot.amazonaws.com"
           },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "123456789012"
               },
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rule/rulename"
               }
           }
           }
       ]
   }
   ```

   Erstellen Sie mit dem Befehl [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) eine IAM-Rolle und geben Sie die Datei `iot-role-trust.json` an:

   ```
   aws iam create-role --role-name my-iot-role --assume-role-policy-document file://iot-role-trust.json
   ```

   Die Ausgabe dieses Befehls sieht wie folgt aus:

   ```
   {
   	"Role": {
   		"AssumeRolePolicyDocument": "url-encoded-json",
   		"RoleId": "AKIAIOSFODNN7EXAMPLE",
   		"CreateDate": "2015-09-30T18:43:32.821Z",
   		"RoleName": "my-iot-role",
   		"Path": "/",
   		"Arn": "arn:aws:iam::123456789012:role/my-iot-role"
   	}
   }
   ```

1. Speichern Sie den folgenden JSON-Code in einer Datei mit dem Namen `my-iot-policy.json`.  
****  

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

   Dieses JSON ist ein Beispiel für ein Richtliniendokument, das AWS IoT Administratorzugriff auf DynamoDB gewährt.

   Verwenden Sie den Befehl [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html), um AWS IoT Zugriff auf Ihre AWS Ressourcen zu gewähren, sobald Sie die Rolle übernommen haben, indem Sie die Datei übergeben: `my-iot-policy.json`

   ```
   aws iam create-policy --policy-name my-iot-policy --policy-document file://my-iot-policy.json
   ```

   Weitere Informationen darüber, wie Sie Zugriff auf AWS-Services In-Richtlinien für gewähren AWS IoT, finden Sie unter. [Eine AWS IoT Regel erstellen](iot-create-rule.md)

   Die Ausgabe des Befehls [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) enthält den ARN der Richtlinie. Anfügen der Richtlinie an eine Rolle.

   ```
   {
   	"Policy": {
   		"PolicyName": "my-iot-policy",
   		"CreateDate": "2015-09-30T19:31:18.620Z",
   		"AttachmentCount": 0,
   		"IsAttachable": true,
   		"PolicyId": "ZXR6A36LTYANPAI7NJ5UV",
   		"DefaultVersionId": "v1",
   		"Path": "/",
   		"Arn": "arn:aws:iam::123456789012:policy/my-iot-policy",
   		"UpdateDate": "2015-09-30T19:31:18.620Z"
   	}
   }
   ```

1. Verwenden Sie den [attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)Befehl, um Ihre Richtlinie an Ihre Rolle anzuhängen:

   ```
   aws iam attach-role-policy --role-name my-iot-role --policy-arn "arn:aws:iam::123456789012:policy/my-iot-policy"
   ```

## Den Zugriff auf die Rule Engine widerrufen
<a name="w2aac21c13b7"></a>

Gehen Sie wie folgt vor, um den Zugriff auf die Regel-Engine sofort zu widerrufen

1. [Entfernen Sie iot.amazonaws.com aus der Vertrauensrichtlinie](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)

1. [Folgen Sie den Schritten, um IoT-Rollensitzungen zu widerrufen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_revoke-sessions.html)

# Rollenberechtigungen weitergeben
<a name="pass-role"></a>

Zu einer Regeldefinition gehört eine IAM-Rolle, die die Berechtigung zum Zugriff auf Ressourcen gewährt, welche in der Aktion der Regel festgelegt sind. Die Regel-Engine übernimmt diese Rolle, wenn die Aktion der Regel aufgerufen wird. Die Rolle muss genauso definiert sein AWS-Konto wie die Regel.

Bei Erstellen oder Ersetzen einer Rolle übergeben Sie eine Rolle an die Regel-Engine. Die `iam:PassRole` Berechtigung ist erforderlich, um diesen Vorgang durchzuführen. Sie können sicherstellen, dass Sie über diese Berechtigung verfügen, indem Sie eine Richtlinie erstellen, die die `iam:PassRole` Berechtigung gewährt, und diese an Ihren IAM-Benutzer anfügen. Die folgende Richtlinie zeigt, wie Sie die Berechtigung `iam:PassRole` für eine Rolle erlauben.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "Stmt1",
			"Effect": "Allow",
			"Action": [
				"iam:PassRole"
			],
			"Resource": [
				"arn:aws:iam::123456789012:role/myRole"
			]
		}
	]
}
```

In diesem Richtlinienbeispiel wird die Berechtigung `iam:PassRole` für die Rolle `myRole` gewährt. Die Rolle wird mit dem ARN der Rolle angegeben. Fügen Sie diese Richtlinie Ihrem IAM-Benutzer oder der Rolle zu, der Ihr Benutzer angehört. Weitere Informationen finden Sie unter [Arbeiten mit verwalteten Richtlinien](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_managed-using.html).

**Anmerkung**  
Lambda-Funktionen verwenden eine ressourcenbasierte Richtlinie, wobei die Richtlinie direkt an die Lambda-Funktion selbst angefügt wird. Wenn Sie eine Regel erstellen, die eine Lambda-Funktion aufruft, übergeben Sie keine Rolle, sodass der Benutzer, der die Regel erstellt, die `iam:PassRole` Berechtigung nicht benötigt. Weitere Informationen zur Lambda-Funktionsautorisierung finden Sie unter [Gewähren von Berechtigungen mit einer Ressourcenrichtlinie](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy). 

# Eine AWS IoT Regel erstellen
<a name="iot-create-rule"></a>

Sie können AWS IoT Regeln erstellen, um Daten von Ihren verbundenen Geräten an die Interaktion mit anderen AWS Diensten weiterzuleiten. Eine AWS IoT Regel besteht aus den folgenden Komponenten:


**Bestandteile einer Regel**  

| Komponente | Description | Erforderlich oder optional | 
| --- | --- | --- | 
| Regelname |  Der Name der Regel. Beachten Sie, dass wir die Verwendung personenbezogener Daten in Ihren Regelnamen nicht empfehlen.  | Erforderlich | 
| Regelbeschreibung |  Eine Beschreibung der Regel in Textform. Beachten Sie, dass wir die Verwendung personenbezogener Daten in Ihren Regelbeschreibungen nicht empfehlen.  | Optional. | 
| SQL-Anweisung |  Eine vereinfachte SQL-Syntax zum Filtern von Nachrichten, die zu einem MQTT-Topic empfangen wurden, und zum Übertragen der Daten per Push an einen anderen Speicherort. Weitere Informationen finden Sie unter [AWS IoT SQL-Referenz](iot-sql-reference.md).  | Erforderlich | 
| SQL-Version |  Die Version der SQL-Regel-Engine, die beim Auswerten der Regel verwendet wird. Obwohl diese Eigenschaft optional ist, empfehlen wir dringend, die SQL-Version anzugeben. Die AWS IoT Core Konsole legt diese Eigenschaft `2016-03-23` standardmäßig auf fest. Wenn diese Eigenschaft nicht festgelegt ist, z. B. in einem AWS CLI Befehl oder einer CloudFormation Vorlage, `2015-10-08` wird sie verwendet. Weitere Informationen finden Sie unter [SQL-Versionen](iot-rule-sql-version.md).  | Erforderlich | 
| Eine oder mehrere Aktionen | Die Aktion wird AWS IoT ausgeführt, wenn die Regel in Kraft gesetzt wird. Sie können beispielsweise Daten in eine DynamoDB-Tabelle einfügen, Daten in einen Amazon S3-Bucket schreiben, in einem Amazon SNS-Thema veröffentlichen oder eine Lambda-Funktion aufrufen. | Erforderlich | 
| Eine Fehleraktion | Die Aktion AWS IoT wird ausgeführt, wenn die Aktion einer Regel nicht ausgeführt werden kann. | Optional. | 

Bevor Sie eine AWS IoT Regel erstellen, müssen Sie eine IAM-Rolle mit einer Richtlinie erstellen, die den Zugriff auf die erforderlichen AWS Ressourcen ermöglicht. AWS IoT übernimmt diese Rolle bei der Implementierung einer Regel. Weitere Informationen finden Sie unter [Einer AWS IoT Regel den erforderlichen Zugriff gewähren und](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html) [Rollenberechtigungen weitergeben](https://docs.aws.amazon.com//iot/latest/developerguide/pass-role.html).

Beachten Sie beim Erstellen einer Regel, wie viele Daten Sie in Themen veröffentlichen. Wenn Sie Regeln erstellen, die ein Themenmuster mit Platzhaltern enthalten, stimmen diese möglicherweise mit einem großen Prozentsatz Ihrer Nachrichten überein. In diesem Fall müssen Sie möglicherweise die Kapazität der AWS Ressourcen erhöhen, die von den Zielaktionen verwendet werden. Wir empfehlen, Themenmuster mit Platzhaltern in Regeln zur erneuten Veröffentlichung zu vermeiden, um doppelte Verarbeitung zu vermeiden und die Kosten zu senken.

**Anmerkung**  
Das Erstellen und Aktualisieren von Regeln sind Aktionen auf Administratorebene. Jeder Benutzer mit der Berechtigung zum Erstellen oder Aktualisieren von Regeln kann auf Daten zugreifen, die von den Regeln verarbeitet wurden.

## Erstellen Sie eine Regel (Konsole)
<a name="iot-create-rule-console"></a>

**So erstellen Sie eine Regel (AWS-Managementkonsole)**

Verwenden Sie den [AWS-Managementkonsole](https://console.aws.amazon.com//iot/home#/home)Befehl, um eine Regel zu erstellen:

1. Öffnen Sie die [AWS IoT -Konsole](https://console.aws.amazon.com//iot/home#/home).

1. Wählen Sie in der linken Navigationsleiste im Bereich **Verwalten** die Option **Nachrichtenweiterleitung** aus. Wählen Sie dann **Regeln** aus.

1. Wählen Sie auf der Seite **Regeln** die Option **Regel erstellen** aus.

1. **Geben Sie auf der Seite Regeleigenschaften** angeben einen Namen für Ihre Regel ein. **Regelbeschreibung** und **Tags** sind optional. Wählen Sie **Weiter** aus.

1. Wählen Sie auf der Seite „**SQL-Anweisung konfigurieren**“ eine SQL-Version aus und geben Sie eine SQL-Anweisung ein. Eine Beispiel-SQL-Anweisung kann sein`SELECT temperature FROM 'iot/topic' WHERE temperature > 50`. Weitere Informationen finden Sie unter [SQL-Versionen](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-sql-version.html) und [AWS IoT SQL-Referenz](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-reference.html).

1. Fügen Sie auf der Seite „**Regelaktionen anhängen**“ Regelaktionen hinzu, um Daten an andere AWS Dienste weiterzuleiten.

   1. Wählen Sie unter **Regelaktionen** eine Regelaktion aus der Dropdownliste aus. Sie können beispielsweise **Kinesis Stream** wählen. Weitere Informationen zu Regelaktionen finden Sie unter [AWS IoT Regelaktionen](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-actions.html).

   1. Geben Sie je nach der ausgewählten Regelaktion die entsprechenden Konfigurationsdetails ein. Wenn Sie sich beispielsweise für **Kinesis Stream** entscheiden, müssen Sie eine Datenstream-Ressource auswählen oder erstellen und optional Konfigurationsdetails wie den **Partitionsschlüssel** eingeben, mit dem Daten in einem Stream nach Shard gruppiert werden.

   1. Wählen oder erstellen Sie in der **IAM-Rolle** eine Rolle, um AWS IoT Zugriff auf Ihren Endpunkt zu gewähren. Beachten Sie, dass dadurch AWS IoT automatisch eine Richtlinie mit dem Präfix `aws-iot-rule` unter Ihrer ausgewählten IAM-Rolle erstellt wird. Sie können „**Ansicht**“ wählen, um Ihre IAM-Rolle und die Richtlinie von der IAM-Konsole aus anzuzeigen. Die **Aktion „Fehler“** ist optional. Weitere Informationen finden Sie unter [Fehlerbehandlung (Fehleraktion)](https://docs.aws.amazon.com//iot/latest/developerguide/rule-error-handling.html). Weitere Informationen zum Erstellen einer IAM-Rolle für Ihre Regel finden Sie unter [Gewähren Sie einer Regel den erforderlichen Zugriff.](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html) Wählen Sie **Weiter** aus.

1. Überprüfen Sie auf der Seite **Überprüfen und erstellen** die gesamte Konfiguration und nehmen Sie bei Bedarf Änderungen vor. Wählen Sie **Erstellen** aus.

Nachdem Sie eine Regel erfolgreich erstellt haben, wird die Regel auf der Seite **Regeln** aufgeführt. Sie können eine Regel auswählen, um die **Detailseite** zu öffnen, auf der Sie eine Regel anzeigen, bearbeiten, eine Regel deaktivieren und eine Regel löschen können.

## Regel erstellen (CLI)
<a name="iot-create-rule-cli"></a>

**So erstellen Sie eine Regel (AWS CLI)**  
Verwenden Sie den [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)Befehl, um eine Regel zu erstellen:

```
aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in die angegebene DynamoDB-Tabelle einfügt. Die SQL-Anweisung filtert die Nachrichten und der Rollen-ARN gewährt die AWS IoT Berechtigung, in die DynamoDB-Tabelle zu schreiben.

```
{
	"sql": "SELECT * FROM 'iot/test'",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"dynamoDB": {
				"tableName": "my-dynamodb-table",
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
				"hashKeyField": "topic",
				"hashKeyValue": "${topic(2)}",
				"rangeKeyField": "timestamp",
				"rangeKeyValue": "${timestamp()}"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in den angegebenen S3-Bucket einfügt. Die SQL-Anweisung filtert die Nachrichten, und die Rolle ARN gewährt die AWS IoT Erlaubnis, in den Amazon S3 S3-Bucket zu schreiben.

```
{
	"awsIotSqlVersion": "2016-03-23",
	"sql": "SELECT * FROM 'iot/test'",
	"ruleDisabled": false,
	"actions": [
		{
			"s3": {
				"roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3",
				"bucketName": "amzn-s3-demo-bucket",
				"key": "myS3Key"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Payload-Datei mit einer Regel, die Daten an Amazon OpenSearch Service überträgt:

```
{
	"sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"OpenSearch": {
				"roleArn": "arn:aws:iam::123456789012:role/aws_iot_es",
				"endpoint": "https://my-endpoint",
				"index": "my-index",
				"type": "my-type",
				"id": "${newuuid()}"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die eine Lambda-Funktion aufruft:

```
{
	"sql": "expression",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"lambda": {
				"functionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die in einem Amazon SNS-Thema veröffentlicht:

```
{
	"sql": "expression",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"sns": {
				"targetArn": "arn:aws:sns:us-west-2:123456789012:my-sns-topic",
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die in einem anderen MQTT-Topic erneut veröffentlicht:

```
{
	"sql": "expression",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"republish": {
				"topic": "my-mqtt-topic",
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Payload-Datei mit einer Regel, die Daten in einen Amazon Data Firehose überträgt:

```
{
	"sql": "SELECT * FROM 'my-topic'",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"firehose": {
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
				"deliveryStreamName": "my-stream-name"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Payload-Datei mit einer Regel, die die Amazon SageMaker `machinelearning_predict` AI-Funktion verwendet, um erneut zu einem Thema zu veröffentlichen, wenn die Daten in der MQTT-Payload als 1 klassifiziert sind.

```
{
	"sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"republish": {
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
				"topic": "my-mqtt-topic"
			}
		}
	]
}
```

Es folgt ein Beispiel für eine Nutzlastdatei mit einer Regel, nach der Nachrichten in einem Salesforce IoT Cloud-Input-Stream veröffentlicht werden.

```
{
	"sql": "expression",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"salesforce": {
				"token": "ABCDEFGHI123456789abcdefghi123456789",
				"url": "https://ingestion-cluster-id.my-env.sfdcnow.com/streams/stream-id/connection-id/my-event"
			}
		}
	]
}
```

Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die eine Ausführung eines Step Functions-Zustandsautomaten startet.

```
{
	"sql": "expression",
	"ruleDisabled": false,
	"awsIotSqlVersion": "2016-03-23",
	"actions": [
		{
			"stepFunctions": {
				"stateMachineName": "myCoolStateMachine",
				"executionNamePrefix": "coolRunning",
				"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
			}
		}
	]
}
```

# Eine Regel verwalten AWS IoT
<a name="iot-managae-rule"></a>

Sie können die folgenden Aktionen verwenden, um Ihre AWS IoT Regeln zu verwalten.

**Topics**
+ [Eine Regel taggen](#iot-create-rule-tagging)
+ [Eine Regel anzeigen](#iot-view-rules)
+ [Löschen einer Regel](#iot-delete-rule)

## Eine Regel taggen
<a name="iot-create-rule-tagging"></a>

Um Ihren neuen oder bestehenden Regeln eine weitere Ebene der Spezifität hinzuzufügen, können Sie sie mit Tags versehen. Beim Taggen werden Schlüssel-Wert-Paare in Ihren Regeln genutzt, sodass Sie besser kontrollieren können, wie und wo Ihre Regeln auf Ihre Ressourcen und Dienste angewendet werden. AWS IoT Sie können den Geltungsbereich Ihrer Regel beispielsweise so einschränken, dass sie nur in Ihrer Beta-Umgebung für Tests vor der Veröffentlichung gilt (`Key=environment, Value=beta`) oder alle Nachrichten, die nur von einem bestimmten Endpunkt an das `iot/test` Thema gesendet wurden, erfasst und in einem Amazon S3-Bucket speichert.

### Beispiel für IAM-Richtlinien
<a name="iot-create-rule-tagging-iam-example"></a>

Ein Beispiel, das zeigt, wie Tagging-Berechtigungen für eine Regel erteilt werden, stellen Sie sich einen Benutzer vor, der den folgenden Befehl ausführt, um eine Regel zu erstellen und sie so zu kennzeichnen, dass sie nur für seine Beta-Umgebung gilt.

Ersetzen Sie im Beispiel:
+ *MyTopicRuleName*mit dem Namen der Regel.
+ *myrule.json*mit dem Namen des Richtliniendokuments.

```
aws iot create-topic-rule 
    --rule-name MyTopicRuleName 
    --topic-rule-payload file://myrule.json
    --tags "environment=beta"
```

Für dieses Beispiel müssen Sie die folgende IAM-Richtlinie verwenden:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": 
    {
        "Action": [ "iot:CreateTopicRule", "iot:TagResource" ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:iot:us-east-1:123456789012:rule/MyTopicRuleName"
        ]
    }
}
```

Das obige Beispiel zeigt eine neu erstellte Regel namens `MyTopicRuleName`, die nur für Ihre Beta-Umgebung gilt. Die `iot:TagResource` in der Grundsatzerklärung mit `MyTopicRuleName` ausdrücklich genannte Option ermöglicht das Taggen bei der Erstellung oder Aktualisierung von `MyTopicRuleName`. Der bei der Erstellung der Regel verwendete Parameter `--tags "environment=beta"` beschränkt den Geltungsbereich von `MyTopicRuleName` nur auf Ihre Beta-Umgebung. Wenn Sie den Parameter `--tags "environment=beta"` entfernen, gilt `MyTopicRuleName` für alle Umgebungen.

Weitere Informationen zum Erstellen von IAM-Rollen und -Richtlinien für eine AWS IoT Regel finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md)

Allgemeine Informationen zum Tagging von Ressourcen finden Sie unter [Verschlagworten Sie Ihre Ressourcen AWS IoT](tagging-iot.md).

## Eine Regel anzeigen
<a name="iot-view-rules"></a>

Verwenden Sie den [list-topic-rules](https://docs.aws.amazon.com/cli/latest/reference/iot/list-topic-rules.html)Befehl, um Ihre Regeln aufzulisten:

```
aws iot list-topic-rules
```

Verwenden Sie den [get-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/get-topic-rule.html)Befehl, um Informationen zu einer Regel abzurufen:

```
aws iot get-topic-rule --rule-name myrule
```

## Löschen einer Regel
<a name="iot-delete-rule"></a>

Wenn Sie eine Regel nicht mehr benötigen, können Sie sie löschen.

**So löschen Sie eine Regel (AWS CLI)**  
Verwenden Sie den [delete-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-topic-rule.html)Befehl, um eine Regel zu löschen:

```
aws iot delete-topic-rule --rule-name myrule
```

# AWS IoT Regelaktionen
<a name="iot-rule-actions"></a>

AWS IoT Regelaktionen geben an, was zu tun ist, wenn eine Regel aufgerufen wird. Sie können Aktionen definieren, um Daten an eine Amazon DynamoDB DynamoDB-Datenbank zu senden, Daten an Amazon Kinesis Data Streams zu senden, eine AWS Lambda Funktion aufzurufen usw. AWS IoT unterstützt die folgenden Aktionen, AWS-Regionen sofern der Service der Aktion verfügbar ist.


| Regelaktion | Description | Name in der API | 
| --- | --- | --- | 
| [Apache Kafka](apache-kafka-rule-action.md) | Sendet eine Nachricht an einen Apache-Kafka-Cluster. | kafka | 
| [CloudWatch Alarme](cloudwatch-alarms-rule-action.md) | Ändert den Status eines CloudWatch Amazon-Alarms. | cloudwatchAlarm | 
| [CloudWatch Logs](cloudwatch-logs-rule-action.md) | Sendet eine Nachricht an Amazon CloudWatch Logs. | cloudwatchLogs | 
| [CloudWatch Metriken](cloudwatch-metrics-rule-action.md) | Sendet eine Nachricht an eine CloudWatch Metrik. | cloudwatchMetric | 
| [DynamoDB](dynamodb-rule-action.md) | Sendet eine Nachricht an eine DynamoDB-Tabelle. | dynamoDB | 
| [Dynamo DBv2](dynamodb-v2-rule-action.md) | Sendet Nachrichtendaten an mehrere Spalten in einer DynamoDB-Tabelle. | dynamoDBv2 | 
| [Elasticsearch](elasticsearch-rule-action.md) | Sendet eine Nachricht an einen OpenSearch Endpunkt. | OpenSearch | 
| [HTTP](https-rule-action.md) | Sendet eine Nachricht an einen HTTPS-Endpunkt. | http | 
| [AWS IoT Events](iotevents-rule-action.md) | Sendet eine Nachricht an eine AWS IoT Events Eingabe. | iotEvents | 
| [AWS IoT SiteWise](iotsitewise-rule-action.md) | Sendet Nachrichtendaten an AWS IoT SiteWise Objekteigenschaften. | iotSiteWise | 
| [Firehose](kinesis-firehose-rule-action.md) | Sendet eine Nachricht an einen Firehose-Lieferstream. | firehose | 
| [Kinesis Data Streams](kinesis-rule-action.md) | Sendet eine Nachricht an einen Kinesis-Datenstrom. | kinesis | 
| [Lambda](lambda-rule-action.md) | Ruft eine Lambda-Funktion mit Nachrichtendaten als Eingabe auf. | lambda | 
| [Speicherort](location-rule-action.md) | Sendet Standortdaten an Amazon Location Service. | location | 
| [OpenSearch](opensearch-rule-action.md) | Sendet eine Nachricht an einen Amazon OpenSearch Service-Endpunkt. | OpenSearch | 
| [Erneut veröffentlichen](republish-rule-action.md) | Veröffentlicht eine Nachricht erneut in einem anderen MQTT-Thema. | republish | 
| [S3](s3-rule-action.md) | Speichert eine Nachricht in einem Amazon Simple Storage Service (Amazon S3)-Bucket. | s3 | 
| [Salesforce-IoT](salesforce-iot-rule-action.md) | Sendet eine Nachricht an einen Salesforce IoT-Eingabe-Stream. | salesforce | 
| [SNS](sns-rule-action.md) | Veröffentlichen einer Nachricht als Amazon Simple Notification Service (Amazon SNS) Push-Benachrichtigung. | sns | 
| [SQS](sqs-rule-action.md) | Sendet eine Nachricht an eine Amazon Simple Queue Service (Amazon SQS) Warteschlange. | sqs | 
| [Step Functions](stepfunctions-rule-action.md) | Startet eine AWS Step Functions Zustandsmaschine. | stepFunctions | 
| [Timestream](timestream-rule-action.md) | Sendet eine Nachricht an eine Amazon Timestream-Datenbanktabelle. | timestream | 

**Hinweise**  
Definieren Sie die Regel genauso AWS-Region wie die Ressource eines anderen Dienstes, sodass die Regelaktion mit dieser Ressource interagieren kann.
Die AWS IoT Regel-Engine kann mehrere Versuche unternehmen, eine Aktion auszuführen, wenn zeitweise Fehler auftreten. Wenn alle Versuche fehlschlagen, wird die Nachricht verworfen und der Fehler ist in Ihren Protokollen verfügbar. CloudWatch Sie können eine Fehleraktion für jede Regel angeben, die aufgerufen wird, nachdem ein Fehler auftritt. Weitere Informationen finden Sie unter [Fehlerbehandlung (Fehleraktion)](rule-error-handling.md).
Einige Regelaktionen lösen Aktionen in Services aus, die mit AWS Key Management Service (AWS KMS) integriert werden, um die Verschlüsselung von Daten im Ruhezustand zu unterstützen. Wenn Sie einen vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um Daten im Ruhezustand zu verschlüsseln, muss der Dienst die Erlaubnis haben, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Wie Sie die Berechtigungen für Ihren vom Kunden verwalteten KMS-Schlüssel verwalten können, erfahren Sie in den Themen zur Datenverschlüsselung im entsprechenden Servicehandbuch. Weitere Informationen über kundenverwaltete KMS-Schlüssel finden Sie unter [AWS Key Management Service Konzepte](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) im *AWS Key Management Service Entwicklerhandbuch*.  
Sie können jede [Funktion](iot-sql-functions.md) oder [Ersatzvorlage in der](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) SQL-Anweisung einer Fehleraktion verwenden, einschließlich der externen Funktionen: [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda),,, [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb), [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-secret](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-secret)und. [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-machine-learning](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-machine-learning) Wenn eine Fehleraktion den Aufruf einer externen Funktion erfordert, kann der Aufruf der Fehleraktion zu einer zusätzlichen Rechnung für die externe Funktion führen.

# Apache Kafka
<a name="apache-kafka-rule-action"></a>

Die Apache Kafka (Kafka) -Aktion sendet Nachrichten direkt an Ihr [Amazon Managed Streaming for Apache Kafka](https://docs.aws.amazon.com//msk/latest/developerguide/what-is-msk.html) (Amazon MSK), Apache Kafka-Cluster, die von Drittanbietern wie [Confluent Cloud](https://www.confluent.io/) verwaltet werden, oder an selbstverwaltete Apache Kafka-Cluster. Mit Kafka-Regelaktionen können Sie Ihre IoT-Daten an Kafka-Cluster weiterleiten. Auf diese Weise können Sie leistungsstarke Datenpipelines für verschiedene Zwecke einrichten, z. B. für Streaming-Analysen, Datenintegration, Visualisierung und geschäftskritische Geschäftsanwendungen.

**Anmerkung**  
Dieses Thema setzt Vertrautheit mit der Apache Kafka-Plattform und verwandten Konzepten voraus. Weitere Informationen zu Apache Kafka finden Sie unter [Apache Kafka](https://kafka.apache.org/). [MSK Serverless](https://docs.aws.amazon.com//msk/latest/developerguide/serverless.html) wird nicht unterstützt. Serverlose MSK-Cluster können nur über die IAM-Authentifizierung ausgeführt werden, die die Apache Kafka-Regelaktion derzeit nicht unterstützt. Weitere Informationen zur Konfiguration AWS IoT Core mit Confluent finden Sie unter [Leveraging Confluent and Solve IoT Device and Data AWS Management Challenges](https://aws.amazon.com/blogs/apn/leveraging-confluent-and-aws-to-solve-iot-device-and-data-management-challenges/).

## Voraussetzungen
<a name="apache-kafka-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung der,`ec2:CreateNetworkInterface`,,, `ec2:DescribeNetworkInterfaces` `ec2:CreateNetworkInterfacePermission``ec2:DeleteNetworkInterface`, `ec2:DescribeSubnets` und -Operationen übernehmen AWS IoT kann. `ec2:DescribeVpcs` `ec2:DescribeVpcAttribute` `ec2:DescribeSecurityGroups` Diese Rolle erstellt und verwaltet ENIs zu Ihrer Amazon Virtual Private Cloud, um Ihren Kafka-Broker zu erreichen. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT Core zu ermöglichen. 

  Weitere Informationen zu Netzwerkschnittstellen finden Sie unter [Elastic-Network-Schnittstellen](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) im *Amazon-EC2-Benutzerhandbuch*.

  Die Richtlinie, die der von Ihnen angegebenen Rolle zugewiesen ist, sollte wie im folgenden Beispiel aussehen.  
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:CreateNetworkInterfacePermission",
              "ec2:DeleteNetworkInterface",
              "ec2:DescribeSubnets",
              "ec2:DescribeVpcs",
              "ec2:DescribeVpcAttribute",
              "ec2:DescribeSecurityGroups"
              ],
              "Resource": "*"
          }
      ]
  }
  ```
+ Wenn Sie die Anmeldeinformationen speichern AWS Secrets Manager , die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind, müssen Sie eine IAM-Rolle erstellen, die die Ausführung der `secretsmanager:GetSecretValue` AND-Operationen übernehmen AWS IoT Core kann. `secretsmanager:DescribeSecret`

  Die Richtlinie, die der von Ihnen angegebenen Rolle zugewiesen ist, sollte wie im folgenden Beispiel aussehen.  
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "secretsmanager:GetSecretValue",
                  "secretsmanager:DescribeSecret"
              ],
              "Resource": [
                  "arn:aws:secretsmanager:us-east-1:123456789012:secret:kafka_client_truststore-*",
                  "arn:aws:secretsmanager:us-east-1:123456789012:secret:kafka_keytab-*"
              ]
          }
      ]
  }
  ```
+ Sie können Ihre Apache Kafka-Cluster in Amazon Virtual Private Cloud (Amazon VPC) ausführen. Sie müssen ein Apache Kafka Virtual Private Cloud (VPC) -Ziel erstellen und ein NAT-Gateway in Ihren Subnetzen verwenden, um Nachrichten von an einen öffentlichen AWS IoT Kafka-Cluster weiterzuleiten. Die AWS IoT Regel-Engine erstellt in jedem der im Ziel aufgelisteten Subnetze eine Netzwerkschnittstelle, um den Verkehr direkt an die VPC weiterzuleiten. Wenn Sie Ihr Ziel erreichen, erstellt die AWS IoT Regel-Engine automatisch eine VPC-Regelaktion. Weitere Informationen zu VPC-Regelaktionen finden Sie unter [Ziele für die Virtual Private Cloud (VPC) von Apache Kafka](kafka-vpc-destination.md).
+ Wenn Sie einen vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um Daten im Ruhezustand zu verschlüsseln, muss der Dienst die Erlaubnis haben, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Amazon-MSK-Verschlüsselung](https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html) im *Entwicklerhandbuch für Amazon Managed Streaming for Apache Kafka*.

## Parameters
<a name="apache-kafka-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

destinationArn  
Der Amazon-Ressourcenname (ARN) des Apache Kafka Virtual Private Cloud (VPC) -Ziels. Informationen zum Erstellen eines Ziels finden Sie unter. [Ziele für die Virtual Private Cloud (VPC) von Apache Kafka](kafka-vpc-destination.md)

Thema  
Das Kafka-Thema für Nachrichten, die an den Kafka-Broker gesendet werden sollen.  
Sie können dieses Feld durch eine Ersatzvorlage ersetzen. Weitere Informationen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). 

Schlüssel (optional)  
Der Kafka-Nachrichtenschlüssel.  
Sie können dieses Feld durch eine Ersatzvorlage ersetzen. Weitere Informationen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). 

Überschriften (optional)  
Die Liste der Kafka-Header, die Sie festlegen. Jeder Header ist ein Schlüssel-Wert-Paar, das Sie beim Erstellen einer Kafka-Aktion angeben können. Sie können diese Header verwenden, um Daten von IoT-Clients an Downstream-Kafka-Cluster weiterzuleiten, ohne Ihre Nachrichtennutzlast zu ändern.  
Sie können dieses Feld durch eine Ersatzvorlage ersetzen. Um zu verstehen, wie die Funktion einer Inline-Regel als Ersatzvorlage in den Header von Kafka Action übergeben wird, siehe [Beispiele](#apache-kafka-rule-action-examples). Weitere Informationen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md).  
Header im Binärformat werden nicht unterstützt.

Partition (optional)  
Die Kafka-Nachrichten-Partition.  
Sie können dieses Feld durch eine Ersatzvorlage ersetzen. Weitere Informationen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md).

clientProperties  
Ein Objekt, das die Eigenschaften des Apache Kafka-Producer-Clients definiert.    
acks (optional)  
Die Anzahl der Bestätigungen, die der Hersteller beim Server erhalten haben muss, bevor eine Anfrage als abgeschlossen betrachtet werden kann.  
Wenn Sie 0 als Wert angeben, wartet der Producer nicht auf eine Bestätigung vom Server. Wenn der Server die Nachricht nicht empfängt, versucht der Producer nicht erneut, die Nachricht zu senden.  
Zulässige Werte: `-1`, `0`, `1`, `all`. Der Standardwert ist `1`.  
bootstrap.servers  
Eine Liste von Host- und Port-Paaren (z. B.`host1:port1`, `host2:port2`), die verwendet wurden, um die erste Verbindung zu Ihrem Kafka-Cluster herzustellen.  
compression.type (optional)  
Der Komprimierungstyp für alle vom Hersteller generierten Daten.  
Zulässige Werte: `none`, `gzip`, `snappy`, `lz4`, `zstd`. Der Standardwert ist `none`.  
security.protocol  
Das Sicherheitsprotokoll, das für die Verbindung mit Ihrem Kafka-Broker verwendet wird.  
Zulässige Werte: `SSL`, `SASL_SSL`. Der Standardwert ist `SSL`.  
key.serializer  
Gibt an, wie die Schlüsselobjekte, die Sie mit `ProducerRecord` bereitstellen, in Bytes umgewandelt werden sollen.  
Zulässiger Wert: `StringSerializer`.  
value.serializer  
Gibt an, wie Wertobjekte, die Sie mit dem `ProducerRecord` bereitstellen, in Bytes umgewandelt werden sollen.  
Zulässiger Wert: `ByteBufferSerializer`.  
ssl.truststore  
Die Truststore-Datei im Base64-Format oder der Speicherort der Truststore-Datei in [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/). Dieser Wert ist nicht erforderlich, wenn Ihr Truststore von den Amazon-Zertifizierungsstellen (CA) als vertrauenswürdig eingestuft wird.  
Dieses Feld unterstützt Substitutionsvorlagen. Wenn Sie Secrets Manager verwenden, um die Anmeldeinformationen zu speichern, die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind, können Sie die `get_secret` SQL-Funktion verwenden, um den Wert für dieses Feld abzurufen. Weitere Informationen zu Ersatzvorlagen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). Weitere Informationen zur `get_secret` SQL Funktion finden Sie unter [get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)](iot-sql-functions.md#iot-sql-function-get-secret). Wenn der Truststore in Form einer Datei vorliegt, verwenden Sie den `SecretBinary` Parameter. Wenn der Truststore die Form einer Zeichenfolge hat, verwenden Sie den `SecretString` Parameter.  
Die maximale Größe dieses Wertes beträgt 65 KB.  
ssl.truststore.password  
Das Passwort für den Truststore Dieser Wert ist nur erforderlich, wenn Sie ein Passwort für den Truststore erstellt haben.  
ssl.keystore  
Die Keystore-Datei. Dieser Wert ist erforderlich, wenn Sie `SSL` als Wert für `security.protocol` angeben.  
Dieses Feld unterstützt Substitutionsvorlagen. Verwenden Sie Secrets Manager, um die Anmeldeinformationen zu speichern, die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind. Verwenden Sie die `get_secret` SQL-Funktion, um den Wert für dieses Feld abzurufen. Weitere Informationen zu Ersatzvorlagen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). Weitere Informationen zur `get_secret` SQL Funktion finden Sie unter [get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)](iot-sql-functions.md#iot-sql-function-get-secret). Verwenden Sie den Parameter `SecretBinary`.  
ssl.keystore.password  
Das Speicherpasswort für die Keystore-Datei. Dieser Wert ist erforderlich, wenn Sie einen Wert für `ssl.keystore` angeben.  
Der Wert dieses Feldes kann Klartext sein. Dieses Feld unterstützt auch Ersatzvorlagen. Verwenden Sie Secrets Manager, um die Anmeldeinformationen zu speichern, die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind. Verwenden Sie die `get_secret` SQL-Funktion, um den Wert für dieses Feld abzurufen. Weitere Informationen zu Ersatzvorlagen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). Weitere Informationen zur `get_secret` SQL Funktion finden Sie unter [get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)](iot-sql-functions.md#iot-sql-function-get-secret). Verwenden Sie den Parameter `SecretString`.  
ssl.key.password  
Das Passwort des privaten Schlüssels in Ihrer Keystore-Datei.  
Dieses Feld unterstützt Substitutionsvorlagen. Verwenden Sie Secrets Manager, um die Anmeldeinformationen zu speichern, die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind. Verwenden Sie die `get_secret` SQL-Funktion, um den Wert für dieses Feld abzurufen. Weitere Informationen zu Ersatzvorlagen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). Weitere Informationen zur `get_secret` SQL Funktion finden Sie unter [get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)](iot-sql-functions.md#iot-sql-function-get-secret). Verwenden Sie den Parameter `SecretString`.  
sasl.mechanik  
Der Sicherheitsmechanismus, der für die Verbindung zu Ihrem Kafka-Broker verwendet wird. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` angeben.  
Zulässige Werte: `PLAIN`, `SCRAM-SHA-512`, `GSSAPI`.  
`SCRAM-SHA-512`ist der einzige unterstützte Sicherheitsmechanismus in den Regionen cn-north-1, cn-northwest-1, -1 und -1. us-gov-east us-gov-west  
sasl.plain.username  
Der Benutzername, der verwendet wird, um die geheime Zeichenfolge vom Secrets Manager abzurufen. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `PLAIN` für `sasl.mechanism` angeben.  
sasl.plain.password  
Das Passwort, das zum Abrufen der geheimen Zeichenfolge von Secrets Manager verwendet wird. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `PLAIN` für `sasl.mechanism` angeben.  
sasl.scram.username  
Der Benutzername, der verwendet wird, um die geheime Zeichenfolge vom Secrets Manager abzurufen. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `SCRAM-SHA-512` für `sasl.mechanism` angeben.  
sasl.scram.password  
Das Passwort, das zum Abrufen der geheimen Zeichenfolge von Secrets Manager verwendet wird. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `SCRAM-SHA-512` für `sasl.mechanism` angeben.  
sasl.kerberos.keytab  
Die Keytab-Datei für die Kerberos-Authentifizierung in Secrets Manager. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `GSSAPI` für `sasl.mechanism` angeben.  
Dieses Feld unterstützt Substitutionsvorlagen. Verwenden Sie Secrets Manager, um die Anmeldeinformationen zu speichern, die für die Verbindung mit Ihrem Kafka-Broker erforderlich sind. Verwenden Sie die `get_secret` SQL-Funktion, um den Wert für dieses Feld abzurufen. Weitere Informationen zu Ersatzvorlagen finden Sie unter [Ersetzungsvorlagen](iot-substitution-templates.md). Weitere Informationen zur `get_secret` SQL Funktion finden Sie unter [get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)](iot-sql-functions.md#iot-sql-function-get-secret). Verwenden Sie den Parameter `SecretBinary`.  
sasl.kerberos.service.name  
Der Kerberos-Prinzipalname, unter dem Apache Kafka ausgeführt wird. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `GSSAPI` für `sasl.mechanism` angeben.  
sasl.kerberos.krb5.kdc  
Der Hostname des Key Distribution Center (KDC), mit dem Ihr Apache Kafka Producer-Client eine Verbindung herstellt. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `GSSAPI` für `sasl.mechanism` angeben.  
sasl.kerberos.krb5.realm  
Der Realm, mit dem Ihr Apache Kafka Producer-Client eine Verbindung herstellt. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `GSSAPI` für `sasl.mechanism` angeben.  
sasl.kerberos.principal  
Die eindeutige Kerberos-Identität, der Kerberos Tickets für den Zugriff auf Kerberos-fähige Dienste zuweisen kann. Dieser Wert ist erforderlich, wenn Sie `SASL_SSL` für `security.protocol` und `GSSAPI` für `sasl.mechanism` angeben.

## Beispiele
<a name="apache-kafka-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Apache Kafka-Aktion in einer Regel. AWS IoT Im folgenden Beispiel wird die Inline-Funktion [sourceIp ()](iot-sql-functions.md#iot-function-sourceip) als [Ersatzvorlage](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) im Kafka Action-Header übergeben.

```
{
	"topicRulePayload": {
		"sql": "SELECT * FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"kafka": {
					"destinationArn": "arn:aws:iot:region:123456789012:ruledestination/vpc/VPCDestinationARN",
					"topic": "TopicName",
					"clientProperties": {
						"bootstrap.servers": "kafka.com:9092",
						"security.protocol": "SASL_SSL",
						"ssl.truststore": "${get_secret('kafka_client_truststore', 'SecretBinary','arn:aws:iam::123456789012:role/kafka-get-secret-role-name')}",
						"ssl.truststore.password": "kafka password",
						"sasl.mechanism": "GSSAPI",
						"sasl.kerberos.service.name": "kafka",
						"sasl.kerberos.krb5.kdc": "kerberosdns.com",
						"sasl.kerberos.keytab": "${get_secret('kafka_keytab','SecretBinary', 'arn:aws:iam::123456789012:role/kafka-get-secret-role-name')}",
						"sasl.kerberos.krb5.realm": "KERBEROSREALM",
						"sasl.kerberos.principal": "kafka-keytab/kafka-keytab.com"
					},
					"headers": [
						{
							"key": "static_header_key",
							"value": "static_header_value"
						},
						{
							"key": "substitutable_header_key",
							"value": "${value_from_payload}"
						},
						{
							"key": "source_ip",
							"value": "${sourceIp()}"
						}
					]
				}
			}
		]
	}
}
```

**Wichtige Hinweise zu Ihrem Kerberos-Setup**
+ Ihr Key Distribution Center (KDC) muss über ein privates Domain Name System (DNS) innerhalb Ihrer Ziel-VPC auflösbar sein. Ein möglicher Ansatz besteht darin, den KDC-DNS-Eintrag zu einer privaten gehosteten Zone hinzuzufügen. Weitere Informationen zu diesem Ansatz finden Sie unter [Arbeiten mit privat gehosteten Zonen](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).
+ Für jede VPC muss die DNS-Auflösung aktiviert sein. Weitere Informationen finden Sie unter [Verwenden von DNS in Ihrer VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).
+ Sicherheitsgruppen für Netzwerkschnittstellen und Sicherheitsgruppen auf Instance-Ebene im VPC-Ziel müssen Datenverkehr aus Ihrer VPC an den folgenden Ports zulassen.
  + TCP-Verkehr auf dem Bootstrap-Broker-Listener-Port (häufig 9092, muss aber im Bereich 9000—9100 liegen)
  + TCP- und UDP-Verkehr auf Port 88 für das KDC
+ `SCRAM-SHA-512`ist der einzige unterstützte Sicherheitsmechanismus in den Regionen cn-north-1, cn-northwest-1, -1 und -1. us-gov-east us-gov-west

# Ziele für die Virtual Private Cloud (VPC) von Apache Kafka
<a name="kafka-vpc-destination"></a>

Die Apache Kafka-Regelaktion leitet Daten an einen Apache Kafka-Cluster in einer Amazon Virtual Private Cloud (Amazon VPC). Die von der Apache Kafka-Regelaktion verwendete VPC-Konfiguration wird automatisch aktiviert, wenn Sie das VPC-Ziel für Ihre Regelaktion angeben.

Ein Apache Kafka Virtual Private Cloud (VPC) -Ziel enthält eine Liste von Subnetzen innerhalb der VPC. Die Regel-Engine erstellt eine ENI in jedem Subnetz, das Sie in dieser Liste angeben. Weitere Informationen zu Netzwerkschnittstellen finden Sie unter [Elastic-Network-Schnittstellen](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) im Amazon-EC2-Benutzerhandbuch.

## Anforderungen und Überlegungen
<a name="kafka-vpc-destination-considerations"></a>
+ Wenn Sie einen selbstverwalteten Apache Kafka-Cluster verwenden, auf den über einen öffentlichen Endpunkt im Internet zugegriffen wird:
  + Erstellen Sie ein NAT-Gateway für Instances in Ihren Subnetzen. Das NAT-Gateway verfügt über eine öffentliche IP-Adresse, die eine Verbindung zum Internet herstellen kann. Dadurch kann die Regel-Engine Ihre Nachrichten an den öffentlichen Kafka-Cluster weiterleiten.
  + Weisen Sie den Elastic Network Interfaces (ENIs), die vom Apache Kafka Virtual Private Cloud (VPC) -Ziel erstellt wurden, eine Elastic IP-Adresse zu. Die Sicherheitsgruppen, die Sie verwenden, müssen so konfiguriert sein, dass sie eingehenden Datenverkehr blockieren.
**Anmerkung**  
Wenn das Apache Kafka Virtual Private Cloud (VPC) -Ziel deaktiviert und dann wieder aktiviert wird, müssen Sie das Elastic IPs erneut mit dem neuen verknüpfen. ENIs
+ Wenn ein Apache Kafka Virtual Private Cloud (VPC) -Ziel 30 Tage hintereinander keinen Traffic empfängt, wird es deaktiviert.
+ Wenn sich Ressourcen ändern, die vom Apache Kafka Virtual Private Cloud (VPC) -Ziel verwendet werden, wird das Ziel deaktiviert und kann nicht verwendet werden.
+ Zu den Änderungen, die ein Apache Kafka Virtual Private Cloud (VPC) -Ziel deaktivieren können, gehören: 
  + Löschen der VPC, der Subnetze, Sicherheitsgruppen oder der verwendeten Rolle.
  + Änderung der Rolle, sodass sie nicht mehr über die erforderlichen Berechtigungen verfügt.
  + Wir haben fast die Subnetzkapazität erreicht, sodass wir kein [FedRAMP-Patching](https://aws.amazon.com/compliance/fedramp/) mehr anwenden können.
  + Das Ziel wird deaktiviert.

## Preisgestaltung
<a name="kafka-vpc-destination-pricing"></a>

Aus Preisgründen wird eine VPC-Regelaktion zusätzlich zu der Aktion gemessen, die eine Nachricht an eine Ressource sendet, wenn sich die Ressource in Ihrer VPC befindet. Preisinformationen finden Sie unter [AWS IoT Core Preise](https://aws.amazon.com/iot-core/pricing/).

## Apache Kafka Virtual Private Cloud (VPC) -Ziele erstellen
<a name="kafka-vpc-destination-creating"></a>

Sie erstellen ein Apache Kafka Virtual Private Cloud (VPC) -Ziel mithilfe der [CreateTopicRuleDestination](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRuleDestination.html)API oder der AWS IoT Core Konsole. 

Wenn Sie ein Ziel erstellen, müssen Sie die folgenden Informationen angeben.

vpcId  
Die eindeutige ID der Amazon VPC.

subnetIds  
Eine Liste von Subnetzen, in denen die Regel-Engine ENIs erstellt. Die Regel-Engine weist jedem Subnetz in der Liste eine einzelne Netzwerkschnittstelle zu.

securityGroups (optional)  
Eine Liste von Sicherheitsgruppen, die auf die Netzwerkschnittstellen anzuwenden sind

roleArn  
Der Amazon-Ressourcenname (ARN) einer Rolle, die die Berechtigung zum Erstellen von Netzwerkschnittstellen in Ihrem Namen erteilt.  
Diesem ARN sollte eine Richtlinie angehängt sein, die wie im folgenden Beispiel aussieht.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeVpcs",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/VPCDestinationENI": "true"
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateNetworkInterface",
                    "aws:RequestTag/VPCDestinationENI": "true"
            }
        }
        }
    ]
}
```

### Erstellen eines Apache Kafka Virtual Private Cloud (VPC) -Ziels mithilfe von AWS CLI
<a name="kafka-vpc-destination-create-cli"></a>

Das folgende Beispiel zeigt, wie Sie ein Ziel mithilfe von erstellen. AWS CLI

```
aws --region regions iot create-topic-rule-destination --destination-configuration 'vpcConfiguration={subnetIds=["subnet-123456789101230456"],securityGroups=[],vpcId="vpc-123456789101230456",roleArn="arn:aws:iam::123456789012:role/role-name"}'
```

Nachdem Sie diesen Befehl ausgeführt haben, lautet der Zielstatus`IN_PROGRESS`. Nach einigen Minuten ändert sich der Status entweder auf `ERROR` (falls der Befehl nicht erfolgreich ist) oder `ENABLED`. Wenn der Zielstatus `ENABLED` lautet, ist er einsatzbereit.

Sie können den folgenden Befehl verwenden, um den Status Ihres Apache Kafka Virtual Private Cloud (VPC) -Ziels abzurufen.

```
aws --region region iot get-topic-rule-destination --arn "VPCDestinationARN"
```

### Erstellen eines Apache Kafka Virtual Private Cloud (VPC) -Ziels mithilfe der Konsole AWS IoT Core
<a name="kafka-vpc-destination-create-console"></a>

In den folgenden Schritten wird beschrieben, wie Sie mithilfe der AWS IoT Core Konsole ein Ziel erstellen.

1. Navigieren Sie zur AWS IoT Core Konsole. Wählen Sie im linken Bereich auf der Registerkarte **Aktion** die Option **Ziele** aus.

1. Geben Sie Werte für folgende Felder ein.
   + **VPC-ID**
   + **Subnetz IDs**
   + **Sicherheitsgruppe**

1. Wählen Sie eine Rolle aus, die über die erforderlichen Berechtigungen zum Erstellen von Netzwerkschnittstellen verfügt. Die obige Beispielrichtlinie enthält diese Berechtigungen.

Wenn der Zielstatus der Apache Kafka Virtual Private Cloud (VPC) **AKTIVIERT** ist, ist er einsatzbereit.

# CloudWatch Alarme
<a name="cloudwatch-alarms-rule-action"></a>

Die Aktion CloudWatch alarm (`cloudWatchAlarm`) ändert den Status eines CloudWatch Amazon-Alarms. Sie können den Grund für die Zustandsänderung und den Wert in diesem Aufruf angeben. 

## Voraussetzungen
<a name="cloudwatch-alarms-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `cloudwatch:SetAlarmState` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="cloudwatch-alarms-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`alarmName`  
Der Name des CloudWatch Alarms.  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`stateReason`  
Der Grund für die Alarmänderung  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`stateValue`  
Der Wert des Alarmzustands. Zulässige Werte: `OK`, `ALARM`, `INSUFFICIENT_DATA`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Die IAM-Rolle, die den Zugriff auf den CloudWatch Alarm ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#cloudwatch-alarms-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="cloudwatch-alarms-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine CloudWatch Alarmaktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "cloudwatchAlarm": {
                    "alarmName": "IotAlarm", 
                    "stateReason": "Temperature stabilized.",
                    "stateValue": "OK",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="cloudwatch-alarms-rule-action-see-also"></a>
+ [Was ist Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/) im * CloudWatch Amazon-Benutzerhandbuch*
+ [Verwenden von CloudWatch Amazon-Alarmen](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) im * CloudWatch Amazon-Benutzerhandbuch*

# CloudWatch Logs
<a name="cloudwatch-logs-rule-action"></a>

Die Aktion CloudWatch Logs (`cloudwatchLogs`) sendet Daten an Amazon CloudWatch Logs. Sie können `batchMode` verwenden, um mehrere Geräteprotokolldatensätze in einer Nachricht hochzuladen und mit einem Zeitstempel zu versehen. Sie können auch die Protokollgruppe angeben, an die die Aktion Daten sendet.

## Voraussetzungen
<a name="cloudwatch-logs-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung der `logs:PutLogEvents` Operationen `logs:CreateLogStream``logs:DescribeLogStreams`, und übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen vom Kunden verwalteten AWS KMS key KMS-Schlüssel verwenden, um Protokolldaten in CloudWatch Logs zu verschlüsseln, muss der Dienst die Erlaubnis haben, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Verschlüsseln von Protokolldaten in CloudWatch Logs using AWS KMS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) im *Amazon CloudWatch Logs-Benutzerhandbuch*.

## Anforderungen an das MQTT-Nachrichtenformat für `batchMode`
<a name="cloudwatch-logs-rule-action-message-format"></a>

Wenn Sie die Regelaktion „ CloudWatch Logs“ bei `batchMode` ausgeschalteter Option verwenden, gibt es keine Anforderungen an die Formatierung von MQTT-Nachrichten. (Hinweis: Der Standardwert des `batchMode` Parameters ist `false`.) Wenn Sie jedoch die Regelaktion CloudWatch Logs mit `batchMode` aktivierter Option verwenden (der Parameterwert ist`true`), müssen MQTT-Nachrichten, die geräteseitige Logs enthalten, so formatiert werden, dass sie einen Zeitstempel und eine Nachrichten-Payload enthalten. **Hinweis:** `timestamp` stellt den Zeitpunkt dar, zu dem das Ereignis eingetreten ist, und wird als Anzahl der Millisekunden nach dem 1. Januar 1970 00:00:00 UTC ausgedrückt.

Nachfolgend sehen Sie ein Beispiel des Veröffentlichungsformats:

```
[
  {"timestamp": 1673520691093, "message": "Test message 1"}, 
  {"timestamp": 1673520692879, "message": "Test message 2"}, 
  {"timestamp": 1673520693442, "message": "Test message 3"}
]
```

Je nachdem, wie die geräteseitigen Protokolle generiert werden, müssen sie möglicherweise gefiltert und neu formatiert werden, bevor sie gesendet werden, um diese Anforderung zu erfüllen. Weitere Informationen finden Sie unter [MQTT-Nachrichtennutzlast.](https://docs.aws.amazon.com/iot/latest/developerguide/topicdata.html)

Unabhängig vom `batchMode` Parameter muss der `message` Inhalt den Größenbeschränkungen für Nachrichten entsprechen. AWS IoT Weitere Informationen finden Sie unter [AWS IoT Core Endpunkte und -Kontingente](https://docs.aws.amazon.com/general/latest/gr/iot-core.html).

## Parameters
<a name="cloudwatch-logs-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`logGroupName`  
Die CloudWatch Protokollgruppe, in die die Aktion Daten sendet.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`roleArn`  
Die IAM-Rolle, die den Zugriff auf die CloudWatch Protokollgruppe ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#cloudwatch-logs-rule-action-requirements).   
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

(Optional) `batchMode`  
 Gibt an, ob Stapel von Protokolldatensätzen extrahiert und in diese hochgeladen werden. CloudWatch Zu den Werten gehört `true` oder `false` (Standard). Weitere Informationen finden Sie unter [Voraussetzungen](#cloudwatch-logs-rule-action-requirements).   
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="cloudwatch-logs-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine CloudWatch Logs-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "cloudwatchLogs": {
                    "logGroupName": "IotLogs",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw",
                    "batchMode": false                    
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="cloudwatch-logs-rule-action-see-also"></a>
+ [Was ist Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/) im *Amazon CloudWatch Logs-Benutzerhandbuch*

# CloudWatch Metriken
<a name="cloudwatch-metrics-rule-action"></a>

Die Aktion CloudWatch metric (`cloudwatchMetric`) erfasst eine CloudWatch Amazon-Metrik. Sie können den Namespace, den Namen, den Wert, die Einheit und den Zeitstempel der Metrik angeben. 

## Voraussetzungen
<a name="cloudwatch-metrics-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `cloudwatch:PutMetricData` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="cloudwatch-metrics-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`metricName`  
Der Name der CloudWatch Metrik.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`metricNamespace`  
Der Name des CloudWatch Metrik-Namespaces.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`metricUnit`  
Die metrische Einheit, die von CloudWatch unterstützt wird.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`metricValue`  
Eine Zeichenfolge, die den CloudWatch metrischen Wert enthält.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`metricTimestamp`  
(Optional) Eine Zeichenfolge mit dem Zeitstempel, ausgedrückt in Sekunden der Unix-Epochenzeit. Standardmäßig wird die aktuelle Unix-Epochenzeit verwendet.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Die IAM-Rolle, die den Zugriff auf die CloudWatch Metrik ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#cloudwatch-metrics-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="cloudwatch-metrics-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine CloudWatch Metrikaktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "cloudwatchMetric": {
                    "metricName": "IotMetric",
                    "metricNamespace": "IotNamespace", 
                    "metricUnit": "Count",
                    "metricValue": "1",
                    "metricTimestamp": "1456821314",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine CloudWatch metrische Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "cloudwatchMetric": {
                    "metricName": "${topic()}",
                    "metricNamespace": "${namespace}",
                    "metricUnit": "${unit}",
                    "metricValue": "${value}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="cloudwatch-metrics-rule-action-see-also"></a>
+ [Was ist Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/) im * CloudWatch Amazon-Benutzerhandbuch*
+ [Verwendung von CloudWatch Amazon-Metriken](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) im * CloudWatch Amazon-Benutzerhandbuch*

# DynamoDB
<a name="dynamodb-rule-action"></a>

Die Aktion DynamoDB (`dynamoDB`) schreibt eine MQTT-Nachricht ganz oder teilweise in eine Amazon DynamoDB-Tabelle. 

Sie können einem Tutorial folgen, das Ihnen veranschaulicht, wie Sie eine Regel mit einer DynamoDB-Aktion erstellen und testen. Weitere Informationen finden Sie unter [Tutorial: Gerätedaten in einer DynamoDB-Tabelle speichern](iot-ddb-rule.md).

**Anmerkung**  
Diese Regel schreibt Nicht-JSON-Daten als Binärdaten in DynamoDB. Die DynamoDB-Konsole zeigt die Daten als Base64-codierten Text an.

## Voraussetzungen
<a name="dynamodb-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des Vorgangs übernehmen AWS IoT kann. `dynamodb:PutItem` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+  Wenn Sie einen vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um ruhende Daten in DynamoDB zu verschlüsseln, muss der Dienst über die Berechtigung verfügen, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Kundenverwalteter KMS-Schlüssel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-cmk-customer-managed) im *Amazon DynamoDB Einführungshandbuch.*.

## Parameters
<a name="dynamodb-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`tableName`  
Der Name der DynamoDB-Tabelle.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`hashKeyField`  
Der Name des Hash-Schlüssels (auch Partitionsschlüssel genannt)  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`hashKeyType`  
(Optional) Der Datentyp des Hash-Schlüssels (auch Partitionsschlüssel genannt). Zulässige Werte: `STRING`, `NUMBER`.  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`hashKeyValue`  
Der Wert des Hash-Schlüssels Erwägen Sie die Verwendung einer Ersatzvorlage wie `${topic()}` oder `${timestamp()}`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`rangeKeyField`  
(Optional) Der Name des Bereichsschlüssels (auch Sortierschlüssel genannt).  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`rangeKeyType`  
(Optional) Der Datentyp des Bereichsschlüssels (auch Sortierschlüssel genannt). Zulässige Werte: `STRING`, `NUMBER`.  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`rangeKeyValue`  
(Optional) Der Wert des Bereichsschlüssels. Erwägen Sie die Verwendung einer Ersatzvorlage wie `${topic()}` oder `${timestamp()}`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`payloadField`  
(Optional) Der Name der Spalte, in die die Nutzlast geschrieben wird. Wenn Sie diesen Wert weglassen, wird die Nutzlast in die Spalte mit dem Namen `payload` geschrieben.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`operation`  
(Optional) Der Typ des auszuführenden Vorgangs. Zulässige Werte: `INSERT`, `UPDATE`, `DELETE`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleARN`  
Die IAM-Rolle, die den Zugriff auf die DynamoDB-Tabelle erlaubt. Weitere Informationen finden Sie unter [Voraussetzungen](#dynamodb-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

Die in die DynamoDB-Tabelle geschriebenen Daten sind das Ergebnis der SQL-Anweisung der Regel.

## Beispiele
<a name="dynamodb-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine DynamoDB-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * AS message FROM 'some/topic'", 
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "dynamoDB": {
                    "tableName": "my_ddb_table",
                    "hashKeyField": "key",
                    "hashKeyValue": "${topic()}",
                    "rangeKeyField": "timestamp",
                    "rangeKeyValue": "${timestamp()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="dynamodb-rule-action-see-also"></a>
+ [Was ist Amazon DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/) im *Amazon DynamoDB Entwicklerhandbuch*
+ [Erste Schritte mit DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) im *Amazon DynamoDB Entwicklerhandbuch*
+ [Tutorial: Gerätedaten in einer DynamoDB-Tabelle speichern](iot-ddb-rule.md)

# Dynamo DBv2
<a name="dynamodb-v2-rule-action"></a>

Die Dynamo DBv2 (`dynamoDBv2`) -Aktion schreibt eine MQTT-Nachricht ganz oder teilweise in eine Amazon DynamoDB-Tabelle. Jedes Attribut in der Payload wird in eine separate Spalte in der DynamoDB-Datenbank geschrieben.

## Voraussetzungen
<a name="dynamodb-v2-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des AWS IoT Vorgangs übernehmen kann. `dynamodb:PutItem` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Die MQTT-Nachrichtnutzlast muss einen Schlüssel auf Stammebene enthalten, der mit dem primären Partitionsschlüssel der Tabelle übereinstimmt, sowie über einen Schlüssel auf Stammebene, der mit dem primären Sortierschlüssel der Tabelle (sofern definiert) übereinstimmt.
+ Wenn Sie einen vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um ruhende Daten in DynamoDB zu verschlüsseln, muss der Dienst über die Berechtigung verfügen, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Kundenverwalteter KMS-Schlüssel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-cmk-customer-managed) im *Amazon DynamoDB Einführungshandbuch.*.

## Parameters
<a name="dynamodb-v2-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`putItem`  
Ein Objekt, das die DynamoDB-Tabelle angibt, in die die Nachrichtendaten geschrieben werden sollen. Dieses Objekt muss die folgenden Informationen enthalten:    
`tableName`  
Der Name der DynamoDB-Tabelle.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`roleARN`  
Die IAM-Rolle, die den Zugriff auf die DynamoDB-Tabelle erlaubt. Weitere Informationen finden Sie unter [Voraussetzungen](#dynamodb-v2-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

Die in die DynamoDB-Tabelle geschriebenen Daten sind das Ergebnis der SQL-Anweisung der Regel.

## Beispiele
<a name="dynamodb-v2-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine DBv2 Dynamo-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * AS message FROM 'some/topic'", 
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "dynamoDBv2": {
                    "putItem": {
                        "tableName": "my_ddb_table"
                    },
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2", 
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine DynamoDB-Aktion mit Ersatzvorlagen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2015-10-08",
        "actions": [
            {
                "dynamoDBv2": {
                    "putItem": {
                        "tableName": "${topic()}"
                    },
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="dynamodb-v2-rule-action-see-also"></a>
+ [Was ist Amazon DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/) im *Amazon DynamoDB Entwicklerhandbuch*
+ [Erste Schritte mit DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) im *Amazon DynamoDB Entwicklerhandbuch*

# Elasticsearch
<a name="elasticsearch-rule-action"></a>

Die Elasticsearch (`elasticsearch`) -Aktion schreibt Daten aus MQTT-Nachrichten in eine Amazon OpenSearch Service-Domain. Sie können dann Tools wie OpenSearch Dashboards verwenden, um Daten in Service abzufragen und zu visualisieren. OpenSearch 

**Warnung**  
Die `Elasticsearch` Aktion kann nur von vorhandenen Regelaktion verwendet werden. Um eine neue Regelaktion zu erstellen oder eine vorhandene Regelaktion zu aktualisieren, verwenden Sie stattdessen die `OpenSearch` Regelaktion. Weitere Informationen finden Sie unter [OpenSearch](opensearch-rule-action.md). 

## Voraussetzungen
<a name="elasticsearch-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `es:ESHttpPut` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um gespeicherte Daten zu verschlüsseln OpenSearch, muss der Dienst die Erlaubnis haben, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Verschlüsselung ruhender Daten für Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) im *Amazon OpenSearch Service Developer Guide*.

## Parameters
<a name="elasticsearch-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`endpoint`  
Der Endpunkt Ihrer Service-Domain  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`index`  
Der Index, in dem Sie die Daten speichern möchten  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`type`  
Der Typ des Dokuments, das Sie speichern  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`id`  
Der eindeutige Bezeichner für jedes Dokument  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleARN`  
Die IAM-Rolle, die den Zugriff auf die OpenSearch Service-Domain ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#elasticsearch-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="elasticsearch-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Elasticsearch-Aktion in einer AWS IoT Regel und zeigt, wie Sie die Felder für die `elasticsearch` Aktion angeben können. Weitere Informationen finden Sie unter [ElasticsearchAction](https://docs.aws.amazon.com/iot/latest/apireference/API_ElasticsearchAction.html).

```
{
    "topicRulePayload": {
        "sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "elasticsearch": {
                    "endpoint": "https://my-endpoint",
                    "index": "my-index",
                    "type": "my-type",
                    "id": "${newuuid()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_es"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine Elasticsearch-Aktion mit Ersatzvorlagen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "elasticsearch": {
                    "endpoint": "https://my-endpoint",
                    "index": "${topic()}",
                    "type": "${type}",
                    "id": "${newuuid()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_es"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="elasticsearch-rule-action-see-also"></a>
+ [OpenSearch](opensearch-rule-action.md)
+ [Was ist Amazon OpenSearch Service?](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/)

# HTTP
<a name="https-rule-action"></a>

Die Aktion HTTPS (`http`) sendet Daten von einer MQTT-Nachricht an einen HTTPS-Endpunkt, der auf eine Webanwendung oder einen Webdienst verweisen kann.

## Voraussetzungen
<a name="https-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Sie müssen die HTTPS-Endpunkte bestätigen und aktivieren, bevor sie von der Regel-Engine verwendet werden können. Weitere Informationen finden Sie unter [Ziele für HTTP-Aktionen](http-action-destination.md).

## Parameters
<a name="https-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`url`  
Der HTTPS-Endpunkt, an den die Nachricht mithilfe der HTTP-POST-Methode gesendet wird. Wenn Sie eine IP-Adresse anstelle eines Hostnamens verwenden, muss es sich um eine IPv4 Adresse handeln. IPv6 Adressen werden nicht unterstützt.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`confirmationUrl`  
(Optional) Falls angegeben, AWS IoT verwendet die Bestätigungs-URL, um ein passendes Ziel für die Themenregel zu erstellen. Sie müssen das HTTP-Aktionsziel aktivieren, bevor Sie es in einer HTTP-Aktion verwenden können. Weitere Informationen finden Sie unter [Ziele für HTTP-Aktionen](http-action-destination.md). Wenn Sie Ersatzvorlagen verwenden, müssen Sie manuell ein HTTP-Aktionsziel erstellen, bevor die `http` Aktion verwendet werden kann. `confirmationUrl`muss ein Präfix von `url` sein.  
Das Verhältnis zwischen `url` und `confirmationUrl` wird wie folgt beschrieben:  
+ Wenn `url` es fest codiert und nicht bereitgestellt `confirmationUrl` wird, behandeln wir das `url` Feld implizit als. `confirmationUrl` AWS IoT erstellt ein Ziel für eine Themenregel. `url`
+ Falls `url` und fest codiert `confirmationUrl` sind, `url` muss mit `confirmationUrl` beginnen. AWS IoT erstellt ein Ziel für `confirmationUrl` eine Themenregel.
+ Wenn `url` eine Ersetzungsvorlage enthält, müssen Sie `confirmationUrl` angeben und `url` muss mit `confirmationUrl` beginnen. Wenn es Ersatzvorlagen `confirmationUrl` enthält, müssen Sie manuell ein HTTP-Aktionsziel erstellen, bevor die `http` Aktion verwendet werden kann. Wenn `confirmationUrl` es keine Ersatzvorlagen enthält, AWS IoT erstellt es ein Ziel für eine Themenregel. `confirmationUrl`
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`headers`  
(Optional) Die Liste der Header, die in HTTP-Anfragen an den Endpunkt aufgenommen werden sollen. Jeder Header muss die folgenden Informationen enthalten:    
`key`  
Der Schlüssel des Headers.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein  
`value`  
Der Wert des Headers  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja
Der Standard-Inhaltstyp ist application/json , wenn die Payload im JSON-Format vorliegt. Andernfalls ist er „application/octet-stream“. Sie können ihn überschreiben, indem Sie im Header den genauen Inhaltstyp mit dem Schlüsselinhaltstyp angeben (ohne Berücksichtigung von Groß- und Kleinschreibung). 

`auth`  
(Optional) Die vom Regelmodul verwendete Authentifizierung, um eine Verbindung mit der im `url` Argument angegebenen Endpunkt-URL herzustellen. Derzeit ist Signature Version 4 der einzige unterstützte Authentifizierungstyp. Weitere Informationen finden Sie unter [HTTP-Autorisierung](https://docs.aws.amazon.com/iot/latest/apireference/API_HttpAuthorization.html).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`enableBatching`  
(Optional) Ob die HTTP-Aktionsnachrichten in einer einzigen Anfrage für eine bestimmte URL verarbeitet werden sollen. Der Wert kann wahr oder falsch sein. Weitere Informationen zur Batchverarbeitung finden Sie unter [Batching von HTTP-Aktionsnachrichten](http_batching.md).  
Boolescher Wert  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`batchConfig`  
(Optional) Konfigurationseinstellungen für die Batchverarbeitung. Nach der Aktivierung müssen `batchConfig` die Parameter angegeben werden. Wenn keine `batchConfig` Parameter angegeben werden, werden die Standardwerte verwendet.    
`maxBatchOpenMs`  
Die maximale Zeitspanne (in Millisekunden), für die eine ausgehende Nachricht darauf wartet, dass andere Nachrichten den Batch erstellen. Je höher die Einstellung, desto länger ist die Latenz der HTTP-Batch-Aktion.  
Mindestwert: 5 ms. Maximalwert: 200 ms.  
Standardwert: 20 ms  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein  
`maxBatchSize`  
Die maximale Anzahl von Nachrichten, die in einer einzigen Aktionsausführung gebündelt werden.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein  
Mindestwert: 2 Nachrichten. Höchstwert: 10 Nachrichten  
Standardwert: 10 Nachrichten  
`maxBatchSizeBytes`  
Maximale Größe eines Nachrichtenstapels in Byte.  
Mindestwert: 100 Byte. Maximalwert: 131.072 Byte  
Standardwert: 5.120 Byte  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein
Der Standard-Inhaltstyp ist, application/json wenn die Nutzlast im JSON-Format vorliegt. Andernfalls ist er „application/octet-stream“. Sie können ihn überschreiben, indem Sie im Header den genauen Inhaltstyp mit dem Schlüsselinhaltstyp angeben (ohne Berücksichtigung von Groß- und Kleinschreibung). 

## Beispiele
<a name="https-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine AWS IoT Regel mit einer HTTP-Aktion.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23", 
        "actions": [
            { 
                "http": { 
                    "url": "https://www.example.com/subpath",
                    "confirmationUrl": "https://www.example.com", 
                    "headers": [
                        { 
                            "key": "static_header_key", 
                            "value": "static_header_value" 
                        },
                        { 
                            "key": "substitutable_header_key", 
                            "value": "${value_from_payload}" 
                        }
                    ] 
                } 
            }
        ]
    }
}
```

```
"http": { 
    "url": "https://www.example.com/subpath",
    "confirmationUrl": "https://www.example.com", 
    "headers": [
        { 
            "key": "Content-Type",
            "value": "application/json"
          }
    ],
    "enableBatching": true, 
    "batchConfig": {     
      "maxBatchOpenMs": 123, 
      "maxBatchSize": 5, 
      "maxBatchSizeBytes": 131072,
     }
 },
 "errorAction": { 
        "http": { 
            "url": "https://www.example.com/subpath",
            "confirmationUrl": "https://www.example.com"
            // batchConfig is not allowed here
        }
}
```

## Logik zur Wiederholung von HTTP-Aktionen
<a name="https-rule-action-retry-logic"></a>

Die AWS IoT Regel-Engine wiederholt die HTTP-Aktion gemäß den folgenden Regeln:
+ Die Regel-Engine versucht mindestens einmal, eine Nachricht zu senden.
+ Die Regel-Engine wiederholt den Versuch höchstens zweimal. Die maximale Anzahl von Versuchen ist drei.
+ Die Regel-Engine unternimmt in folgenden Fällen keinen Wiederholungsversuch:
  + Der vorherige Versuch lieferte eine Antwort mit einer Größe von über 16.384 Bytes.
  + Der nachgeschaltete Webdienst oder die nachgeschaltete Anwendung schließt die TCP-Verbindung nach dem Versuch.
  + Die Gesamtzeit zum Abschließen einer Anforderung mit Wiederholungsversuchen hat das Zeitlimit für die Anforderung überschritten.
  + Die Anforderung gibt einen anderen HTTP-Statuscode als 429, 500–599 zurück.

**Anmerkung**  
Für Wiederholungen fallen die [Standardkosten für die Datenübertragung](https://aws.amazon.com/ec2/pricing/on-demand/) an.

## Weitere Informationen finden Sie auch unter
<a name="https-rule-action-see-also"></a>
+ [Batch-Verarbeitung von HTTP-Aktionsnachrichten](http_batching.md)
+ [Ziele für HTTP-Aktionen](http-action-destination.md)
+ [Leiten Sie Daten direkt von AWS IoT Core zu Ihren Webdiensten](https://aws.amazon.com/blogs/iot/route-data-directly-from-iot-core-to-your-web-services/) im *Internet der Dinge im Blog weiter AWS*

# Batch-Verarbeitung von HTTP-Aktionsnachrichten
<a name="http_batching"></a>

Sie können Batching verwenden, um mehrere HTTP-Aktionsnachrichten in einer einzigen Anfrage zu senden.

## -Übersicht
<a name="batching_overview"></a>

Durch Batching können Sie Nachrichten von der AWS IoT Core Rules Engine stapelweise an Ihre HTTP-Endpunkte senden. Mit dieser Funktion können Sie Ihre Kosten senken, indem Sie die Anzahl der ausgeführten HTTP-Aktionen verringern und die Effizienz verbessern, indem der mit der Einrichtung neuer Verbindungen verbundene Aufwand reduziert wird.

**Anmerkung**  
Die HTTP-Aktion im Batchmodus wird als einzelne Aktion berechnet. Die Zählung erfolgt in Schritten von 5 KiB, basierend auf der Größe der ausgehenden Batch-Payload, die von der Rules Engine an den AWS IoT Core Downstream-Service gesendet wird. Weitere Informationen finden Sie in der [AWS IoT Core Preisliste](https://aws.amazon.com/iot-core/pricing/).

Wenn Sie Batching in der Definition Ihrer IoT-Regelaktion aktivieren, stehen die folgenden Parameter für die Konfiguration zur Verfügung:

`maxBatchOpenMs`  
Die maximale Zeitspanne (in Millisekunden), für die eine ausgehende Nachricht darauf wartet, dass andere Nachrichten den Stapel erstellen. Je höher die Einstellung, desto länger ist die Latenz der HTTP-Batch-Aktion.  
Mindestwert: 5 ms. Maximalwert: 200 ms.  
Standardwert: 20 ms  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`maxBatchSize`  
Die maximale Anzahl von Nachrichten, die in einer einzigen Ausführung einer IoT-Regelaktion gebündelt werden.  
Mindestwert: 2 Nachrichten. Höchstwert: 10 Nachrichten  
Standardwert: 10 Nachrichten  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`maxBatchSizeBytes`  
Maximale Größe eines Nachrichtenstapels in Byte.  
Mindestwert: 100 Byte. Maximalwert: 131.072 Byte  
Standardwert: 5120 Byte  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

**Wichtig**  
Wenn Sie mehrere Batch-Parameter angeben, wird die Batchverarbeitung abgeschlossen, wenn das erste Limit erreicht ist. Wenn Sie beispielsweise 100 ms als maximale Batch-Öffnungszeit und 5 KiB als maximale Batch-Größe angeben und Rules Engine innerhalb von 100 ms nur 2 KiB stapelt, wird ein 2-KB-Batch erstellt und gesendet.

## Verwendung von HTTP-Headern in einem Batch
<a name="batching_http_headers"></a>

Wenn Sie in Ihrer HTTP-Aktion Header verwenden, verwendet die Batch-Anfrage den Header-Wert der letzten Nachricht, die dem Batch hinzugefügt wurde (nicht unbedingt die letzte Nachricht, die Sie veröffentlicht haben). Wir empfehlen die Verwendung von Header-Werten, die entweder:
+ Identisch für alle Nachrichten im Batch
+ Gilt für alle Nachrichten (z. B. Authentifizierungsdaten)

Die Header werden mit der HTTP-Anfrage gesendet und sind nicht Teil des Nachrichtentexts.

**Anmerkung**  
Wenn Batching aktiviert ist:  
Die Batch-Anfrage enthält automatisch den `Content-Type: application/json` Header, da der Batch als JSON-Array gesendet wird.
Wir können nicht garantieren, dass die letzte Nachricht im Batch die letzte Nachricht ist, die Sie veröffentlicht haben. Es ist die letzte Nachricht, die es in den Stapel geschafft hat.

## Beispiel für eine Nutzlast
<a name="batching_payload"></a>

Das folgende Beispiel zeigt die Struktur einer gebündelten Nachrichtennutzlast, die an Ihren HTTP-Endpunkt gesendet wird:

```
[
  {
    "user_id": "user1",
    "steps_today": 1000
  },
  {
    "user_id": "user2",
    "steps_today": 21000
  },
  {
    "user_id": "user8",
    "steps_today": 1500
  },
  ...
]
```

## Einschränkungen
<a name="batching_limitations"></a>

Im Folgenden sind Einschränkungen für die Batchverarbeitung aufgeführt:
+ AWS IoT Core garantiert nicht die allgemeine Reihenfolge der Nachrichten. Die Batchverarbeitung erfolgt lokal auf jedem Host, was dazu führen kann, dass Nachrichten innerhalb eines Batches in einer anderen Reihenfolge verarbeitet werden, als sie empfangen wurden.
+ AWS IoT Core bietet keine Unterstützung für die Nachrichtenverarbeitung auf der Empfängerseite. Sie sind dafür verantwortlich, dass Ihr Downstream-Service so konfiguriert ist, dass er Daten stapelweise akzeptiert und verarbeitet.
+ Kontoübergreifendes Batching wird nicht unterstützt, auch wenn Nachrichten für dieselbe Ressourcen-ID (HTTP-URL oder Ressourcen-ARN) bestimmt sind.
+ AWS IoT Core garantiert nicht, dass die Batchgröße der von Ihnen angegebenen Konfiguration entspricht. Je nach Zeitpunkt und Nachrichtenfluss können Batches unter Ihren konfigurierten Grenzwerten liegen.
+ Wenn Batching aktiviert ist, werden binäre Payloads (Nicht-UTF-8-Daten) nicht unterstützt. Nur UTF-8-Textnutzlasten (wie JSON) werden akzeptiert. Um Binärdaten zu senden, kodieren Sie sie mit Base64, bevor Sie sie an die HTTP-Aktion senden, und dekodieren Sie sie dann an Ihrem Empfangsendpunkt. Sie können beispielsweise die [Encode-Funktion](iot-sql-functions.html#iot-function-encode) in IoT-Regeln verwenden, um die binäre Nutzlast zu codieren. Alternativ können Sie die binäre Nutzlast in Ihrem IoT-Gerät codieren und auf veröffentlichen. AWS IoT Core

## Fehleraktionen beim Batching
<a name="batching_errors"></a>

Sie können in Ihrer Fehleraktionsdefinition keine separate Batching-Logik definieren. Ihre Fehleraktion unterstützt jedoch die Batchverarbeitung, wenn Sie in Ihrer primären Aktion eine Batching-Logik definiert haben.

Wenn eine Batchanforderung fehlschlägt, folgt AWS IoT Core die Rules Engine der [Wiederholungslogik für HTTP-Aktionen](https-rule-action.md#https-rule-action-retry-logic). Nach dem letzten Wiederholungsversuch wird eine Fehleraktion für den gesamten fehlgeschlagenen Batch aufgerufen.

Im Folgenden finden Sie ein Beispiel für eine Fehlermeldung mit aktivierter Batchverarbeitung:

```
{
    "ruleName": "FailedTopicRule",
    "topic": "topic/rulesengine",
    "payloadsWithMetadata": [
        {
            "id": 1,
            "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        },
        {
            "id": 2,
            "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        },
        {
            "id": 3,
            "cloudwatchTraceId": "ca441266-c2ce-c916-6aee-b9e5c7831675",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        }
    ],
    "failures": [
        {
            "affectedIds": [
                1,
                2,
                3
            ],
            "failedAction": "HttpAction",
            "failedResource": "https://example.foobar.com/HttpAction",
            "errorMessage": "HttpAction failed to make a request to the specified endpoint. StatusCode: 500. Reason: Internal Server Error."
        },
        {
            "affectedIds": [
                3
            ],
            "failedAction": "S3Action",
            "failedResource": "amzn-s3-demo-bucket",
            "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist"
        },
        {
            "affectedIds": [
                3
            ],
            "failedAction": "LambdaAction",
            "failedResource": "arn:aws:lambda:us-west-2:123456789012:function:dummy",
            "errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 403"
        }
    ]
}
```

**Anmerkung**  
Fehler bei gebündelten Aktionen führen auch zu größeren Nutzlasten für Fehleraktionen, wodurch sich die Wahrscheinlichkeit erhöhen kann, dass Fehleraktionen aufgrund ihrer Größe fehlschlagen. Mithilfe der Metrik können Sie fehlgeschlagene Fehleraktionen überwachen. `ErrorActionFailure` Weitere Informationen finden Sie unter [Regelaktionsmetriken](metrics_dimensions.md#rule-action-metrics).

## Batching von HTTP-Aktionsnachrichten mit dem AWS CLI
<a name="batching_procedure"></a>

### Erstellen oder Aktualisieren einer Regelaktion mit Batching
<a name="batching_create_update_rule"></a>

1. Verwenden Sie den entsprechenden AWS CLI Befehl, um eine Regel zu erstellen oder zu aktualisieren:
   + Verwenden Sie den [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)folgenden Befehl, um eine neue Regel zu erstellen:

     ```
     aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```
   + Verwenden Sie den [replace-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html)folgenden Befehl, um eine bestehende Regel zu aktualisieren:

     ```
     aws iot replace-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```

1. Aktivieren Sie die Batching-Funktionen, indem Sie den Parameter enableBatching in der Payload Ihrer Themenregel auf true setzen:

   ```
   {
           "topicRulePayload": {
           "sql": "SELECT * FROM 'some/topic'", 
           "ruleDisabled": false,
           "awsIotSqlVersion": "2016-03-23", 
           "actions": [
               { 
                   "http": { 
                       "url": "https://www.example.com/subpath",
                       "confirmationUrl": "https://www.example.com", 
                       "headers": [
                           { 
                               "key": "static_header_key", 
                               "value": "static_header_value" 
                           },
                           { 
                               "key": "substitutable_header_key", 
                               "value": "${value_from_payload}" 
                            }
                       ],
                       "enableBatching": true,
                       "batchConfig": {
                          "maxBatchOpenMs": 100,
                          "maxBatchSize": 5,
                          "maxBatchSizeBytes": 1024
                       }
                   }
               }
         ]
   }
   ```

1. Konfigurieren Sie die Batching-Parameter. Sie müssen nicht alle Batch-Parameter angeben. Sie können wählen, ob Sie 1, 2 oder alle 3 Batch-Parameter angeben möchten. Wenn Sie keinen Batch-Parameter angeben, aktualisiert Rules Engine diesen Parameter mit den Standardwerten. Weitere Informationen zu Batching-Parametern und ihren Standardwerten finden Sie unter [HTTP-Parameter](https-rule-action.md#https-rule-action-parameters).

# Ziele für HTTP-Aktionen
<a name="http-action-destination"></a>

Ein HTTP-Aktionsziel ist ein Webdienst, an den die Regel-Engine Daten aus einer Themenregel weiterleiten kann. Eine AWS IoT Core Ressource beschreibt den Webdienst für AWS IoT. Zielressourcen können nach unterschiedlichen Regeln gemeinsam genutzt werden.

Bevor Daten an einen anderen Webdienst gesendet werden AWS IoT Core können, muss dieser bestätigen, dass er auf den Endpunkt des Dienstes zugreifen kann.

## -Übersicht
<a name="http-action-destination-overview"></a>

Ein HTTP-Aktionsziel bezieht sich auf einen Webdienst, der eine Bestätigungs-URL und eine oder mehrere Datenerfassungen unterstützt URLs. Die Zielressource enthält die Bestätigungs-URL Ihres Webdienstes. Wenn Sie eine HTTP-Aktion konfigurieren, geben Sie die tatsächliche URL des Endpunkts, der die Daten erhalten soll, zusammen mit der Bestätigungs-URL des Webdienstes an. Nachdem Ihr Ziel bestätigt wurde, sendet die Themenregel das Ergebnis der SQL-Anweisung an den HTTPS-Endpunkt (und nicht an die Bestätigungs-URL).

Ein HTTP-Aktionsziel kann sich in einem der folgenden Zustände befinden:

ENABLED (AKTIVIERT)  
Das Ziel wurde bestätigt und kann von einer Regelaktion verwendet werden. Ein Ziel muss den Zustand `ENABLED` aufweisen, damit es in einer Regel verwendet werden kann. Sie können nur Ziele im Status „DISABLED“ aktivieren.

DISABLED (DEAKTIVIERT)  
Das Ziel wurde bestätigt, kann aber nicht von einer Regelaktion verwendet werden. Dies ist nützlich, wenn Sie Datenverkehr zu Ihrem Endpunkt vorübergehend aussetzen möchten, ohne den Bestätigungsvorgang erneut durchlaufen zu müssen. Sie können nur Ziele mit dem Status „ENABLED“ deaktivieren.

IN\$1PROGRESS  
Die Bestätigung des Ziels wird ausgeführt.

ERROR  
Zeitüberschreitung bei der Zielbestätigung.

Nachdem ein HTTP-Aktionsziel bestätigt und aktiviert wurde, kann es mit jeder Regel in Ihrem Konto verwendet werden.

## Verwaltung von HTTP-Aktionszielen
<a name="http-action-destination-managing"></a>

Sie können die folgenden Operationen verwenden, um Ihre HTTP-Aktionsziele zu verwalten.

### HTTP-Aktionsziele erstellen
<a name="http-action-destination-creating"></a>

Sie erstellen ein HTTP-Aktionsziel, indem Sie den `CreateTopicRuleDestination` Vorgang aufrufen oder die AWS IoT Konsole verwenden.

Nachdem Sie ein Ziel erstellt haben, AWS IoT sendet eine Bestätigungsanfrage an die Bestätigungs-URL. Die Bestätigungsanforderung hat das folgende Format:

```
HTTP POST {confirmationUrl}/?confirmationToken={confirmationToken}
Headers:
x-amz-rules-engine-message-type: DestinationConfirmation
x-amz-rules-engine-destination-arn:"arn:aws:iot:us-east-1:123456789012:ruledestination/http/7a280e37-b9c6-47a2-a751-0703693f46e4"
Content-Type: application/json
Body:
{
    "arn":"arn:aws:iot:us-east-1:123456789012:ruledestination/http/7a280e37-b9c6-47a2-a751-0703693f46e4",  
    "confirmationToken": "AYADeMXLrPrNY2wqJAKsFNn-…NBJndA",
    "enableUrl": "https://iot.us-east-1.amazonaws.com/confirmdestination/AYADeMXLrPrNY2wqJAKsFNn-…NBJndA",
    "messageType": "DestinationConfirmation"
}
```

Der Inhalt der Bestätigungsanforderung umfasst die folgenden Informationen:

arn  
Der Amazon-Ressourcenname (ARN) für das zu bestätigende HTTP-Aktionsziel.

confirmationToken  
Das Bestätigungstoken, gesendet von AWS IoT Core. Das Token im Beispiel ist gekürzt. Ihr tatsächliches Token ist länger. Sie benötigen dieses Token, um Ihr Ziel mit AWS IoT Core zu bestätigen.

enableUrl  
Die URL, zu der Sie navigieren, um ein Themenregelziel zu bestätigen.

messageType  
Der Nachrichtentyp.

### Bestätigung der Ziele für HTTP-Aktionen
<a name="http-action-destination-confirming"></a>

Wenn Sie den Endpunkt-Bestätigungsprozess verwenden, müssen Sie die folgenden Schritte ausführen AWS CLI, nachdem Ihre Bestätigungs-URL die Bestätigungsanfrage erhalten hat.

1. 

**Vergewissern Sie sich, dass das Ziel bereit ist, Nachrichten zu empfangen**  
Um zu bestätigen, dass das HTTP-Aktionsziel bereit ist, IoT-Nachrichten zu empfangen, rufen Sie entweder die `enableUrl` in der Bestätigungsanfrage auf oder führen Sie den `ConfirmTopicRuleDestination` API-Vorgang `confirmationToken` aus und übergeben Sie die Bestätigungsanfrage.

1. 

**Setzen Sie den Status der Themenregel auf aktiviert**  
Nachdem Sie bestätigt haben, dass das Ziel Nachrichten empfangen kann, müssen Sie den `UpdateTopicRuleDestination` API-Vorgang ausführen, um den Status der Themenregel auf zu setzen`ENABLED`.

Wenn Sie die AWS IoT Konsole verwenden, kopieren Sie die `confirmationToken` und fügen Sie sie in das Bestätigungsdialogfeld des Ziels in der AWS IoT Konsole ein. Anschließend können Sie die Themenregel aktivieren.

### Senden einer neuen Bestätigungsanforderung
<a name="trigger-confirm"></a>

Zum Aktivieren einer neuen Bestätigungsnachricht für ein Ziel rufen Sie `UpdateTopicRuleDestination` auf und legen den Zustand des Themenregelziels auf `IN_PROGRESS` fest. 

Wiederholen Sie den Bestätigungsvorgang, nachdem Sie eine neue Bestätigungsanforderung gesendet haben.

### Deaktivieren und Löschen eines HTTP-Aktionsziels
<a name="http-action-destination-deleting"></a>

Zum Deaktivieren eines Ziels rufen Sie `UpdateTopicRuleDestination` auf und legen den Zustand des Themenregelziels auf `DISABLED` fest. Eine Themenregel mit dem Status DISABLED (DEAKTIVIERT) kann wieder aktiviert werden, ohne dass eine neue Bestätigungsanforderung gesendet werden muss.

Um ein HTTP-Aktionsziel zu löschen, rufen Sie an. `DeleteTopicRuleDestination`

## Support durch Zertifizierungsstellen
<a name="http-action-destination-certificates"></a>

**Anmerkung**  
Selbstsignierte Zertifikate werden nicht unterstützt. 

 HTTPS-Endpunkte in einem HTTP-Aktionsziel unterstützen Zertifikate, die sowohl von [AWS Private Certificate Authority](https://www.amazontrust.com/repository/) als auch von [Lets](https://letsencrypt.org/certificates/) Encrypt ausgestellt wurden. 

# AWS IoT Events
<a name="iotevents-rule-action"></a>

Die Aktion AWS IoT Events (`iotEvents`) sendet Daten von einer MQTT-Nachricht an eine AWS IoT Events Eingabe. 

**Wichtig**  
Wenn die Payload AWS IoT Core ohne den gesendet wird oder wenn sich der `Input attribute Key` Schlüssel nicht in demselben JSON-Pfad befindet, der im Schlüssel angegeben ist, führt dies dazu, dass die IoT-Regel mit dem Fehler `Failed to send message to Iot Events` fehlschlägt.

## Voraussetzungen
<a name="iotevents-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `iotevents:BatchPutMessage` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="iotevents-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`batchMode`  
(Optional) Gibt an, ob die Ereignisaktionen als Batch verarbeitet werden sollen. Der Standardwert ist `false`.  
Wenn dies der `true` Fall `batchMode` ist und die SQL-Anweisung für die Regel ein Array ergibt, wird jedes Array-Element als separate Nachricht behandelt, wenn es durch einen Aufruf [https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchPutMessage.html](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchPutMessage.html)an AWS IoT Events gesendet wird. Das resultierende Array darf nicht mehr als 10 Nachrichten enthalten.  
Wenn `batchMode` `true` ist, können Sie kein `messageId` angeben.   
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`inputName`  
Der Name der AWS IoT Events Eingabe.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`messageId`  
(Optional) Verwenden Sie diese Option, um zu überprüfen, ob nur eine Eingabe (Nachricht) mit einem bestimmten Wert von einem AWS IoT Events Detektor verarbeitet `messageId` wird. Sie können die `${newuuid()}` Ersatzvorlage verwenden, um für jede Anfrage eine eindeutige ID zu generieren.  
Wenn `batchMode` `true` ist, können Sie `messageId` nicht angeben--ein neuer UUID-Wert wird zugewiesen.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Die IAM-Rolle, die es ermöglicht AWS IoT , eine Eingabe an einen AWS IoT Events Detektor zu senden. Weitere Informationen finden Sie unter [Voraussetzungen](#iotevents-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="iotevents-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine IoT-Ereignis-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "iotEvents": {
                    "inputName": "MyIoTEventsInput",
                    "messageId": "${newuuid()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_events"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="iotevents-rule-action-see-also"></a>
+ [Was ist AWS IoT Events?](https://docs.aws.amazon.com/iotevents/latest/developerguide/) im *AWS IoT Events Developer Guide*

# AWS IoT SiteWise
<a name="iotsitewise-rule-action"></a>

Die Aktion AWS IoT SiteWise (`iotSiteWise`) sendet Daten aus einer MQTT-Nachricht an die Asset-Eigenschaften in. AWS IoT SiteWise

Sie können einem Tutorial folgen, das Ihnen zeigt, wie Sie Daten von AWS IoT Dingen aufnehmen können. *Weitere Informationen finden Sie im [Tutorial Daten AWS IoT SiteWise aus AWS IoT Dingen](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/ingest-data-from-iot-things.html) aufnehmen oder im Abschnitt [Daten mithilfe von AWS IoT Kernregeln aufnehmen](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/iot-rules.html) im AWS IoT SiteWise Benutzerhandbuch.*

## Voraussetzungen
<a name="iotsitewise-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des Vorgangs übernehmen AWS IoT kann. `iotsitewise:BatchPutAssetPropertyValue` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  Sie können die folgende Beispiel-Vertrauensrichtlinie mit der Rolle verknüpfen.  
****  

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

  Um die Sicherheit zu erhöhen, können Sie in der `Condition` Eigenschaft einen Pfad zur AWS IoT SiteWise Asset-Hierarchie angeben. Das folgende Beispiel ist eine Vertrauensrichtlinie, die einen Komponentenhierarchiepfad angibt.  
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "iotsitewise:BatchPutAssetPropertyValue",
              "Resource": "*",
              "Condition": {
                  "StringLike": {
                      "iotsitewise:assetHierarchyPath": [
                          "/root node asset ID",
                          "/root node asset ID/*"
                      ]
              }
          }
          }
      ]
  }
  ```
+ Wenn Sie AWS IoT SiteWise mit dieser Aktion Daten an senden, müssen Ihre Daten die Anforderungen des `BatchPutAssetPropertyValue` Vorgangs erfüllen. Weitere Informationen finden Sie unter [BatchPutAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_BatchPutAssetPropertyValue.html) in der *AWS IoT SiteWise -API-Referenz*.

## Parameters
<a name="iotsitewise-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`putAssetPropertyValueEntries`  
Eine Liste mit Werteinträgen für die Komponenteneigenschaft, die jeweils die folgenden Informationen enthalten:    
`propertyAlias`  
(Optional) Der Eigenschaftenalias, der Ihrer Komponenteneigenschaft zugeordnet ist. Geben Sie entweder einen `propertyAlias` oder sowohl eine `assetId` als auch eine `propertyId` an. Weitere Informationen zu Eigenschaftsaliasnamen finden Sie unter [Zuordnen von industriellen Datenströmen zu Komponenteneigenschaften](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html) im *AWS IoT SiteWise -Benutzerhandbuch*.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`assetId`  
(Optional) Die ID des AWS IoT SiteWise Assets. Geben Sie entweder einen `propertyAlias` oder sowohl eine `assetId` als auch eine `propertyId` an.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`propertyId`  
(Optional) Die ID der Komponenteneigenschaft. Geben Sie entweder einen `propertyAlias` oder sowohl eine `assetId` als auch eine `propertyId` an.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`entryId`  
(Optional) Ein eindeutiger Bezeichner für diesen Eintrag. Definieren Sie die `entryId`, um besser zu nachzuverfolgen, welche Nachricht ggf. einen Fehler verursacht hat. Standardmäßig wird eine neue UUID verwendet.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`propertyValues`  
Eine Liste der einzufügenden Eigenschaftswerte, die jeweils Zeitstempel, Qualität und Wert (Timestamp, Quality and Value, TQV) im folgenden Format enthalten:    
`timestamp`  
Eine Zeitstempelstruktur, die die folgenden Informationen enthält:    
`timeInSeconds`  
Eine Zeichenfolge, die die Zeit in Sekunden in der Unix-Epochenzeit enthält. Wenn Ihre Nachrichtennutzlast keinen Zeitstempel hat, können Sie [timestamp()](iot-sql-functions.md#iot-function-timestamp) verwenden, der die aktuelle Zeit in Millisekunden zurückgibt. Um diese Zeit in Sekunden zu konvertieren, können Sie die folgende Ersetzungsvorlage verwenden: **\$1\$1floor(timestamp() / 1E3)\$1**.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`offsetInNanos`  
(Optional) Eine Zeichenfolge, die den Zeitversatz in Nanosekunden von der Zeit in Sekunden enthält. Wenn Ihre Nachrichtennutzlast keinen Zeitstempel hat, können Sie [timestamp()](iot-sql-functions.md#iot-function-timestamp) verwenden, der die aktuelle Zeit in Millisekunden zurückgibt. Um den Nanosekunden-Zeitversatz von diesem Zeitpunkt zu berechnen, können Sie die folgende Ersetzungsvorlage verwenden: **\$1\$1(timestamp() % 1E3) \$1 1E6\$1**.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja
In Bezug auf die Unix-Epochenzeit werden nur Einträge AWS IoT SiteWise akzeptiert, die einen Zeitstempel von bis zu 7 Tagen in der Vergangenheit und bis zu 5 Minuten in der future haben.  
`quality`  
(Optional) Eine Zeichenfolge, die die Qualität des Werts beschreibt. Zulässige Werte: `GOOD`, `BAD`, `UNCERTAIN`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`value`  
Eine Wertestruktur, die eines der folgenden Wertfelder enthält, je nach Datentyp der Komponenteneigenschaft:    
`booleanValue`  
(Optional) Eine Zeichenfolge, die den booleschen Wert des Werteintrags enthält.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`doubleValue`  
(Optional) Eine Zeichenfolge, die den doppelten Wert des Werteintrags enthält.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`integerValue`  
(Optional) Eine Zeichenfolge, die den Ganzzahlwert des Werteintrags enthält.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja  
`stringValue`  
(Optional) Der Zeichenfolgenwert des Werteintrags.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Der ARN der IAM-Rolle, die die AWS IoT Berechtigung zum Senden eines Vermögenseigenschaftswerts an AWS IoT SiteWise erteilt. Weitere Informationen finden Sie unter [Voraussetzungen](#iotsitewise-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="iotsitewise-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine grundlegende SiteWise IoT-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "iotSiteWise": {
                    "putAssetPropertyValueEntries": [
                        {
                            "propertyAlias": "/some/property/alias",
                            "propertyValues": [
                                {
                                    "timestamp": {
                                        "timeInSeconds": "${my.payload.timeInSeconds}"
                                    },
                                    "value": {
                                        "integerValue": "${my.payload.value}"
                                    }
                                }
                            ]
                        }
                    ],
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sitewise"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine SiteWise IoT-Aktion in einer AWS IoT Regel. In diesem Beispiel wird das Thema als Eigenschaftsalias und die `timestamp()` Funktion verwendet. Wenn Sie beispielsweise Daten in `/company/windfarm/3/turbine/7/rpm` veröffentlichen, sendet diese Aktion die Daten an die Komponenteneigenschaft mit einem Eigenschaftsalias, der dem von Ihnen angegebenen Thema entspricht.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "iotSiteWise": {
                    "putAssetPropertyValueEntries": [
                        {
                            "propertyAlias": "${topic()}",
                            "propertyValues": [
                                {
                                    "timestamp": {
                                        "timeInSeconds": "${floor(timestamp() / 1E3)}",
                                        "offsetInNanos": "${(timestamp() % 1E3) * 1E6}"
                                    },
                                    "value": {
                                        "doubleValue": "${my.payload.value}"
                                    }
                                }
                            ]
                        }
                    ],
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sitewise"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="iotsitewise-rule-action-see-also"></a>
+ [Was ist AWS IoT SiteWise?](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) im *AWS IoT SiteWise Benutzerhandbuch*
+ [Daten mithilfe von AWS IoT Core Regeln](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/iot-rules.html) im *AWS IoT SiteWise Benutzerhandbuch* aufnehmen
+ [Daten AWS IoT SiteWise aus AWS IoT Dingen](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/ingest-data-from-iot-things.html) *im Benutzerhandbuch aufnehmen AWS IoT SiteWise *
+ [Problembehandlung bei einer AWS IoT SiteWise Regelaktion](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/troubleshoot-rule.html) im *AWS IoT SiteWise Benutzerhandbuch*

# Firehose
<a name="kinesis-firehose-rule-action"></a>

Die Aktion Firehose (`firehose`) sendet Daten aus einer MQTT-Nachricht an einen Amazon Data Firehose-Stream. 

## Voraussetzungen
<a name="kinesis-firehose-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des AWS IoT Vorgangs übernehmen kann. `firehose:PutRecord` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie Firehose verwenden, um Daten an einen Amazon S3-Bucket zu senden, und Sie einen AWS KMS Kunden verwenden, der es geschafft hat, ruhende Daten in Amazon S3 AWS KMS key zu verschlüsseln, muss Firehose Zugriff auf Ihren Bucket und die Erlaubnis haben, diesen im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [Grant Firehose access to a Amazon S3 destination](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3) im *Amazon Data Firehose Developer Guide*.

## Parameters
<a name="kinesis-firehose-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`batchMode`  
(Optional) Ob der Firehose-Stream als Batch bereitgestellt werden soll, indem [https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html) Der Standardwert ist `false`.  
Wenn `batchMode` `true` ist und die SQL-Anweisung der Regel zu einem Array ausgewertet wird, bildet jedes Array-Element einen Datensatz in der `PutRecordBatch`-Anforderung. Das resultierende Array darf nicht mehr als 500 Datensätze enthalten.   
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`deliveryStreamName`  
Der Firehose-Stream, in den die Nachrichtendaten geschrieben werden sollen.  
Unterstützt [Ersatzvorlagen:](iot-substitution-templates.md) API und nur AWS CLI 

`separator`  
(Optional) Ein Zeichentrennzeichen, das verwendet wird, um Datensätze zu trennen, die in den Firehose geschrieben wurden. Wenn Sie diesen Parameter auslassen, verwendet der Stream kein Trennzeichen. Gültige Werte: `,` (Komma), `\t` (Tab), `\n` (Newline), `\r\n` (Windows Newline).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`roleArn`  
Die IAM-Rolle, die den Zugriff auf den Firehose-Stream ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#kinesis-firehose-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="kinesis-firehose-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Firehose-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "firehose": {
                    "deliveryStreamName": "my_firehose_stream",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_firehose"
                }
            }
        ] 
    }
}
```

Das folgende JSON-Beispiel definiert eine Firehose-Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "firehose": {
                    "deliveryStreamName": "${topic()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_firehose"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="kinesis-firehose-rule-action-see-also"></a>
+ [Was ist Amazon Data Firehose?](https://docs.aws.amazon.com/firehose/latest/dev/) im *Amazon Data Firehose Developer Guide*

# Kinesis Data Streams
<a name="kinesis-rule-action"></a>

Die Aktion Kinesis Data Streams (`kinesis`) schreibt Daten aus einer MQTT-Nachricht in Amazon Kinesis Data Streams. 

## Voraussetzungen
<a name="kinesis-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des AWS IoT Vorgangs übernehmen kann. `kinesis:PutRecord` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen AWS KMS vom Kunden verwalteten AWS KMS key (KMS-Schlüssel) verwenden, um ruhende Daten in Kinesis Data Streams zu verschlüsseln, muss der Service über die Erlaubnis verfügen, den im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [Berechtigungen zur Verwendung von benutzergenerierten AWS KMS keys](https://docs.aws.amazon.com/streams/latest/dev/permissions-user-key-KMS.html) im *Amazon Kinesis Data Streams Entwicklerhandbuch*.

## Parameters
<a name="kinesis-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`stream`  
Der Kinesis Data Stream, in den die Daten geschrieben werden  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`partitionKey`  
Der Partitionsschlüssel, mit dem bestimmt wird, in welchen Shard die Daten geschrieben werden. Der Partitionsschlüssel besteht in der Regel aus einem Ausdruck (z. B. `${topic()}` oder `${timestamp()}`).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Der ARN der IAM-Rolle, die die AWS IoT Berechtigung zum Zugriff auf den Kinesis-Datenstream gewährt. Weitere Informationen finden Sie unter [Voraussetzungen](#kinesis-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="kinesis-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Kinesis Data Streams Streams-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "kinesis": {
                    "streamName": "my_kinesis_stream", 
                    "partitionKey": "${topic()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_kinesis"
                }
            }
        ] 
    }
}
```

Das folgende JSON-Beispiel definiert eine Kinesis-Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "kinesis": {
                    "streamName": "${topic()}",
                    "partitionKey": "${timestamp()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_kinesis"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="kinesis-rule-action-see-also"></a>
+ [Was ist Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/) im *Entwicklerhandbuch für Amazon Kinesis Data Streams*

# Lambda
<a name="lambda-rule-action"></a>

Eine Lambda (`lambda`) -Aktion ruft eine AWS Lambda Funktion auf und übergibt eine MQTT-Nachricht. AWS IoT ruft Lambda-Funktionen asynchron auf.

Sie können einem Tutorial folgen, das Ihnen veranschaulicht, wie Sie eine Regel mit einer Lambda-Aktion erstellen und testen. Weitere Informationen finden Sie unter [Tutorial: Formatieren einer Benachrichtigung mithilfe einer AWS Lambda Funktion](iot-lambda-rule.md).

## Voraussetzungen
<a name="lambda-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+  AWS IoT Um eine Lambda-Funktion aufzurufen, müssen Sie eine Richtlinie konfigurieren, die die `lambda:InvokeFunction` Berechtigung dazu erteilt. AWS IoT Sie können nur eine Lambda-Funktion aufrufen, die in derselben AWS-Region definiert ist, in der Ihre Lambda-Richtlinie existiert. Lambda-Funktionen verwenden ressourcenbasierte Richtlinien, daher müssen Sie die Richtlinie an die Lambda-Funktion selbst anhängen. 

  Verwenden Sie den folgenden AWS CLI Befehl, um eine Richtlinie anzuhängen, die die Berechtigung erteilt. `lambda:InvokeFunction` Ersetzen Sie in diesem Befehl:
  + *function\$1name*mit dem Namen der Lambda-Funktion. Sie fügen eine neue Berechtigung hinzu, um die Ressourcenrichtlinie der Funktion zu aktualisieren.
  + *region*mit dem AWS-Region der Funktion.
  + *account-id*mit der AWS-Konto Nummer, unter der die Regel definiert ist.
  + *rule-name*mit dem Namen der AWS IoT Regel, für die Sie die Lambda-Aktion definieren.
  + *unique\$1id*mit einer eindeutigen Anweisungskennung.
**Wichtig**  
Wenn Sie eine Berechtigung für einen AWS IoT Prinzipal hinzufügen, ohne das `source-arn` oder anzugeben, kann jeder `source-account` AWS-Konto , der mit Ihrer Lambda-Aktion eine Regel erstellt, Regeln aktivieren, von denen aus Ihre Lambda-Funktion aufgerufen wird. AWS IoT

  Weitere Informationen finden Sie unter [AWS Lambda Berechtigungen](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html).

  ```
  aws lambda add-permission \ 
      --function-name function_name \ 
      --region region \ 
      --principal iot.amazonaws.com \
      --source-arn arn:aws:iot:region:account-id:rule/rule_name \
      --source-account account-id 
      --statement-id unique_id 
      --action "lambda:InvokeFunction"
  ```
+ Wenn Sie die AWS IoT Konsole verwenden, um eine Regel für die Lambda-Regelaktion zu erstellen, wird die Lambda-Funktion automatisch ausgelöst. Wenn Sie AWS CloudFormation stattdessen mit dem verwenden [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-lambdaaction.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-lambdaaction.html), müssen Sie eine [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html)Ressource hinzufügen. Die Ressource erteilt Ihnen dann die Erlaubnis, die Lambda-Funktion auszulösen.

  Der folgende Code zeigt ein Beispiel für das Hinzufügen dieser Ressource. Ersetzen Sie in diesem Beispiel:
  + *function\$1name*mit dem Namen der Lambda-Funktion.
  + *region*mit dem AWS-Region der Funktion.
  + *account-id*mit der AWS-Konto Nummer, unter der die Regel definiert ist.
  + *rule-name*mit dem Namen der AWS IoT Regel, für die Sie die Lambda-Aktion definieren.

  ```
  Type: AWS::Lambda::Permission
  Properties:
    Action: lambda:InvokeFunction
    FunctionName: !Ref function_name
    Principal: "iot.amazonaws.com"
    SourceAccount: account-id
    SourceArn: arn:aws:iot:region:account-id:rule/rule_name
  ```
+ Wenn Sie einen AWS KMS Kunden verwenden, der es geschafft hat AWS KMS key , ruhende Daten in Lambda zu verschlüsseln, muss der Dienst über die Erlaubnis verfügen, den im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [Verschlüsselung im Ruhezustand](https://docs.aws.amazon.com/lambda/latest/dg/security-dataprotection.html#security-privacy-atrest) im *Entwicklerhandbuch für AWS Lambda *.

## Parameters
<a name="lambda-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`functionArn`  
Der ARN der aufzurufenden Lambda-Funktion. AWS IoT muss die Erlaubnis haben, die Funktion aufzurufen. Weitere Informationen finden Sie unter [Voraussetzungen](#lambda-rule-action-requirements).  
Wenn Sie für Ihre Lambda-Funktion keine Version oder keinen Alias angeben, wird die neueste Version der Funktion heruntergefahren. Sie können eine Version oder einen Alias angeben, wenn Sie eine bestimmte Version Ihrer Lambda-Funktion herunterfahren möchten. Um eine Version oder einen Alias anzugeben, fügen Sie die Version oder den Alias dem ARN der Lambda-Funktion hinzu.  

```
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias
```
Weitere Informationen über Versionsverwaltung und Aliasse finden Sie unter [AWS Lambda Funktions-Versionsverwaltung und Aliasse](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).  
Unterstützt [Ersatzvorlagen:](iot-substitution-templates.md) API und nur AWS CLI 

## Beispiele
<a name="lambda-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Lambda-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "lambda": {
                    "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction"
                 }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine Lambda-Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "lambda": {
                    "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:${topic()}"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="lambda-rule-action-see-also"></a>
+ [Was ist? AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/) im *AWS Lambda Developer Guide*
+ [Tutorial: Formatieren einer Benachrichtigung mithilfe einer AWS Lambda Funktion](iot-lambda-rule.md)

# Speicherort
<a name="location-rule-action"></a>

Die Aktion Standort (`location`) sendet Ihre geografischen Standortdaten an [Amazon Location Service](https://docs.aws.amazon.com//location/latest/developerguide/welcome.html).

## Voraussetzungen
<a name="location-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `geo:BatchUpdateDevicePosition` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="location-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`deviceId`  
Die eindeutige ID des Geräts, das die Standortdaten bereitstellt. Weitere Informationen finden Sie unter [https://docs.aws.amazon.com//location/latest/APIReference/API_DevicePositionUpdate.html](https://docs.aws.amazon.com//location/latest/APIReference/API_DevicePositionUpdate.html) in der *Amazon Location Service API-Referenz*.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`latitude`  
Eine Zeichenfolge, die einen doppelten Wert ergibt, der den Breitengrad des Gerätestandorts darstellt.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`longitude`  
Eine Zeichenfolge, die einen doppelten Wert ergibt, der den Längengrad des Gerätestandorts darstellt.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Die IAM-Rolle, die Zugriff auf die Amazon-Location-Service-Domain gewährt. Weitere Informationen finden Sie unter [Voraussetzungen](#location-rule-action-requirements). 

`timestamp`  
Der Zeitpunkt, zu dem die Standortdaten erfasst wurden. Der Standardwert ist der Zeitpunkt, zu dem die MQTT-Nachricht verarbeitet wurde.  
Der `timestamp` Wert besteht aus den folgenden beiden Werten:  
+ `value`: Ein Ausdruck, der einen Wert für lange Epochenzeit zurückgibt. Sie können die [time\$1to\$1epoch (Zeichenfolge, Zeichenfolge)](iot-sql-functions.md#iot-sql-function-time-to-epoch) Funktion verwenden, um aus einem Datums- oder Uhrzeitwert, der in der Nachrichtennutzlast übergeben wurde, einen gültigen Zeitstempel zu erstellen. Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja
+ `unit`: (Optional) Die Genauigkeit des Zeitstempelwerts, die sich aus dem unter `value` beschriebenen Ausdruck ergibt. Zulässige Werte: `SECONDS` \$1 `MILLISECONDS` \$1 `MICROSECONDS` \$1 `NANOSECONDS`. Der Standardwert ist `MILLISECONDS`. Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und AWS CLI nur.

`trackerName`  
Der Name der Tracker-Ressource in Amazon Location, in der der Standort aktualisiert wird. Weitere Informationen finden Sie unter [Tracker](https://docs.aws.amazon.com//location/latest/developerguide/geofence-tracker-concepts.html#tracking-overview) im *Amazon Location Service Entwicklerhandbuch*.  
Unterstützt [Ersatzvorlagen:](iot-substitution-templates.md) API und nur AWS CLI 

## Beispiele
<a name="location-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Location-Aktion in einer AWS IoT Regel.

```
{
	"topicRulePayload": {
		"sql": "SELECT * FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"location": {
					"roleArn": "arn:aws:iam::123454962127:role/service-role/ExampleRole",
					"trackerName": "MyTracker",
					"deviceId": "001",
					"sampleTime": {
						"value": "${timestamp()}",
						"unit": "MILLISECONDS"
					},
					"latitude": "-12.3456",
					"longitude": "65.4321"
				}
			}
		]
	}
}
```

Das folgende JSON-Beispiel definiert eine Location-Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
	"topicRulePayload": {
		"sql": "SELECT * FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"location": {
					"roleArn": "arn:aws:iam::123456789012:role/service-role/ExampleRole",
					"trackerName": "${TrackerName}",
					"deviceId": "${DeviceID}",
					"timestamp": {
						"value": "${timestamp()}",
						"unit": "MILLISECONDS"
					},
					"latitude": "${get(position, 0)}",
					"longitude": "${get(position, 1)}"
				}
			}
		]
	}
}
```

Das folgende Beispiel für eine MQTT-Nutzlast zeigt, wie Ersatzvorlagen im vorherigen Beispiel auf Daten zugreifen. Sie können den [https://docs.aws.amazon.com/cli/latest/reference/location/get-device-position-history.html](https://docs.aws.amazon.com/cli/latest/reference/location/get-device-position-history.html) CLI-Befehl verwenden, um zu überprüfen, ob die MQTT-Nutzlastdaten in Ihrem Standort-Tracker geliefert werden.

```
{
	"TrackerName": "mytracker",
	"DeviceID": "001",
	"position": [
		"-12.3456",
		"65.4321"
	]
}
```

```
aws location get-device-position-history --device-id 001 --tracker-name mytracker
```

```
{
	"DevicePositions": [
		{
			"DeviceId": "001",
			"Position": [
				-12.3456,
				65.4321
			],
			"ReceivedTime": "2022-11-11T01:31:54.464000+00:00",
			"SampleTime": "2022-11-11T01:31:54.308000+00:00"
		}
	]
}
```

## Weitere Informationen finden Sie auch unter
<a name="location-rule-action-see-also"></a>
+ [Was ist Amazon Location Service?](https://docs.aws.amazon.com//location/latest/developerguide/welcome.html) im *Amazon Location Service Entwicklerhandbuch*.

# OpenSearch
<a name="opensearch-rule-action"></a>

Die Aktion OpenSearch (`openSearch`) schreibt Daten aus MQTT-Nachrichten in eine Amazon OpenSearch Service-Domain. Sie können dann Tools wie OpenSearch Dashboards verwenden, um Daten in OpenSearch Service abzufragen und zu visualisieren.

## Voraussetzungen
<a name="opensearch-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `es:ESHttpPut` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen Kunden einsetzen, der es geschafft hat, ruhende Daten im OpenSearch Service AWS KMS key zu verschlüsseln, muss der Service über die Erlaubnis verfügen, den KMS-Schlüssel im Namen des Anrufers zu verwenden. Weitere Informationen finden Sie unter [Verschlüsselung ruhender Daten für Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) im *Amazon OpenSearch Service Developer Guide*.

## Parameters
<a name="opensearch-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`endpoint`  
Der Endpunkt Ihrer Amazon OpenSearch Service-Domain.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`index`  
Der OpenSearch Index, in dem Sie Ihre Daten speichern möchten.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`type`  
Der Typ des Dokuments, das Sie speichern   
Für OpenSearch Versionen nach 1.0 muss der Wert des `type` Parameters sein`_doc`. Weitere Informationen finden Sie in der [OpenSearch -Dokumentation](https://opensearch.org/docs/1.0/opensearch/rest-api/document-apis/index-document/#response-body-fields).
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`id`  
Der eindeutige Bezeichner für jedes Dokument  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleARN`  
Die IAM-Rolle, die den Zugriff auf die OpenSearch Service-Domäne ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#opensearch-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Einschränkungen
<a name="opensearch-rule-action-limitations"></a>

Die Aktion OpenSearch (`openSearch`) kann nicht verwendet werden, um Daten an VPC-Elasticsearch-Cluster zu liefern.

## Beispiele
<a name="opensearch-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine OpenSearch Aktion in einer AWS IoT Regel und wie Sie die Felder für die `OpenSearch` Aktion angeben können. Weitere Informationen finden Sie unter [OpenSearchAction](https://docs.aws.amazon.com/iot/latest/apireference/API_OpenSearchAction.html).

```
{
    "topicRulePayload": {
        "sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "openSearch": {
                    "endpoint": "https://my-endpoint",
                    "index": "my-index",
                    "type": "_doc",
                    "id": "${newuuid()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_os"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine OpenSearch Aktion mit Ersatzvorlagen in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "openSearch": {
                    "endpoint": "https://my-endpoint",
                    "index": "${topic()}",
                    "type": "${type}",
                    "id": "${newuuid()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_os"
                }
            }
        ]
    }
}
```

**Anmerkung**  
Das ersetzte `type` Feld funktioniert für OpenSearch Version 1.0. Für alle Versionen nach 1.0 `type` muss der Wert von sein`_doc`.

## Weitere Informationen finden Sie auch unter
<a name="opensearch-rule-action-see-also"></a>

[Was ist Amazon OpenSearch Service?](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/) im *Amazon OpenSearch Service Developer Guide*

# Erneut veröffentlichen
<a name="republish-rule-action"></a>

Die Aktion neu veröffentlichen (`republish`) veröffentlicht eine MQTT-Nachricht erneut in einem anderen MQTT-Thema.

## Voraussetzungen
<a name="republish-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des Vorgangs übernehmen AWS IoT kann. `iot:Publish` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="republish-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`headers`  
Header-Informationen für MQTT Version 5.0.  
Weitere Informationen finden Sie unter [RepublishAction](https://docs.aws.amazon.com//iot/latest/apireference/API_RepublishAction.html) und [MqttHeaders](https://docs.aws.amazon.com//iot/latest/apireference/API_MqttHeaders.html) in der *AWS -API-Referenz*.

`topic`  
Das MQTT-Thema, für das die Nachricht erneut veröffentlicht werden soll  
Um in einem reservierten Thema, das mit `$` beginnt, erneut zu veröffentlichen, verwenden Sie stattdessen `$$`. Um zum Beispiel das Thema Geräteschatten `$aws/things/MyThing/shadow/update` neu zu veröffentlichen, geben Sie das Thema als `$$aws/things/MyThing/shadow/update` an.  
Das erneute Veröffentlichen zu [reservierten Jobthemen](reserved-topics.md#reserved-topics-job) wird nicht unterstützt.   
AWS IoT Device Defender Reserve-Themen unterstützen keine HTTP-Veröffentlichung.
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`qos`  
(Optional) Das QoS (Quality of Service)-Niveau, das verwendet werden soll, wenn Nachrichten erneut veröffentlicht werden. Zulässige Werte: `0`, `1`. Der Standardwert ist `0`. Weitere Informationen zu MQTT QoS finden Sie unter [MQTT](mqtt.md).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`roleArn`  
Die IAM-Rolle, die das Veröffentlichen im MQTT-Thema ermöglicht AWS IoT . Weitere Informationen finden Sie unter [Voraussetzungen](#republish-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="republish-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Aktion zum erneuten Veröffentlichen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "another/topic",
                    "qos": 1,
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine Aktion zur erneuten Veröffentlichung mit Ersatzvorlagen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "${topic()}/republish",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine Aktion zur erneuten Veröffentlichung `headers` in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "${topic()}/republish",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish",
                    "headers": {
                        "payloadFormatIndicator": "UTF8_DATA",
                        "contentType": "rule/contentType",
                        "correlationData": "cnVsZSBjb3JyZWxhdGlvbiBkYXRh",
                        "userProperties": [
                            {
                                "key": "ruleKey1",
                                "value": "ruleValue1"
                            },
                            {
                                "key": "ruleKey2",
                                "value": "ruleValue2"
                            }
                        ]
                    }
                }
            }
        ]
    }
}
```

**Anmerkung**  
Die ursprüngliche Quell-IP wird bei der [Aktion zur erneuten Veröffentlichung](#republish-rule-action) nicht weitergegeben.

# S3
<a name="s3-rule-action"></a>

Die S3 (`s3`) Aktion schreibt die Daten aus einer MQTT-Nachricht in einen Amazon Simple Storage Service (Amazon S3)-Bucket. 

## Voraussetzungen
<a name="s3-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `s3:PutObject` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen AWS KMS Kunden verwenden, der AWS KMS key zur Verschlüsselung ruhender Daten in Amazon S3 verwaltet wird, muss der Service über die Erlaubnis verfügen, den im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [AWS Verwaltet AWS KMS keys und vom Kunden verwaltet AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-cmks) im *Amazon Simple Storage Service Developer Guide*.

## Parameters
<a name="s3-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`bucket`  
Der Amazon S3-Bucket, in den die Daten geschrieben werden  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`cannedacl`  
(Optional) Die vordefinierte Amazon S3-ACL, der den Zugriff auf das Objekt steuert, das vom Objektschlüssel identifiziert wurde. Weitere Informationen, einschließlich der zulässigen Werte, finden Sie unter [Vordefinierter ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).   
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`key`  
Der Pfad zur Datei, in die die Daten geschrieben werden.  
Nehmen wir ein Beispiel, bei dem dieser Parameter `${topic()}/${timestamp()}` ist und die Regel eine Nachricht mit dem Thema `some/topic` empfängt. Wenn der aktuelle Zeitstempel `1460685389` ist, dann schreibt diese Aktion die Daten in eine Datei namens `1460685389` im Ordner `some/topic` des S3-Buckets.  
Wenn Sie einen statischen Schlüssel verwenden, wird bei jedem Aufruf der Regel eine einzelne Datei AWS IoT überschrieben. Wir empfehlen Ihnen, den Zeitstempel der Nachricht oder einen anderen eindeutigen Nachrichtenbezeichner zu verwenden, damit für jede empfangene Nachricht eine neue Datei in Amazon S3 gespeichert wird.
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Die IAM-Rolle, die den Zugriff auf den Amazon S3-Bucket ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#s3-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="s3-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine S3-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "s3": {
                    "bucketName": "amzn-s3-demo-bucket", 
                    "cannedacl": "public-read",
                    "key": "${topic()}/${timestamp()}",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="s3-rule-action-see-also"></a>
+ [Was ist Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) im *Entwicklerhandbuch für Amazon Simple Storage Service*

# Salesforce-IoT
<a name="salesforce-iot-rule-action"></a>

Die Salesforce IoT (`salesforce`) Aktion sendet Daten aus der die Regel auslösenden MQTT-Nachricht an einen Salesforce IoT-Eingabe-Stream. 

## Parameters
<a name="salesforce-iot-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`url`  
Die vom Salesforce IoT-Eingabe-Stream veröffentlichte URL. Die URL steht auf der Salesforce IoT-Plattform zur Verfügung, wenn Sie einen Eingabe-Stream erstellen. Weitere Informationen finden Sie in der Dokumentation zu Salesforce IoT  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`token`  
Das Token, das zum Authentifizieren des Zugriffs auf den angegebenen Salesforce IoT-Eingabe-Stream verwendet wird. Das Token steht auf der Salesforce IoT-Plattform zur Verfügung, wenn Sie einen Eingabe-Stream erstellen. Weitere Informationen finden Sie in der Dokumentation zu Salesforce IoT  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="salesforce-iot-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Salesforce IoT-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "salesforce": {
                    "token": "ABCDEFGHI123456789abcdefghi123456789",
                    "url": "https://ingestion-cluster-id.my-env.sfdcnow.com/streams/stream-id/connection-id/my-event"
                }
            }
        ]
    }
}
```

# SNS
<a name="sns-rule-action"></a>

Die Aktion SNS (`sns`) sendet die Daten aus einer MQTT-Nachricht als Amazon Simple Notification Service (Amazon SNS) Push-Nachricht.

Sie können einem Tutorial folgen, das Ihnen veranschaulicht, wie Sie eine Regel mit einer SNS-Aktion erstellen und testen. Weitere Informationen finden Sie unter [Tutorial: Senden einer Amazon SNS-Benachrichtigung](iot-sns-rule.md).

**Anmerkung**  
Die SNS-Aktion unterstützt keine [Amazon SNS-FIFO-Themen (First-In-First-Out)](https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html). Da die Regeln-Engine ein vollständig verteilter Dienst ist, gibt es keine Garantie für die Reihenfolge der Nachrichten, wenn die SNS-Aktion aufgerufen wird.

## Voraussetzungen
<a name="sns-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des Vorgangs übernehmen AWS IoT kann. `sns:Publish` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen vom AWS KMS Kunden verwalteten Dienst AWS KMS key zur Verschlüsselung ruhender Daten in Amazon SNS verwenden, muss der Service über die Erlaubnis verfügen, den im Namen des Anrufers AWS KMS key zu verwenden. Weitere Informationen dazu erhalten Sie unter [Schlüsselverwaltung](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) im *Entwicklerhandbuch für Amazon Simple Notification Service*.

## Parameters
<a name="sns-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`targetArn`  
Das SNS-Thema oder das individuelle Gerät, an das die Pushbenachrichtigung gesendet wird  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`messageFormat`  
(Optional) Das Nachrichtenformat. Amazon SNS verwendet diese Einstellung, um zu bestimmen, ob die Nutzlast analysiert werden soll und ob die relevanten plattformspezifischen Teile der Nutzlast extrahiert werden. Zulässige Werte: `JSON`, `RAW`. Standardeinstellung: `RAW`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`roleArn`  
Die IAM-Rolle, die den Zugriff auf SNS ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#sns-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="sns-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine SNS-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "sns": {
                    "targetArn": "arn:aws:sns:us-east-2:123456789012:my_sns_topic", 
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sns"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine SNS-Aktion mit Ersatzvorlagen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "sns": {
                    "targetArn": "arn:aws:sns:us-east-1:123456789012:${topic()}",
                    "messageFormat": "JSON",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sns"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="sns-rule-action-see-also"></a>
+ [Was ist Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/) im *Amazon Simple Notification Service-Entwicklerhandbuch*
+ [Tutorial: Senden einer Amazon SNS-Benachrichtigung](iot-sns-rule.md)

# SQS
<a name="sqs-rule-action"></a>

Die SQS (`sqs`) Aktion sendet Daten von einer MQTT-Nachricht an eine Amazon Simple Queue Service (Amazon SQS) Warteschlange.

**Anmerkung**  
Die SQS-Aktion unterstützt keine [Amazon SQS FIFO- (First-In-First-Out](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html)) Warteschlangen. Da die Regeln-Engine ein vollständig verteilter Service ist, gibt es keine Garantie für die Nachrichtenreihenfolge, wenn die SQS-Aktion ausgelöst wird.

## Voraussetzungen
<a name="sqs-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des Vorgangs übernehmen AWS IoT kann. `sqs:SendMessage` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen AWS KMS Kunden einsetzen, der es geschafft hat AWS KMS key , ruhende Daten in Amazon SQS zu verschlüsseln, muss der Service über die Erlaubnis verfügen, den im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [Schlüsselverwaltung](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) im *Amazon Simple Queue Service Entwicklerhandbuch*.

## Parameters
<a name="sqs-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`queueUrl`  
Die URL der Amazon SQS-Warteschlange, in die die Daten geschrieben werden Die Region in dieser URL muss nicht mit Ihrer AWS-Region [AWS IoT Regel](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) identisch sein.  
Bei AWS-Regionen Verwendung der SQS-Regelaktion können zusätzliche Gebühren für die grenzüberschreitende Datenübertragung anfallen. Weitere Informationen finden Sie unter [Amazon SQS SQS-Preise](https://aws.amazon.com/sqs/pricing/).
Unterstützt [Ersatzvorlagen:](iot-substitution-templates.md) API und nur AWS CLI 

`useBase64`  
Setzen Sie diesen Parameter auf `true`, um die Regelaktion so zu konfigurieren, dass sie die Nachrichtendaten Base64-kodiert, bevor sie in die Amazon SQS-Warteschlange geschrieben werden. Standardeinstellung: `false`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`roleArn`  
Die IAM-Rolle, die den Zugriff auf die Amazon SQS-Warteschlange ermöglicht. Weitere Informationen finden Sie unter [Voraussetzungen](#sqs-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="sqs-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine SQS-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "sqs": {
                    "queueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/my_sqs_queue", 
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs"
                }
            }
        ]
    }
}
```

Das folgende JSON-Beispiel definiert eine SQS-Aktion mit Ersatzvorlagen in einer Regel. AWS IoT 

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "sqs": {
                    "queueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/${topic()}",
                    "useBase64": true,
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="sqs-rule-action-see-also"></a>
+ [Was ist Amazon Simple Queue Service?](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/) im *Amazon Simple Queue Service-Entwicklerhandbuch*?

# Step Functions
<a name="stepfunctions-rule-action"></a>

Die Aktion Step Functions (`stepFunctions`) startet eine AWS Step Functions Zustandsmaschine.

## Voraussetzungen
<a name="stepfunctions-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung des `states:StartExecution` Vorgangs übernehmen AWS IoT kann. Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.

## Parameters
<a name="stepfunctions-rule-action-parameters"></a>

Wenn Sie eine AWS IoT Regel mit dieser Aktion erstellen, müssen Sie die folgenden Informationen angeben:

`stateMachineName`  
Der Name des zu startenden Step Functions-Zustandsautomaten.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`executionNamePrefix`  
(Optional) Der Name, der der Ausführung des Zustandsautomaten gegeben wird, besteht aus diesem Präfix, gefolgt von einer UUID. Step Functions erstellt einen eindeutigen Namen für jede Zustandsautomaten-Ausführung, sofern keiner angegeben wird.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Der ARN der Rolle, die die AWS IoT Erlaubnis zum Starten der Zustandsmaschine erteilt. Weitere Informationen finden Sie unter [Voraussetzungen](#stepfunctions-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

## Beispiele
<a name="stepfunctions-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Step Functions Functions-Aktion in einer AWS IoT Regel.

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "stepFunctions": {
                    "stateMachineName": "myStateMachine",
                    "executionNamePrefix": "myExecution",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_step_functions"
                }
            }
        ]
    }
}
```

## Weitere Informationen finden Sie auch unter
<a name="stepfunctions-rule-action-see-also"></a>
+ [Was ist AWS Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/) im *AWS Step Functions Developer Guide*

# Timestream
<a name="timestream-rule-action"></a>

Die Timestream-Regelaktion schreibt Attribute (Kennzahlen) aus einer MQTT-Nachricht in eine Amazon Timestream-Tabelle. Für weitere Informationen über Amazon Timestream, siehe [Was ist Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)

**Anmerkung**  
Amazon Timestream ist nicht in allen AWS-Region s verfügbar. Wenn Amazon Timestream in Ihrer Region nicht verfügbar ist, wird es nicht in der Liste der Regelaktionen angezeigt.

Die Attribute, die diese Regel in der Timestream-Datenbank speichert, sind diejenigen, die sich aus der Abfrageanweisung der Regel ergeben. Der Wert jedes Attributs im Ergebnis der Abfrageanweisung wird analysiert, um auf seinen Datentyp zu schließen (wie bei einer [Dynamo DBv2](dynamodb-v2-rule-action.md) Aktion). Der Wert jedes Attributs wird in einen eigenen Datensatz in der Timestream-Tabelle geschrieben. Um den Datentyp eines Attributs anzugeben oder zu ändern, verwenden Sie die [`cast()`](iot-sql-functions.md#iot-sql-function-cast) Funktion in der Abfrageanweisung. Weitere Informationen zum Inhalt der einzelnen Timestream-Datensätze finden Sie unter [Timestream-Datensatzinhalte](#timestream-rule-action-data).

**Anmerkung**  
Mit SQL V2 (23.03.2016) werden numerische Werte, die ganze Zahlen sind, wie z. B. `10.0`, in ihre Integer-Darstellung (`10`) umgewandelt. Sie explizit in einen `Decimal` Wert umzuwandeln, z. B. mithilfe der Funktion [cast ()](iot-sql-functions.md#iot-sql-function-cast), verhindert dieses Verhalten nicht — das Ergebnis ist immer noch ein `Integer` Wert. Dies kann zu Typkonflikten führen, die verhindern, dass Daten in der Timestream-Datenbank aufgezeichnet werden. Um ganzzahlige numerische Werte als `Decimal` Werte zu verarbeiten, verwenden Sie SQL V1 (2015-10-08) für die Regelabfrageanweisung.

**Anmerkung**  
Die maximale Anzahl von Werten, die eine Timestream-Regelaktion in eine Amazon Timestream-Tabelle schreiben kann, ist 100. Weitere Informationen finden Sie unter [Amazon Timestream Quota's Referenz](https://docs.aws.amazon.com//timestream/latest/developerguide/ts-limits.html#limits.default). 

## Voraussetzungen
<a name="timestream-rule-action-requirements"></a>

Diese Regelaktion hat die folgenden Anforderungen:
+ Eine IAM-Rolle, die die Ausführung der `timestream:DescribeEndpoints` AND-Operationen übernehmen AWS IoT kann. `timestream:WriteRecords` Weitere Informationen finden Sie unter [Gewähren Sie einer AWS IoT Regel den Zugriff, den sie benötigt](iot-create-role.md).

  In der AWS IoT Konsole können Sie eine Rolle auswählen, aktualisieren oder erstellen, um die Ausführung dieser Regelaktion AWS IoT zu ermöglichen.
+ Wenn Sie einen Kunden verwenden AWS KMS , um Daten im Ruhezustand in Timestream zu verschlüsseln, muss der Dienst die Erlaubnis haben, das im Namen des AWS KMS key Anrufers zu verwenden. Weitere Informationen finden Sie unter [So verwenden AWS Dienste KMS](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html). AWS 

## Parameters
<a name="timestream-rule-action-parameters"></a>

Wenn Sie mit dieser Aktion eine AWS IoT Regel erstellen, müssen Sie die folgenden Informationen angeben:

`databaseName`  
Der Name einer Amazon-Timestream-Datenbank, die über die Tabelle verfügt, in der die von dieser Aktion erstellten Datensätze empfangen werden sollen. Siehe auch `tableName`.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`dimensions`  
Metadatenattribute der Zeitreihen, die in jedem Messdatensatz geschrieben werden. Beispielsweise sind der Name und die Availability Zone einer EC2-Instance oder der Name des Herstellers einer Windkraftanlage Dimensionen.    
`name`  
Der Name der Metadatendimension. Dies ist der Name der Spalte im Datensatz der Datenbanktabelle.  
Dimensionen können nicht benannt werden: `measure_name`, `measure_value`, oder `time`. Diese Namen sind vorbehalten. Dimensionsnamen dürfen nicht mit `ts_` oder `measure_value` beginnen und dürfen keinen Doppelpunkt (`:`) enthalten.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein  
`value`  
Der Wert, der in diese Spalte des Datenbankdatensatzes geschrieben werden soll.  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Ja

`roleArn`  
Der Amazon-Ressourcenname (ARN) der Rolle, die AWS IoT die Berechtigung zum Schreiben in die Timestream-Datenbanktabelle gewährt. Weitere Informationen finden Sie unter [Voraussetzungen](#timestream-rule-action-requirements).  
Unterstützt [Ersatzvorlagen](iot-substitution-templates.md): Nein

`tableName`  
Der Name der Datenbanktabelle, in die die Messdatensätze geschrieben werden sollen. Siehe auch `databaseName`.  
Unterstützt [Substitutionsvorlagen](iot-substitution-templates.md): API und nur AWS CLI 

`timestamp`  
 Der Wert, der für den Zeitstempel des Eintrags verwendet werden soll. Wenn das Feld leer ist, wird die Zeit verwendet, zu der der Eintrag verarbeitet wurde.     
`unit`  
Die Genauigkeit des Zeitstempelwerts, die sich aus dem unter `value` beschriebenen Ausdruck ergibt.  
Zulässige Werte: `SECONDS` \$1 `MILLISECONDS` \$1 `MICROSECONDS` \$1 `NANOSECONDS`. Der Standardwert ist `MILLISECONDS`.  
`value`  
Ein Ausdruck, der einen Wert für lange Epochenzeit zurückgibt.  
Sie können die [time\$1to\$1epoch (Zeichenfolge, Zeichenfolge)](iot-sql-functions.md#iot-sql-function-time-to-epoch) Funktion verwenden, um einen gültigen Zeitstempel aus einem Datums- oder Uhrzeitwert zu erstellen, der in der Nachrichtennutzlast übergeben wurde. 

## Timestream-Datensatzinhalte
<a name="timestream-rule-action-data"></a>

Die durch diese Aktion in die Amazon Timestream-Tabelle geschriebenen Daten umfassen einen Zeitstempel, Metadaten aus der Timestream-Regelaktion und das Ergebnis der Abfrageanweisung der Regel.

Für jedes Attribut (Kennzahl) im Ergebnis der Abfrageanweisung schreibt diese Regelaktion einen Datensatz mit diesen Spalten in die angegebene Timestream-Tabelle.


|  Name der Spalte  |  Attribut Typ  |  Wert  |  Kommentare  | 
| --- | --- | --- | --- | 
|  *dimension-name*  |  DIMENSION  |  Der im Aktionseintrag für die Timestream-Regel angegebene Wert.  |  Jede im Regelaktionseintrag angegebene **Dimension** erstellt eine Spalte in der Timestream-Datenbank mit dem Namen der Dimension.  | 
|  measure\$1name  |  MEASURE\$1NAME  |  Der Name des Attributs  |  Der Name des Attributs im Ergebnis der Abfrageanweisung, dessen Wert in der `measure_value::data-type` Spalte angegeben ist.  | 
|  Messwert:: *data-type*  |  MESS\$1WERT  |  Der Wert des Attributs im Ergebnis der Abfrageanweisung. Der Name des Attributs steht in der `measure_name` Spalte.  |  Der Wert wird interpretiert\$1 und als die am besten geeignete Übereinstimmung von: `bigint`, `boolean`, `double`, oder `varchar` gewertet. Amazon Timestream erstellt für jeden Datentyp eine separate Spalte. Der Wert in der Nachricht kann mithilfe der [`cast()`](iot-sql-functions.md#iot-sql-function-cast) Funktion in der Abfrageanweisung der Regel in einen anderen Datentyp umgewandelt werden.  | 
|  time  |  TIMESTAMP (ZEITSTEMPEL)  |  Das Datum und die Uhrzeit des Datensatzes in der Datenbank.  |  Dieser Wert wird von der Regel-Engine oder der `timestamp` Eigenschaft zugewiesen, sofern sie definiert ist.  | 

\$1 Der aus der Nachrichtennutzlast gelesene Attributwert wird wie folgt interpretiert. Eine Veranschaulichung der einzelnen Fälle finden Sie in der [Beispiele](#timestream-rule-action-examples).
+ Ein Wert von `true` oder `false` ohne Anführungszeichen wird als `boolean` Typ interpretiert.
+ Eine dezimale Zahl wird als `double` Typ interpretiert.
+ Ein numerischer Wert ohne Dezimalpunkt wird als `bigint` Typ interpretiert.
+ Eine Zeichenfolge in Anführungszeichen wird als `varchar` Typ interpretiert.
+ Objekte und Array-Werte werden in JSON-Zeichenketten konvertiert und als `varchar` Typ gespeichert.

## Beispiele
<a name="timestream-rule-action-examples"></a>

Das folgende JSON-Beispiel definiert eine Timestream-Regelaktion mit einer Ersatzvorlage in einer Regel. AWS IoT 

```
{
  "topicRulePayload": {
    "sql": "SELECT * FROM 'iot/topic'",
    "ruleDisabled": false,
    "awsIotSqlVersion": "2016-03-23",
    "actions": [
      {
        "timestream": {
          "roleArn": "arn:aws:iam::123456789012:role/aws_iot_timestream",
          "tableName": "devices_metrics",
          "dimensions": [
            {
              "name": "device_id",
              "value": "${clientId()}"
            },
            {
              "name": "device_firmware_sku",
              "value": "My Static Metadata"
            }
          ],
          "databaseName": "record_devices"
        }
      }
    ]
  }
}
```

Die Verwendung der im vorherigen Beispiel definierten Timestream-Themenregelaktion mit der folgenden Nachrichtennutzlast führt zu den Amazon Timestream-Datensätzen, die in der folgenden Tabelle aufgeführt sind.

```
{
  "boolean_value": true,
  "integer_value": 123456789012,
  "double_value": 123.456789012,
  "string_value": "String value",
  "boolean_value_as_string": "true",
  "integer_value_as_string": "123456789012",
  "double_value_as_string": "123.456789012",
  "array_of_integers": [23,36,56,72],
  "array of strings": ["red", "green","blue"],
  "complex_value": {
    "simple_element": 42,
    "array_of_integers": [23,36,56,72],
    "array of strings": ["red", "green","blue"]
  }
}
```

In der folgenden Tabelle werden die Datenbankspalten und Datensätze angezeigt, die durch die Verwendung der angegebenen Themenregelaktion zur Verarbeitung der vorherigen Nachrichtennutzlast erstellt wurden. Die `device_firmware_sku` und `device_id` Spalten sind die DIMENSIONEN, die in der Themenregelaktion definiert sind. Die Timestream-Themenregelaktion erstellt die `time` Spalte und die `measure_name` und `measure_value::*` Spalten, die sie mit den Werten aus dem Ergebnis der Abfrageanweisung der Themenregelaktion füllt. 


| device\$1firmware\$1sku | Gerät\$1ID | measure\$1name | Messwert::bigint | Messwert::varchar | Messwert::doppelt | Messwert::boolean | time | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Meine statischen Metadaten | iotconsole-159 -0 EXAMPLE738 | komplexer\$1Wert | - | \$1"simple\$1element":42,"array\$1of\$1integers":[23,36,56,72],"array of strings":["red","green","blue"]\$1 | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | Integer\$1Wert\$1als\$1Zeichenfolge | - | 123456789012 | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | boolescher\$1Wert | - | - | - | TRUE | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | Integer\$1Wert | 123456789012 | - | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | Zeichenfolge\$1Wert | - | Zeichenfolge\$1Wert | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | Array\$1von\$1ganzen\$1Zahlen | - | [23,36,56,72] | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | Zeichenfolgen-Array | - | ["red","green","blue"] | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | boolescher\$1Wert\$1als\$1Zeichenfolge | - | TRUE | - | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | iot-Konsole-159 -0 EXAMPLE738 | doppelter\$1Wert | - | - | 123,456789012 | - | 2020-08-26 22:42:16.423000000 | 
| Meine statischen Metadaten | IoT-Konsole-159 -0 EXAMPLE738 | doppelter Wert\$1als\$1Zeichenfolge | - | 123,45679 | - | - | 2020-08-26 22:42:16.423000000 | 

## Fehlerbehebung bei einer Regel
<a name="iot-troubleshoot-rule"></a>

Wenn Sie ein Problem mit Ihren Regeln haben, empfehlen wir Ihnen, Logs zu aktivieren. CloudWatch Sie können Ihre Protokolle analysieren, um festzustellen, ob es sich um ein Berechtigungsproblem handelt oder ob z. B. eine WHERE-Klausel-Bedingung nicht zutraf. Weitere Informationen finden Sie unter [ CloudWatch Protokolle einrichten](https://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html).

# Mithilfe von Regeln auf kontoübergreifende Ressourcen zugreifen AWS IoT
<a name="accessing-cross-account-resources-using-rules"></a>

Sie können AWS IoT Regeln für den kontoübergreifenden Zugriff konfigurieren, sodass Daten, die zu MQTT-Themen eines Kontos aufgenommen wurden, an die AWS Dienste wie Amazon SQS und Lambda eines anderen Kontos weitergeleitet werden können. Im Folgenden wird erklärt, wie AWS IoT Regeln für die kontoübergreifende Datenaufnahme eingerichtet werden, und zwar von einem MQTT-Thema in einem Konto bis hin zu einem Ziel in einem anderen Konto. 

Kontoübergreifende Regeln können mithilfe [ressourcenbasierter Berechtigungen](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#TypesPermissions) für die Zielressource konfiguriert werden. Daher können nur Ziele, die ressourcenbasierte Berechtigungen unterstützen, für den kontenübergreifenden Zugriff mit Regeln aktiviert werden. AWS IoT Zu den unterstützten Zielen gehören Amazon SQS, Amazon SNS, Amazon S3 und AWS Lambda. 

**Anmerkung**  
Für die unterstützten Ziele, mit Ausnahme von Amazon SQS, müssen Sie die Regel in derselben Weise AWS-Region wie die Ressource eines anderen Dienstes definieren, damit die Regelaktion mit dieser Ressource interagieren kann. Weitere Informationen zu AWS IoT Regelaktionen finden Sie unter [AWS IoT Regelaktionen](iot-rule-actions.md). Weitere Informationen zur SQS-Aktion einer Regel finden Sie unter[SQS](sqs-rule-action.md).

## Voraussetzungen
<a name="cross-account-prerequisites"></a>
+ Vertrautheit mit [AWS IoT Regeln](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)
+ Ein Verständnis von [IAM-Benutzern](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html), [-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) und [ressourcenbasierten Berechtigungen](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html#TypesPermissions)
+ Nach der [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) Installation

## Kontoübergreifende Einrichtung für Amazon SQS
<a name="cross-account-sqs"></a>

Szenario: Konto A sendet Daten aus einer MQTT-Nachricht an die Amazon SQS-Warteschlange von Konto B.


| AWS-Konto | Konto bezeichnet als  | Description | 
| --- | --- | --- | 
| 1111-1111-1111 | Konto A | Regelaktion: sqs:SendMessage | 
| 2222-2222-2222 | Konto B | Amazon-SQS-Warteschlange [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/accessing-cross-account-resources-using-rules.html)  | 

**Anmerkung**  
Ihre Amazon SQS SQS-Zielwarteschlange muss sich nicht in derselben Warteschlange AWS-Region wie Ihre [AWS IoT Regel](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) befinden. Weitere Informationen zur SQS-Aktion der Regel finden Sie unter. [SQS](sqs-rule-action.md)

**Erledigen der Aufgaben von Konto A**
**Hinweis**  
Um die folgenden Befehle auszuführen, muss Ihr IAM-Benutzer über die Berechtigung `iot:CreateTopicRule` mit dem Amazon Resource Name (ARN) der Regel als Ressource und über die Berechtigung `iam:PassRole` Aktion mit einer Ressource als ARN der Rolle verfügen.

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) unter Verwendung des IAM-Benutzers von Konto A. 

1. Erstellen Sie eine IAM-Rolle, die der AWS IoT Regel-Engine vertraut, und fügen Sie eine Richtlinie hinzu, die den Zugriff auf die Amazon SQS SQS-Warteschlange von Konto B ermöglicht. Beispielbefehle und Richtliniendokumente finden Sie unter [Gewährung AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html) des erforderlichen Zugriffs.

1. Um eine Regel zu erstellen, die an ein Thema angehängt ist, führen Sie den [create-topic-rule Befehl aus](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html).

   ```
   aws iot create-topic-rule --rule-name myRule --topic-rule-payload file://./my-rule.json
   ```

   Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in die angegebene Amazon SQS-Warteschlange einfügt. Die SQL-Anweisung filtert die Nachrichten und der Rollen-ARN gewährt AWS IoT die Berechtigung, die Nachricht zur Amazon SQS-Warteschlange hinzuzufügen.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sqs": {
   				"queueUrl": "https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role",
   				"useBase64": false
   			}
   		}
   	]
   }
   ```

   Weitere Informationen zur Definition einer Amazon SQS-Aktion in einer AWS IoT Regel finden Sie unter [AWS IoT Regelaktionen — Amazon SQS](https://docs.aws.amazon.com/iot/latest/developerguide/sqs-rule-action.html).

**Erledigen der Aufgaben von Konto B**

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) mithilfe des IAM-Benutzers von Konto B. 

1. Um Konto A Berechtigungen für die Amazon SQS-Warteschlangenressource zu erteilen, führen Sie den Befehl [add-permission](https://docs.aws.amazon.com/cli/latest/reference/sqs/add-permission.html) aus.

   ```
   aws sqs add-permission --queue-url https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue --label SendMessagesToMyQueue --aws-account-ids 1111-1111-1111 --actions SendMessage
   ```

## Kontoübergreifende Einrichtung für Amazon SNS
<a name="cross-account-sns"></a>

Szenario: Konto A sendet Daten von einer MQTT-Nachricht an ein Amazon SNS Thema von Konto B.


| AWS-Konto | Konto bezeichnet als  | Description | 
| --- | --- | --- | 
| 1111-1111-1111 | Konto A | Regelaktion: sns:Publish | 
| 2222-2222-2222 | Konto B | ARN des Amazon-SNS-Themas: arn:aws:sns:region:2222-2222-2222:ExampleTopic  | 

**Erledigen der Aufgaben von Konto A**
**Hinweise**  
 Um die folgenden Befehle auszuführen, sollte Ihr IAM-Benutzer über Berechtigungen für die `iot:CreateTopicRule` Regel ARN als Ressource und über Berechtigungen für die `iam:PassRole` Aktion mit einer Ressource als Rolle ARN verfügen.

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) unter Verwendung des IAM-Benutzers von Konto A. 

1. Erstellen Sie eine IAM-Rolle, die der AWS IoT Regel-Engine vertraut, und fügen Sie eine Richtlinie hinzu, die den Zugriff auf das Amazon SNS SNS-Thema von Konto B ermöglicht. Befehle und Richtliniendokumente finden Sie beispielsweise unter [Gewährung AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html) des erforderlichen Zugriffs.

1. Um eine Regel zu erstellen, die an ein Thema angehängt ist, führen Sie den [create-topic-rule Befehl aus](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html).

   ```
   aws iot create-topic-rule --rule-name myRule --topic-rule-payload file://./my-rule.json
   ```

   Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in die angegebene -Amazon SNS Thema einfügt. Die SQL-Anweisung filtert die Nachrichten, und die Rollen-ARN gewährt AWS IoT Berechtigungen zum Senden der Nachricht an das Amazon SNS Thema.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sns": {
   				"targetArn": "arn:aws:sns:region:2222-2222-2222:ExampleTopic",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

   Weitere Informationen zur Definition einer Amazon SNS-Aktion in einer AWS IoT Regel finden Sie unter [AWS IoT Regelaktionen — Amazon SNS](https://docs.aws.amazon.com/iot/latest/developerguide/sns-rule-action.html).

**Erledigen der Aufgaben von Konto B**

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) mithilfe des IAM-Benutzers von Konto B. 

1. Um Konto A die Erlaubnis für die Amazon SNS-Themenressource zu erteilen, führen Sie den Befehl [add-permission](https://docs.aws.amazon.com/cli/latest/reference/sns/add-permission.html) aus.

   ```
   aws sns add-permission --topic-arn arn:aws:sns:region:2222-2222-2222:ExampleTopic --label Publish-Permission --aws-account-id 1111-1111-1111 --action-name Publish
   ```

## Kontoübergreifende Einrichtung für Amazon S3
<a name="cross-account-s3"></a>

Szenario: Konto A sendet Daten von einer MQTT-Nachricht an einen Amazon-S3-Bucket von Konto B.


| AWS-Konto | Konto bezeichnet als  | Description | 
| --- | --- | --- | 
| 1111-1111-1111 | Konto A | Regelaktion: s3:PutObject | 
| 2222-2222-2222 | Konto B | Amazon S3-Bucket ARN: arn:aws:s3:::amzn-s3-demo-bucket  | 

**Erledigen der Aufgaben von Konto A**
**Hinweis**  
Um die folgenden Befehle auszuführen, sollte Ihr IAM-Benutzer über Berechtigungen für `iot:CreateTopicRule` mit der Regel ARN als Ressource und über Berechtigungen für `iam:PassRole` Aktionen mit einer Ressource als Rolle ARN verfügen.

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) unter Verwendung des IAM-Benutzers von Konto A. 

1. Erstellen Sie eine IAM-Rolle, die der AWS IoT Regel-Engine vertraut, und fügen Sie eine Richtlinie hinzu, die den Zugriff auf den Amazon S3 S3-Bucket von Konto B ermöglicht. Befehle und Richtliniendokumente finden Sie beispielsweise unter [Gewährung AWS IoT des](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html) erforderlichen Zugriffs.

1. Führen Sie den [create-topic-rule Befehl](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html) aus, um eine Regel zu erstellen, die an Ihren Ziel-S3-Bucket angehängt ist.

   ```
   aws iot create-topic-rule --rule-name my-rule --topic-rule-payload file://./my-rule.json
   ```

   Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in den angegebenen Amazon S3-Bucket einfügt. Die SQL-Anweisung filtert die Nachrichten und der Rollen-ARN gewährt AWS IoT die Berechtigung zum Hinzufügen der Nachricht zum Amazon S3-Bucket.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"s3": {
   				"bucketName": "amzn-s3-demo-bucket",
   				"key": "${topic()}/${timestamp()}",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

   Weitere Informationen zur Definition einer Amazon S3-Aktion in einer AWS IoT Regel finden Sie unter [AWS IoT Regelaktionen — Amazon S3](https://docs.aws.amazon.com/iot/latest/developerguide/s3-rule-action.html).

**Erledigen der Aufgaben von Konto B**

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) mithilfe des IAM-Benutzers von Konto B. 

1. Erstellen Sie eine Bucket-Richtlinie, die dem Prinzipal von Konto A vertraut.

   Im Folgenden finden Sie ein Beispiel für eine Payload-Datei, die eine Bucket-Richtlinie definiert, die dem Prinzipal eines anderen Kontos vertraut.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AddCannedAcl",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::123456789012:root"
                   ]
           },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

   Weitere Informationen finden Sie unter [Beispiele für Bucket-Richtlinien](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-1).

1. Um die Bucket-Richtlinie an den angegebenen Bucket anzuhängen, führen Sie den [put-bucket-policy Befehl aus](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html).

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./amzn-s3-demo-bucket-policy.json
   ```

1. Damit der kontoübergreifende Zugriff funktioniert, stellen Sie sicher, dass Sie die richtigen Einstellungen für **Blockieren des gesamten öffentlichen Zugangs** ausgewählt haben. Weitere Informationen finden Sie unter [Bewährte Methoden für die Sicherheit in Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Kontoübergreifende Einrichtung für AWS Lambda
<a name="cross-account-lambda"></a>

Szenario: Konto A ruft eine AWS Lambda Funktion von Konto B auf und übergibt eine MQTT-Nachricht.


| AWS-Konto | Konto bezeichnet als  | Description | 
| --- | --- | --- | 
| 1111-1111-1111 | Konto A | Regelaktion: lambda:InvokeFunction | 
| 2222-2222-2222 | Konto B | ARN der Lambda-Funktion:  arn:aws:lambda:region:2222-2222-2222:function:example-function  | 

**Erledigen der Aufgaben von Konto A**
**Hinweise**  
 Um die folgenden Befehle ausführen zu können, sollte Ihr IAM-Benutzer über Berechtigungen für `iot:CreateTopicRule` mit der Regel ARN als Ressource und über Berechtigungen für `iam:PassRole` Aktionen mit der Ressource als Rolle ARN verfügen.

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) unter Verwendung des IAM-Benutzers von Konto A. 

1. Führen Sie den [create-topic-rule Befehl aus](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html), um eine Regel zu erstellen, die den kontoübergreifenden Zugriff auf die Lambda-Funktion von Konto B definiert.

   ```
   aws iot create-topic-rule --rule-name my-rule --topic-rule-payload file://./my-rule.json
   ```

   Im Folgenden finden Sie ein Beispiel für eine Nutzlastdatei mit einer Regel, die alle an das `iot/test` Thema gesendeten Nachrichten in die angegebene Lambda-Funktion einfügt. Die SQL-Anweisung filtert die Nachrichten und die Rolle ARN erteilt AWS IoT die Berechtigung, die Daten an die Lambda-Funktion zu übergeben.

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"lambda": {
   				"functionArn": "arn:aws:lambda:region:2222-2222-2222:function:example-function"
   			}
   		}
   	]
   }
   ```

   Weitere Informationen zum Definieren einer AWS Lambda Aktion in einer AWS IoT Regel finden Sie unter [AWS IoT Regelaktionen — Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html).

**Erledigen der Aufgaben von Konto B**

1. [Konfigurieren Sie AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) mithilfe des IAM-Benutzers von Konto B. 

1. Führen Sie den [Befehl add-permission von Lambda aus](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html), um AWS IoT Regeln die Erlaubnis zur Aktivierung der Lambda-Funktion zu erteilen. Um den folgenden Befehl auszuführen, sollte Ihr IAM-Benutzer über die entsprechende Berechtigung für `lambda:AddPermission` Aktion verfügen.

   ```
   aws lambda add-permission --function-name example-function --region us-east-1 --principal iot.amazonaws.com --source-arn arn:aws:iot:region:1111-1111-1111:rule/example-rule --source-account 1111-1111-1111 --statement-id "unique_id" --action "lambda:InvokeFunction"
   ```

   **Optionen:**

   **--Prinzipal**

    Dieses Feld gibt AWS IoT (dargestellt durch`iot.amazonaws.com`) die Erlaubnis, die Lambda-Funktion aufzurufen.

   **--source-arn**

   Dieses Feld bestätigt, dass diese Lambda-Funktion nur `arn:aws:iot:region:1111-1111-1111:rule/example-rule` in AWS IoT Triggern und keine andere Regel in demselben oder einem anderen Konto diese Lambda-Funktion aktivieren kann.

   **--source-account**

   Dieses Feld bestätigt, dass diese Lambda-Funktion nur im Namen des `1111-1111-1111` Kontos AWS IoT aktiviert wird.
**Hinweise**  
Wenn Sie in der Konsole Ihrer AWS Lambda Funktion unter **Konfiguration** die Fehlermeldung „Die Regel konnte nicht gefunden werden“ sehen, ignorieren Sie die Fehlermeldung und fahren Sie mit dem Testen der Verbindung fort.

# Fehlerbehandlung (Fehleraktion)
<a name="rule-error-handling"></a>

Wenn eine Nachricht von einem Gerät AWS IoT empfangen wird, prüft die Regel-Engine, ob die Nachricht einer Regel entspricht. Ist dies der Fall, wird die Abfrageanweisung der Regel evaluiert und die Aktionen der Regel aktiviert. Dabei wird das Ergebnis der Abfrageanweisung übergeben. 

Wenn bei der Aktivierung einer Aktion ein Problem auftritt, aktiviert die Regel-Engine eine Fehleraktion, falls eine solche für die Regel angegeben ist. Dies kann der Fall sein, wenn:
+ Eine Regel verfügt nicht über die Berechtigung, auf einen Amazon S3-Bucket zuzugreifen.
+ Ein Benutzerfehler führt dazu, dass der für DynamoDB bereitgestellte Durchsatz überschritten wird.

**Anmerkung**  
Die in diesem Thema behandelte Fehlerbehandlung bezieht sich auf [Regelaktionen](iot-rule-actions.md). Um SQL-Probleme, einschließlich externer Funktionen, zu debuggen, können Sie die AWS IoT Protokollierung einrichten. Weitere Informationen finden Sie unter [Konfigurieren Sie die AWS IoT Protokollierung](configure-logging.md). 

## Nachrichtenformat für Fehleraktion
<a name="rule-error-message-format"></a>

Eine einzelne Nachricht wird pro Regel und Nachricht generiert. Wenn beispielsweise zwei Regelaktionen in derselben Regel fehlschlagen, empfängt die Fehleraktion eine Nachricht, die beide Fehler enthält.

Die Fehlermeldung der Aktion kann in etwa wie im folgenden Beispiel aussehen.

```
{
  "ruleName": "TestAction",
  "topic": "testme/action",
  "cloudwatchTraceId": "7e146a2c-95b5-6caf-98b9-50e3969734c7",
  "clientId": "iotconsole-1511213971966-0",
  "base64OriginalPayload": "ewogICJtZXNzYWdlIjogIkhlbGxvIHZyb20gQVdTIElvVCBjb25zb2xlIgp9",
  "failures": [
    {
      "failedAction": "S3Action",
      "failedResource": "us-east-1-s3-verify-user",
      "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: 9DF5416B9B47B9AF; S3 Extended Request ID: yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y=). Message arrived on: error/action, Action: s3, Bucket: us-east-1-s3-verify-user, Key: \"aaa\". Value of x-amz-id-2: yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y="
    }
  ]
}
```

ruleName  
Der Name der Regel, die die Fehleraktion ausgelöst hat.

Thema  
Das Thema, in dem die ursprüngliche Nachricht empfangen wurde.

cloudwatchTraceId  
Eine eindeutige Identität, die sich auf den Fehler bezieht, meldet sich an CloudWatch.

clientId  
Die Client-ID des Herausgebers der Nachricht.

Base64 OriginalPayload  
Die ursprüngliche Nachrichtennutzlast, Base64-kodiert.

failures    
failedAction  
Der Name der Aktion, die nicht abgeschlossen werden konnte (z. B. „S3Action”).  
failedResource  
Der Name der Ressource (z. B. der Name eines S3-Buckets).  
errorMessage  
Die Beschreibung und Erläuterung des Fehlers.

## Beispiel für Fehleraktion
<a name="rule-error-example"></a>

Hier finden Sie ein Beispiel für eine Regel, der eine Fehleraktion hinzugefügt wurde. Die folgende Regel weist eine Aktion, die Nachrichtendaten in eine DynamoDB-Tabelle schreibt, und eine Fehleraktion auf, die Daten in einen Amazon S3-Bucket schreibt:

```
{
    "sql" : "SELECT * FROM ..."
    "actions" : [{ 
        "dynamoDB" : {
            "table" : "PoorlyConfiguredTable",
            "hashKeyField" : "AConstantString",
            "hashKeyValue" : "AHashKey"}}
    ],
    "errorAction" : { 
        "s3" : {
            "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3",
            "bucketName" : "message-processing-errors",
            "key" : "${replace(topic(), '/', '-') + '-' + timestamp() + '-' + newuuid()}"
        }
    }
}
```

Sie können jede [Funktion](iot-sql-functions.md) oder [Ersetzungsvorlage](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) in der SQL-Anweisung einer Fehleraktion verwenden, einschließlich der externen Funktionen: [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda),, [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb), [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data), [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow), und. [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64) Wenn eine Fehleraktion den Aufruf einer externen Funktion erfordert, kann der Aufruf der Fehleraktion zu einer zusätzlichen Rechnung für die externe Funktion führen.

Weitere Informationen zu Regeln und zur Angabe einer Fehleraktion finden Sie unter [AWS IoT Regel erstellen](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-rule.html).

Weitere Informationen CloudWatch zur Überwachung des Erfolgs oder Fehlers von Regeln finden Sie unter[AWS IoT Metriken und Dimensionen](metrics_dimensions.md).

# Senken der Messaging-Kosten mit Basic Ingest
<a name="iot-basic-ingest"></a>

[Sie können Basic Ingest verwenden, um Gerätedaten sicher an den AWS-Services Support von zu senden[AWS IoT Regelaktionen](iot-rule-actions.md), ohne dass Messaging-Kosten anfallen.](https://aws.amazon.com/iot-core/pricing/) Basic Ingest optimiert den Datenfluss durch Entfernen der Message Broker für Veröffentlichungen/Abonnements aus dem Aufnahmepfad.

Basic Ingest kann Nachrichten von Ihren Geräten oder Anwendungen senden. Die Nachrichten verfügen über Themennamen, die für die ersten drei Ebenen mit `$aws/rules/rule_name` beginnen, wobei `rule_name` der Name der AWS IoT -Regel ist, die Sie aufrufen möchten.

Sie können eine vorhandene Regel mit Basic Ingest verwenden, indem Sie das Basic Ingest-Präfix (`$aws/rules/rule_name`) dem Nachrichtenthema hinzufügen, mit dem Sie die Regel normalerweise aufrufen. Wenn Sie beispielsweise eine Regel mit dem Namen `BuildingManager` haben, die bei Nachrichten mit Themen wie `Buildings/Building5/Floor2/Room201/Lights` (`"sql": "SELECT * FROM 'Buildings/#'"`) aufgerufen wird, können Sie dieselbe Regel mit Basic Ingest durch Senden einer Nachricht mit dem Thema `$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights` aufrufen.

**Anmerkung**  
Ihre Geräte und Regeln können keine reservierten Basic Ingest-Themen abonnieren. Beispielsweise werden die AWS IoT Device Defender `num-messages-received` Metriken nicht ausgegeben, da sie das Abonnieren von Themen nicht unterstützen. Weitere Informationen finden Sie unter [Reservierte Themen](reserved-topics.md).
Wenn Sie einen Publish/Subscribe-Broker benötigen, um Nachrichten an mehrere Abonnenten zu verteilen (z. B. um Nachrichten an andere Geräte und die Rules Engine zu übermitteln), sollten Sie weiterhin den AWS IoT Message Broker für die Nachrichtenverteilung verwenden. Stellen Sie jedoch sicher, dass Sie Ihre Nachrichten zu anderen Themen als Basic Ingest-Themen veröffentlichen.

## Verwenden von Basic Ingest
<a name="iot-basic-ingest-use"></a>

Stellen Sie vor der Verwendung von Basic Ingest sicher, dass Ihr Gerät oder Ihre Anwendung eine [Richtlinie](iot-policies.md) mit Veröffentlichungsberechtigungen auf `$aws/rules/*` nutzt. Oder Sie können in der Richtlinie Berechtigungen für einzelne Regeln angeben. `$aws/rules/rule_name/*` Andernfalls können Ihre Geräte und Anwendungen weiterhin ihre bestehenden Verbindungen mit AWS IoT Core nutzen.

Wenn die Nachricht die Regel-Engine erreicht, besteht kein Unterschied hinsichtlich der Implementierung oder Fehlerbehandlung zwischen von Basic Ingest und von Message Broker-Abonnements aufgerufenen Regeln.

Sie können Regeln für die Verwendung mit Basic Ingest erstellen. Beachten Sie Folgendes:
+ Das erste Präfix eines Basic Ingest-Themas (`$aws/rules/rule_name`) ist für die [topic(Decimal)](iot-sql-functions.md#iot-function-topic)-Funktion nicht verfügbar.
+ Wenn Sie eine Regel definieren, die nur mit Basic Ingest aufgerufen wird, ist die `FROM`-Klausel im `sql`-Feld der `rule`-Definition optional. Sie ist weiterhin erforderlich, wenn die Regel auch von anderen Regeln aufgerufen wird, die über den Message Broker gesendet werden müssen (etwa weil diese anderen Nachrichten an mehrere Abonnenten verteilt werden müssen). Weitere Informationen finden Sie unter [AWS IoT SQL-Referenz](iot-sql-reference.md).
+ Die ersten drei Ebenen des Basic Ingest-Themas (`$aws/rules/rule_name`) zählen nicht für die Längenbeschränkung von 8 Segmenten oder von insgesamt 256 Zeichen für ein Thema. Davon abgesehen gelten dieselben Einschränkungen, wie in den [AWS IoT -Einschränkungen](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#limits_iot) dokumentiert.
+ Wenn eine Nachricht mit einem Basic Ingest-Thema empfangen wird, das eine inaktive Regel oder eine Regel angibt, die nicht existiert, wird ein Fehlerprotokoll in einem CloudWatch Amazon-Protokoll erstellt, das Ihnen beim Debuggen hilft. Weitere Informationen finden Sie unter [Protokolleinträge zur Regel-Engine](cwl-format.md#rule-engine-logs). Es wird eine `RuleNotFound`-Metrik angezeigt, und Sie können dafür Alarme erstellen. Weitere Informationen finden Sie unter „Regelmetriken“ in [Regelmetriken](metrics_dimensions.md#rulemetrics).
+ Sie können nach wie vor mit QoS 1 auf Basic Ingest-Themen veröffentlichen. Sie erhalten eine, PUBACK nachdem die Nachricht erfolgreich an die Regel-Engine übermittelt wurde. Der Empfang einer PUBACK bedeutet nicht, dass Ihre Regelaktionen erfolgreich abgeschlossen wurden. Sie können bei der Ausführung einer Aktion eine Fehleraktion zur Fehlerbehebung konfigurieren. Weitere Informationen finden Sie unter [Fehlerbehandlung (Fehleraktion)](rule-error-handling.md).

# AWS IoT SQL-Referenz
<a name="iot-sql-reference"></a>

 AWS IoT In werden Regeln mit einer SQL-ähnlichen Syntax definiert. SQL-Anweisungen bestehen aus drei Typen von Klauseln:

**SET**  
(Optional) Definiert Variablen, die Sie in SQL-Anweisungen und Ersatzvorlagen wiederverwenden können. Weisen Sie Variablen mithilfe von Ausdrücken Werte zu. Verweisen Sie in SELECT- und WHERE-Klauseln sowie in Vorlagen zur Aktionsersetzung auf diese Variablen.  
Die SET-Klausel unterstützt [Datentypen](iot-sql-data-types.md)[Operatoren](iot-sql-operators.md),[Funktionen](iot-sql-functions.md),[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md), [Variablen](iot-sql-set.md#iot-sql-set-usage) und. [Verschachtelte Objektabfragen](iot-sql-nested-queries.md)

**SELECT**  
(Erforderlich) Extrahiert Informationen aus der Nutzlast einer eingehenden Nachricht und führt Veränderungen an den Informationen durch. Die zu verwendenden Nachrichten werden durch den in der FROM-Klausel angegebenen [Themenfilter](topics.md#topicfilters) identifiziert.  
Die SELECT-Klausel unterstützt [Datentypen](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md) [Funktionen](iot-sql-functions.md)[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),[Ersetzungsvorlagen](iot-substitution-templates.md),,, [Variablen](iot-sql-set.md#iot-sql-set-usage)[Verschachtelte Objektabfragen](iot-sql-nested-queries.md), und[Binäre Nutzlasten](binary-payloads.md).

**FROM**  
Der MQTT-[Themenfilter](topics.md#topicfilters), der Nachrichten identifiziert, aus denen Daten extrahiert werden sollen. Die Regel wird für jede Meldung aktiviert, die an ein MQTT-Topic gesendet wird, das dem hier angegebenen Themenfilter entspricht. Erforderlich für Regeln, die durch Meldungen aktiviert werden, die den Message Broker durchlaufen. Optional für Regeln, die nur unter Verwendung von [Basic Ingest](iot-basic-ingest.md) ausgelöst werden. 

**WHERE**  
(Optional) Fügt eine Bedingungslogik hinzu, die bestimmt, ob die von einer Regel angegebenen Aktionen ausgeführt werden.   
Die WHERE-Klausel unterstützt [Datentypen](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md) [Funktionen](iot-sql-functions.md)[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),,, [Variablen](iot-sql-set.md#iot-sql-set-usage) und[Verschachtelte Objektabfragen](iot-sql-nested-queries.md).

Ein Beispiel für eine SQL-Anweisung sieht folgendermaßen aus:

```
SELECT color AS rgb FROM 'topic/subtopic' WHERE temperature > 50
```

Ein Beispiel für eine MQTT-Nachricht (auch eingehende Nutzlast genannt) sieht folgendermaßen aus:

```
{
    "color":"red",
    "temperature":100
}
```

Wenn diese Nachricht im Topic `'topic/subtopic'` veröffentlicht wird, wird die Regel ausgelöst und die SQL-Anweisung wird ausgewertet. Die SQL-Anweisung extrahiert den Wert der Eigenschaft `color`, wenn die Eigenschaft `"temperature"` größer als 50 ist. Die WHERE-Klausel legt die Bedingung `temperature > 50` fest. Das Schlüsselwort `AS` benennt die Eigenschaft `"color"` in `"rgb"` um. Das Ergebnis (auch *ausgehende Nutzlast* genannt) sieht folgendermaßen aus:

```
{
    "rgb":"red"
}
```

Diese Daten werden anschließend an die Regelaktion weitergeleitet, die die Daten für eine weitere Verarbeitung versendet. Weitere Informationen zu Regelaktionen unter [AWS IoT Regelaktionen](iot-rule-actions.md).

**Anmerkung**  
Kommentare werden derzeit in der AWS IoT SQL-Syntax nicht unterstützt.  
Attributnamen mit Leerzeichen können nicht als Feldnamen in der SQL-Anweisung verwendet werden. Die eingehende Nutzlast kann zwar Attributnamen mit Leerzeichen enthalten, solche Namen können jedoch nicht in der SQL-Anweisung verwendet werden. Sie werden jedoch an die ausgehende Nutzlast weitergegeben, wenn Sie einen Platzhalter (\$1) für den Feldnamen verwenden.

# SELECT-Klausel
<a name="iot-sql-select"></a>

Die AWS IoT SELECT-Klausel entspricht im Wesentlichen der ANSI SQL SELECT-Klausel, mit einigen geringfügigen Unterschieden.

Die SELECT-Klausel unterstützt [Datentypen](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md)[Funktionen](iot-sql-functions.md),[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),, [Variablen](iot-sql-set.md#iot-sql-set-usage)[Verschachtelte Objektabfragen](iot-sql-nested-queries.md), und[Binäre Nutzlasten](binary-payloads.md).

Sie können die SELECT-Klausel verwenden, um Informationen aus eingehenden MQTT-Nachrichten zu extrahieren. Sie können `SELECT *` auch zum Abrufen der gesamten Nutzlast einer eingehenden Nachricht verwenden. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT * FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50}
```

Wenn die Nutzlast ein JSON-Objekt ist, können Sie auf Schlüssel im Objekt verweisen. die ausgehende Nutzlast enthält das Schlüssel-Wert-Paar. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT color FROM 'topic/subtopic'
Outgoing payload: {"color":"red"}
```

Sie können Schlüssel mithilfe des Schlüsselworts „AS“ umbenennen. Beispiel:

```
Incoming payload published on topic 'topic/subtopic':{"color":"red", "temperature":50}
SQL:SELECT color AS my_color FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red"}
```

Sie können mehrere Elemente durch ein Komma getrennt auswählen. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT color as my_color, temperature as fahrenheit FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red","fahrenheit":50}
```

Sie können mehrere Elemente auswählen, indem Sie „\$1“ einbeziehen, um die Elemente zur eingehenden Nutzlast hinzuzufügen. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT *, 15 as speed FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50, "speed":15}
```

Sie können das Schlüsselwort `"VALUE"` verwenden, um ausgehende Nutzlasten zu erzeugen, die keine JSON-Objekte sind. Mit der SQL-Version `2015-10-08` können Sie nur ein Element auswählen. Mit der SQL-Version `2016-03-23` oder höher können Sie auch ein Array auswählen, das als Objekt der obersten Ebene ausgegeben werden soll.

**Example**  

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT VALUE color FROM 'topic/subtopic'
Outgoing payload: "red"
```

Mit der Syntax `'.'` können Sie verschachtelte JSON-Objekte in der eingehenden Nutzlast analysieren. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":{"red":255,"green":0,"blue":0}, "temperature":50}
SQL: SELECT color.red as red_value FROM 'topic/subtopic'
Outgoing payload: {"red_value":255}
```

Informationen über die Verwendung von JSON-Objekt- und Eigenschaftsnamen, die reservierte Zeichen wie Zahlen oder den Bindestrich (Minuszeichen) enthalten, unter [JSON-Erweiterungen](iot-sql-json.md)

Mit Funktionen (siehe [Funktionen](iot-sql-functions.md)) können Sie die eingehende Nutzlast umwandeln. Sie können Klammern zum Gruppieren verwenden. Beispiel:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT (temperature - 32) * 5 / 9 AS celsius, upper(color) as my_color FROM 'topic/subtopic'
Outgoing payload: {"celsius":10,"my_color":"RED"}
```

# FROM-Klausel
<a name="iot-sql-from"></a>

Die FROM-Klausel abonniert für die Regel ein [Thema](topics.md#topicnames) oder einen [Themenfilter](topics.md#topicfilters). Schließen Sie das Thema oder den Themenfilter in einfache Anführungszeichen (') ein. Die Regel wird für jede Nachricht ausgelöst, die an ein MQTT-Topic gesendet wird, das mit dem hier angegebenen Topic-Filter übereinstimmt. Sie können eine Gruppe ähnlicher Themen mithilfe eines Themenfilters abonnieren. 

**Beispiel:**

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic'`: `{temperature: 50}`

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic-2'`: `{temperature: 50}`

SQL: `"SELECT temperature AS t FROM 'topic/subtopic'"`.

Die Regel wird für `'topic/subtopic'` abonniert, daher wird die eingehende Nutzlast an die Regel übergeben. Die ausgehende Nutzlast, die an die Regelaktionen übergeben wird, lautet: `{t: 50}`. Die Regel hat `'topic/subtopic-2'` nicht abonniert, sodass die Regel nicht für die Nachricht ausgelöst wird, die für `'topic/subtopic-2'` veröffentlicht wird.

Beispiel:**\$1 Platzhalter**

Sie können das Platzhalterzeichen „\$1“ (mehrere Ebenen) verwenden, um mehrere bestimmte Pfadelemente abzugleichen.

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic'`: `{temperature: 50}`

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic-2'`: `{temperature: 60}`

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic-3/details'`: `{temperature: 70}`

Eingehende Nutzlast veröffentlicht für Topic `'topic-2/subtopic-x'`: `{temperature: 80}`

SQL: `"SELECT temperature AS t FROM 'topic/#'"`.

Die Regel abonniert jedes Thema, das mit 1 beginnt. Sie wird also dreimal ausgeführt`'topic'`, wobei ausgehende Nutzdaten von `{t: 50}` (für Thema/Unterthema), (für Thema/Unterthema), (für Thema/Unterthema-2) und `{t: 60}` (für) für ihre Aktionen gesendet werden. `{t: 70}` topic/subtopic-3/details Sie wird nicht auf `'topic-2/subtopic-x'` abonniert, so dass die Regel nicht für die `{temperature: 80}`-Nachricht ausgelöst wird.

Beispiel: **\$1-Platzhalter**

Sie können das Platzhalterzeichen „\$1“ (einzelne Ebene) verwenden, um ein beliebiges Pfadelement abzugleichen:

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic'`: `{temperature: 50}`

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic-2'`: `{temperature: 60}`

Eingehende Nutzlast veröffentlicht für Topic `'topic/subtopic-3/details'`: `{temperature: 70}`

Eingehende Nutzlast veröffentlicht für Topic `'topic-2/subtopic-x'`: `{temperature: 80}`

SQL: `"SELECT temperature AS t FROM 'topic/+'"`.

Für die Regel sind alle Topics mit zwei Pfadelementen abonniert, bei denen `'topic'` das erste Element ist. Die Regel wird für Nachrichten ausgeführt, die an `'topic/subtopic'` und `'topic/subtopic-2'` gesendet werden, aber nicht an `'topic/subtopic-3/details'` (sie hat mehr Ebenen als der Themenfilter) oder `'topic-2/subtopic-x'` (sie beginnt nicht mit `topic`).

# SET-Klausel
<a name="iot-sql-set"></a>

Verwenden Sie die SET-Klausel, um Variablen zu definieren, die Ausdrucksergebnisse speichern. Sie können diese Variablen in SELECT- und WHERE-Klauseln sowie in Ersatzvorlagen wiederverwenden. Auf diese Weise können Sie das Duplizieren komplexer Ausdrücke vermeiden und die Anzahl der Funktionsaufrufen in Ihrer SQL-Anweisung reduzieren.

Die SET-Klausel unterstützt [Datentypen](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md)[Funktionen](iot-sql-functions.md),[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),, [Variablen](#iot-sql-set-usage) und[Verschachtelte Objektabfragen](iot-sql-nested-queries.md).

## Syntax der SET-Klau
<a name="iot-sql-set-syntax"></a>

Die SET-Klausel muss in Ihrer SQL-Anweisung vor der SELECT-Klausel stehen. Verwenden Sie die folgende Syntax:

```
SET @variable_name = expression [, @variable_name2 = expression2]
```

Syntaxregeln:
+ Beginnen Sie Variablennamen mit `@`
+ Variablennamen können Buchstaben, Zahlen und Unterstriche enthalten
+ Variablennamen können bis zu 64 Zeichen lang sein
+ In einer einzigen SET-Klausel können mehrere Variablen, getrennt durch Kommas, festgelegt werden
+ Jede Variable kann nur einmal zugewiesen werden (Variablen sind unveränderlich)
+ Das SET-Schlüsselwort kann nur einmal pro SQL-Anweisung verwendet werden

## Verwenden von Variablen
<a name="iot-sql-set-usage"></a>

Nachdem Sie Variablen definiert haben, können Sie sie verwenden in:
+ SELECT-Klauseln
+ WHERE-Klauseln
+ Andere SET-Variablenzuweisungen
+ Vorlagen für die Ersetzung von Aktionen
+ Vorlagen für die Ersetzung von Aktionen sind fehlgeschlagen
+ Verschachtelte SELECT-Abfragen
+ Funktionsparameter (bestimmte Parameter wie Rolearn-Parameter und Parameter, die den Modus einer Funktion wechseln, unterstützen ähnlich wie `transform("enrichArray", attributes, values)` keine Variablen)

Variablen werden mit derselben `@variable_name` Syntax referenziert, die in der SET-Klausel verwendet wird. Sie können auch die JSON-Erweiterungssyntax verwenden, um auf Eigenschaften von Variablen zuzugreifen, die Objekte enthalten, wie `@variable_name.property` z.

## Beispiele für SET-Klausel
<a name="iot-sql-set-examples"></a>

**Grundlegende Verwendung von Variablen**

Das folgende Beispiel zeigt eine Payload, die zum Thema `device/data` veröffentlicht wurde: `{"temp_fahrenheit": 75, "humidity": 60}`

SQL-Anweisung: 

```
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9
SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
```

Ausgehende Payload: `{"celsius": 23.89, "humidity": 60}`

**Greifen Sie auf Mitglieder in eingebetteten JSON-Objekten zu**

Das folgende Beispiel zeigt eine Payload, die zum Thema `device/data` veröffentlicht wurde: `{"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}`

SQL-Anweisung: 

```
SET @device_sensor_data = device1.deviceData.sensors
SELECT @device_sensor_data.temp_fahrenheit AS temp_fahrenheit, @device_sensor_data.humidity as humidity, device1.deviceId as deviceId FROM 'device/data'
```

Ausgehende Payload: `{"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}`

 Weitere Informationen zur Arbeit mit JSON-Erweiterungen finden Sie unter [JSON-Erweiterungen](iot-sql-json.md) 

**Vermeidung doppelter Funktionsaufrufen**

SET-Variablen tragen dazu bei, das Duplizieren komplexer Dekodierungsoperationen zu vermeiden:

```
SET @decoded_data = decode(encode(*, 'base64'), 'proto', 'schema', 'schema.desc', 'message.proto', 'Message')
SELECT @decoded_data.sensor_id, @decoded_data.reading FROM 'device/protobuf' 
WHERE @decoded_data.reading > 100
```

Ohne SET-Variablen müssten Sie die Dekodierungsfunktion dreimal wiederholen, was die Grenzwerte für Funktionsaufrufe überschreitet.

**Mehrere Variablen**

Sie können mehrere Variablen in einer einzigen SET-Klausel definieren, indem Sie sie durch Kommas trennen:

```
SET @user_data = get_user_properties(device_id), @threshold = 50
SELECT @user_data.name, temp_fahrenheit FROM 'sensors/+'
WHERE temp_fahrenheit > @threshold AND @user_data.active = true
```

**Verwenden von Variablen in Ersatzvorlagen**

Variablen können auch in Vorlagen zur Aktionsersetzung verwendet werden, sodass Sie berechnete Werte sowohl in der SQL-Anweisung als auch in den Regelaktionen wiederverwenden können.

SQL-Anweisung: 

```
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9
SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
```

Aktionskonfiguration:

```
{
  "s3": {
    "roleArn": "arn:aws:iam::123456789012:role/testRuleRole",
    "bucketName": "bucket",
    "key": "temperature-data/${device_id}/temp-${@temp_celsius}C.json"
  }
}
```

In diesem Beispiel `@temp_celsius` wird die SET-Variable in einer Ersatzvorlage verwendet, um das Schlüsselfeld der S3-Aktion zu erstellen.

**Nutzung von Nicht-JSON-Nutzdaten**

SET-Variablen unterstützen Nicht-JSON-Nutzlasten nicht direkt, daher muss die Nutzlast zuerst codiert oder dekodiert werden:

```
SET @encoded_payload = encode(*, 'base64')
SELECT @encoded_payload AS raw_data FROM 'device/binary'
```

 Weitere Informationen zur Arbeit mit Nicht-JSON-Payloads finden Sie unter [Arbeiten mit binären Nutzlasten](binary-payloads.md) 

## Grenzen der SET-Klausel
<a name="iot-sql-set-limits"></a>

Die folgenden Grenzwerte gelten für SET-Variablen:
+ Maximal 10 eindeutige Variablen pro SQL-Anweisung
+ Maximale Variablenwertgröße von 128 KiB (minimierter UTF-8-JSON-String)
+ Maximale Gesamtwertgröße von 128 KiB für alle Variablen
+ Variablennamen sind auf 64 Zeichen begrenzt
+ Variablen können JSON-Nutzlasten direkt so akzeptieren, wie sie sind (Nicht-JSON-Payloads müssen zuerst codiert/dekodiert werden)

# WHERE-Klausel
<a name="iot-sql-where"></a>

Die WHERE-Klausel bestimmt, ob die durch eine Regel angegeben Aktionen ausgeführt werden. Wenn die WHERE-Klausel wahr ist, werden die Regelaktionen ausgeführt. Andernfalls werden die Regelaktionen nicht ausgeführt. 

Die WHERE-Klausel unterstützt [Datentypen](iot-sql-data-types.md) [Operatoren](iot-sql-operators.md) [Funktionen](iot-sql-functions.md)[Literale](iot-sql-literals.md),[Case-Anweisungen](iot-sql-case.md),[JSON-Erweiterungen](iot-sql-json.md),,, [Variablen](iot-sql-set.md#iot-sql-set-usage) und[Verschachtelte Objektabfragen](iot-sql-nested-queries.md).

**Beispiel:**

Eingehende Nutzlast veröffentlicht für `topic/subtopic`: `{"color":"red", "temperature":40}`

SQL: `SELECT color AS my_color FROM 'topic/subtopic' WHERE temperature > 50 AND color <> 'red'`.

In diesem Fall wird die Regel ausgelöst. Die durch die Regel angegebenen Aktionen werden jedoch nicht ausgeführt. Es gibt keine ausgehende Nutzlast.

In der WHERE-Klausel können Sie Funktionen und Operatoren verwenden. Sie können jedoch nicht auf Aliase verweisen, die in SELECT mit dem Schlüsselwort AS erstellt wurden. Die WHERE-Klausel wird zuerst ausgewertet, um zu bestimmen, ob SELECT ausgewertet wurde. 

**Beispiel mit Nicht-JSON-Nutzdaten:**

Eingehende Nicht-JSON-Nutzdaten, veröffentlicht unter `topic/subtopic`: `80`

SQL: ``SELECT decode(encode(*, 'base64'), 'base64') AS value FROM 'topic/subtopic' WHERE decode(encode(*, 'base64'), 'base64') > 50`

In diesem Fall wird die Regel ausgelöst und durch die Regel angegebene Aktionen werden ausgeführt. Die ausgehende Nutzlast wird durch die SELECT-Klausel in eine JSON-Nutzlast umgewandelt. `{"value":80}`

# Datentypen
<a name="iot-sql-data-types"></a>

Die AWS IoT Regel-Engine unterstützt alle JSON-Datentypen.


**Unterstützte Datentypen**  

| Typ | Bedeutung | 
| --- | --- | 
| Int | Eine separate Int. Maximal 34 Ziffern. | 
| Decimal |  Ein `Decimal`-Wert mit genau 34 Zeichen mit einer Mindestgröße von 1E-999 (nicht Null) und einer Maximalgröße von 9.999...E999.  Einige Funktionen geben `Decimal`-Werte mit doppelter Genauigkeit anstelle von genau 34 Zeichen aus.  Mit SQL V2 (23.03.2016) werden numerische Werte, die ganze Zahlen sind, wie z. B.`10.0`, als `Int` Wert (`10`) statt als erwarteter `Decimal` Wert () verarbeitet. `10.0` Um ganzzahlige numerische Werte zuverlässig als `Decimal`-Werte zu verarbeiten, verwenden Sie SQL V1 (2015-10-08) für die Regelabfrageanweisung.   | 
| Boolean | True oder False. | 
| String | Eine UTF-8-Zeichenfolge | 
| Array | Eine Serie von Werten, die nicht den gleichen Typ aufweisen müssen | 
| Object | Ein JSON-Wert, der aus einem Schlüssel und einem Wert besteht. Schlüssel müssen Zeichenfolgen sein. Werte können jeden Typ aufweisen. | 
| Null | Null wie von JSON definiert. Dies ist ein tatsächlicher Wert, der die Abwesenheit eines Werts darstellt. Sie können einen Null-Wert explizit erstellen, indem Sie das Schlüsselwort Null in Ihrer SQL-Anweisung verwenden. Beispiel: "SELECT NULL AS n FROM 'topic/subtopic'"  | 
| Undefined |  Kein Wert. Dies kann in JSON nicht explizit dargestellt werden, außer durch Auslassen des Werts. Z. B. im Objekt `{"foo": null}` gibt der Schlüssel "foo" NULL zurück, der Schlüssel "bar" jedoch `Undefined`. Intern behandelt die SQL-Sprache `Undefined` als Wert, kann jedoch nicht in JSON dargestellt werden. Bei einer Serialisierung in JSON sind die Ergebnisse daher `Undefined`. <pre> {"foo":null, "bar":undefined} </pre> wird in JSON serialisiert als: <pre> {"foo":null}</pre> Dementsprechend wird `Undefined` in eine leere Zeichenfolge konvertiert, wenn es selbst konvertiert wird. Funktionen, die mit ungültigen Argumenten aufgerufen werden (z. B. falsche Typen, falsche Anzahl an Argumenten usw.), geben `Undefined` zurück.   | 

## Konversionen
<a name="iot-sql-conversions"></a>

Die folgende Tabelle listet die Ergebnisse auf, wenn ein Wert eines Typs in einen anderen Typ konvertiert wird (wenn ein Wert mit dem falschen Typ an eine Funktion übergeben wird). Wenn beispielsweise der absoluten Wertfunktion "abs" (die `Int` oder `Decimal` erwartet) ein `String`-Wert übergeben wird, versucht diese, den `String`-Wert nach diesen Regeln in einen `Decimal`-Wert umzuwandeln. In diesem Fall wird "abs("-5.123")" als "abs(-5.123)" behandelt.

**Anmerkung**  
Konversionen in `Array`, `Object`, `Null` oder `Undefined` werden nicht versucht.


**In Dezimalwerte**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Ein Wert vom Typ Decimal ohne Dezimaltrennzeichen | 
| Decimal | Der Quellwert | 
| Boolean | Undefined. (Sie können die cast-Funktion explizit zum Umwandeln von true = 1.0, false = 0.0 verwenden.) | 
| String | Die SQL-Engine versucht, die Zeichenfolge als Decimal zu analysieren. AWS IoT versucht, Zeichenketten zu analysieren, die dem regulären Ausdruck entsprechen:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 „0“, „-1,2“ und „5E-12“ sind Beispiele für Zeichenfolgen, die automatisch in Werte des Typs Decimal umgewandelt werden. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Null. | 
| Undefined | Undefined. | 


**In Ganzzahlen**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Der Quellwert | 
| Decimal | Der Quellwert, auf den nächsten Int-Wert gerundet. | 
| Boolean | Undefined. (Sie können die cast-Funktion explizit zum Umwandeln von true = 1.0, false = 0.0 verwenden.) | 
| String |  Die SQL-Engine versucht, die Zeichenfolge als zu analysieren. Decimal AWS IoT versucht, Zeichenketten zu analysieren, die dem regulären Ausdruck entsprechen:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 „0", „-1.2", „5E-12" sind alles Beispiele für Zeichenketten, die automatisch in Decimal s umgewandelt werden. AWS IoT versucht, das in a umzuwandelnDecimal, und schneidet dann die String Dezimalstellen ab, um eine zu bilden. Decimal Int | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Null. | 
| Undefined | Undefined. | 


**In Boolesche Werte**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Undefined. (Sie können die cast-Funktion explizit zum Umwandeln von 0 = False, any\$1nonzero\$1value = True verwenden.) | 
| Decimal | Undefined. (Sie können die cast-Funktion explizit zum Umwandeln von 0 = False, any\$1nonzero\$1value = True verwenden.) | 
| Boolean | Der ursprüngliche Wert | 
| String | "true"=wahr und "false"=falsch (ohne Beachtung der Groß- und Kleinschreibung). Andere Zeichenfolgenwerte sind Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 


**In Zeichenfolgen**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Eine Zeichenfolgendarstellung des Int-Werts in Standardnotation | 
| Decimal | Eine Zeichenfolge, die den Decimal-Wert in Standardnotation darstellt  | 
| Boolean | "true" oder "false". Alles in Kleinbuchstaben. | 
| String | Der ursprüngliche Wert | 
| Array | Das in JSON serialisierte Array. Die resultierende Zeichenfolge ist eine durch Kommata getrennte Liste in eckigen Klammern. Ein String ist von Anführungszeichen umschlossen. Decimal, Int, Boolean und Null sind dies nicht. | 
| Objekt | Das in JSON serialisierte Objekt. Die resultierende Zeichenfolge ist eine durch Kommata getrennte Liste von Schlüssel-Wert-Paaren, die mit geschweiften Klammern beginnt und endet. Ein String ist von Anführungszeichen umschlossen. Decimal, Int, Boolean und Null sind dies nicht. | 
| Null | Undefined. | 
| Undefined | Undefined | 

# Operatoren
<a name="iot-sql-operators"></a>

Die folgenden Operatoren können in SELECT- und WHERE-Klauseln verwendet werden. 

## AND-Operator
<a name="iot-sql-operators-and"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Führt einen logischen AND-Vorgang aus. Gibt "true" zurück, wenn die Operanden links und rechts wahr sind. Ansonsten wird „false“ zurückgegeben. Operanden vom Typ `Boolean` oder die Zeichenfolgenoperanden „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung) sind erforderlich.

*Syntax:* ` expression AND expression`.


**AND-Operator**  

| Left Operator | Right operator | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. True, wenn beide Operanden True sind. Ansonsten „false“. | 
| String/Boolean | String/Boolean | Wenn alle Zeichenfolgen „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung) sind, werden sie in den Typ Boolean konvertiert und normal als boolean AND boolean verarbeitet. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## OR-Operator
<a name="iot-sql-operators-or"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Führt einen logischen OR-Vorgang aus. Gibt „true” zurück, wenn der linke oder der rechte Operand wahr ist. Ansonsten wird „false“ zurückgegeben. Operanden vom Typ `Boolean` oder die Zeichenfolgenoperanden „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung) sind erforderlich.

*Syntax:* ` expression OR expression`.


**OR-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. True, wenn einer der Operanden True ist. Ansonsten „false“. | 
| String/Boolean | String/Boolean | Wenn alle Zeichenfolgen „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung) sind, werden sie in boolesche Werte konvertiert und normal als boolean OR boolean verarbeitet. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## NOT-Operator
<a name="iot-sql-operators-not"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Führt einen logischen NOT-Vorgang aus. Gibt „true” zurück, wenn der Operand falsch ist. Gibt andernfalls „true” zurück. Ein `Boolean` Operand oder der Zeichenfolgenoperand „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung) ist erforderlich.

*Syntax:* `NOT expression`.


**NOT-Operator**  

| Operand | Ausgabe | 
| --- | --- | 
| Boolean | Boolean. True, wenn der Operand False ist. Verwenden Sie andernfalls "true". | 
| String | Ist die Zeichenfolge „true“ oder „false“ (ohne Beachtung der Groß- und Kleinschreibung), wird sie in den entsprechenden booleschen Wert konvertiert und der gegenteilige Wert wird zurückgegeben. | 
| Anderer Wert | Undefined. | 

## IN-Operator
<a name="iot-sql-operators-in"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Sie können den IN-Operator in einer WHERE-Klausel verwenden, um zu überprüfen, ob ein Wert mit einem Wert in einem Array übereinstimmt. Er gibt „true“ zurück, wenn die Übereinstimmung gefunden wird, andernfalls „false“.

*Syntax:* ` expression IN expression`.


**IN-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int/Decimal/String/Array/Object | Array | Stimmt, wenn das Object Element Integer Decimal StringArray////im Array gefunden wird. Ansonsten „false“. | 

*Beispiel:*

```
SQL: "select * from 'a/b' where 3 in arr"

JSON: {"arr":[1, 2, 3, "three", 5.7, null]}
```

In diesem Beispiel `where 3 in arr` wird die Bedingungsklausel als wahr ausgewertet, weil 3 in dem genannten Array vorhanden ist`arr`. Daher `select * from 'a/b'` wird in der SQL-Anweisung ausgeführt. Dieses Beispiel zeigt auch, dass das Array heterogen sein kann.

## EXISTS-Operator
<a name="iot-sql-operators-exists"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Sie können den EXISTS-Operator in einer Bedingungsklausel verwenden, um zu testen, ob Elemente in einer Unterabfrage vorhanden sind. Er gibt true zurück, wenn die Unterabfrage ein oder mehrere Elemente zurückgibt, und false, wenn die Unterabfrage keine Elemente zurückgibt. 

*Syntax:* ` expression`.

*Beispiel:*

```
SQL: "select * from 'a/b' where exists (select * from arr as a where a = 3)"

JSON: {"arr":[1, 2, 3]}
```

In diesem Beispiel `where exists (select * from arr as a where a = 3)` wird die Bedingungsklausel als wahr ausgewertet, weil 3 in dem genannten Array vorhanden ist. `arr` Daher `select * from 'a/b'` wird in der SQL-Anweisung ausgeführt.

*Beispiel:*

```
SQL: select * from 'a/b' where exists (select * from e as e where foo = 2)

JSON: {"foo":4,"bar":5,"e":[{"foo":1},{"foo":2}]}
```

In diesem Beispiel `where exists (select * from e as e where foo = 2)` wird die Bedingungsklausel als wahr ausgewertet, da das Array `e` innerhalb des JSON-Objekts das Objekt enthält`{"foo":2}`. Daher `select * from 'a/b'` wird in der SQL-Anweisung ausgeführt.

## >-Operator
<a name="iot-sql-operators-greater"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt "true" zurück, wenn der linke Operand größer ist als der rechte Operand. Beide Operanden werden in den Typ `Decimal` konvertiert und anschließend verglichen. 

*Syntax:* `expression > expression`.


**>-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. „true“, wenn der linke Operand größer ist als der rechte Operand. Ansonsten „false“. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in den Typ Decimal konvertiert werden können: Boolean. Gibt "true" zurück, wenn der linke Operand größer ist als der rechte Operand. Ansonsten „false“. | 
| Anderer Wert | Undefined. | Undefined. | 

## >=-Operator
<a name="iot-sql-operators-greater-equal"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt "true" zurück, wenn der linke Operand mindestens genauso groß ist wie der rechte Operand. Beide Operanden werden in den Typ `Decimal` konvertiert und anschließend verglichen. 

*Syntax:* `expression >= expression`.


**>=-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. „true“, wenn der linke Operand mindestens genauso groß ist wie der rechte Operand. Ansonsten „false“. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in den Typ Decimal konvertiert werden können: Boolean. Gibt "true" zurück, wenn der linke Operand mindestens genauso groß ist wie der rechte Operand. Ansonsten „false“. | 
| Anderer Wert | Undefined. | Undefined. | 

## <-Operator
<a name="iot-sql-operators-less"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt "true" zurück, wenn der linke Operand kleiner ist als der rechte Operand. Beide Operanden werden in den Typ `Decimal` konvertiert und anschließend verglichen. 

*Syntax:* `expression < expression`.


**<-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. „true“, wenn der linke Operand kleiner ist als der rechte Operand. Ansonsten „false“. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in den Typ Decimal konvertiert werden können: Boolean. Gibt "true" zurück, wenn der linke Operand kleiner ist als der rechte Operand. Ansonsten „false“. | 
| Anderer Wert | Undefined | Undefined | 

## <=-Operator
<a name="iot-sql-operators-less-equal"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt "true" zurück, wenn der linke Operand höchstens genauso groß ist wie der rechte Operand. Beide Operanden werden in den Typ `Decimal` konvertiert und anschließend verglichen. 

*Syntax:* `expression <= expression`.


**<=-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. „true“, wenn der linke Operand höchstens genauso groß ist wie der rechte Operand. Ansonsten „false“. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in den Typ Decimal konvertiert werden können: Boolean. Gibt "true" zurück, wenn der linke Operand höchstens genauso groß ist wie der rechte Operand. Ansonsten „false“. | 
| Anderer Wert | Undefined | Undefined | 

## <>-Operator
<a name="iot-sql-operators-not-eq"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt „true” zurück, wenn die Operanden links und rechts nicht gleich sind. Ansonsten wird "false" zurückgegeben. 

*Syntax:* ` expression <> expression`.


**<>-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | "True", wenn der linke Operand und der rechte Operand nicht gleich sind; ansonsten "false". Ansonsten „false“. | 
| Decimal | Decimal | "True", wenn der linke Operand und der rechte Operand nicht gleich sind; ansonsten "false". Ansonsten "false". Der Typ Int wird vor dem Vergleichen in den Typ Decimal umgewandelt. | 
| String | String | "True", wenn der linke Operand und der rechte Operand nicht gleich sind; ansonsten "false". Ansonsten „false“. | 
| Array | Array | "True", wenn die Elemente in den einzelnen Operanden nicht gleich sind und nicht in der gleichen Reihenfolge vorliegen. Ansonsten "false". | 
| Objekt | Objekt | "True", wenn die Schlüssel und Werte der einzelnen Operanden nicht gleich sind. Ansonsten „false“. Die Reihenfolge von keys/values ist unwichtig. | 
| Null | Null | Falsch. | 
| Beliebiger Wert | Undefined | Undefined | 
| Undefined | Beliebiger Wert | Undefined | 
| Falscher Typ | Falscher Typ | true | 

## =-Operator
<a name="iot-sql-operators-eq"></a>

Gibt ein Ergebnis vom Typ `Boolean` zurück. Gibt „true” zurück, wenn die Operanden links und rechts gleich sind. Ansonsten wird "false" zurückgegeben. 

*Syntax:* ` expression = expression`.


**=-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | "True", wenn der linke Operand und der rechte Operand nicht gleich sind. Ansonsten „false“. | 
| Decimal | Decimal | "True", wenn der linke Operand und der rechte Operand nicht gleich sind. Ansonsten "false". Der Typ Int wird vor dem Vergleichen in den Typ Decimal umgewandelt. | 
| String | String | "True", wenn der linke Operand und der rechte Operand nicht gleich sind. Ansonsten „false“. | 
| Array | Array | "True", wenn die Elemente in den einzelnen Operanden gleich sind und in der gleichen Reihenfolge vorliegen. Ansonsten „false“. | 
| Objekt | Objekt | "True", wenn die Schlüssel und Werte der einzelnen Operanden gleich sind. Ansonsten „false“. Die Reihenfolge von keys/values ist unwichtig. | 
| Beliebiger Wert | Undefined | Undefined. | 
| Undefined | Beliebiger Wert | Undefined. | 
| Falscher Typ | Falscher Typ | "false" | 

## \$1-Operator
<a name="iot-sql-operators-plus"></a>

"\$1" ist ein überladener Operator. Er kann zum Verketten von Zeichenfolgen oder zum Addieren verwendet werden. 

*Syntax:* ` expression + expression`.


**\$1-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| String | Beliebiger Wert | Konvertiert den rechten Operanden in eine Zeichenfolge und hängt ihn an den linken Operanden an | 
| Beliebiger Wert | String | Konvertiert den linken Operanden in eine Zeichenfolge und hängt den rechten Operanden an den konvertierten linken Operanden an | 
| Int | Int | Int Wert. Addiert Operanden. | 
| Int/Decimal | Int/Decimal | Decimal Wert. Addiert Operanden. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## --Operator
<a name="iot-sql-operators-sub"></a>

Subtrahiert den rechten Operanden vom linken Operanden 

*Syntax:* ` expression - expression`.


**--Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int Wert. Subtrahiert den rechten Operanden vom linken Operanden. | 
| Int/Decimal | Int/Decimal | Decimal Wert. Subtrahiert den rechten Operanden vom linken Operanden. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen korrekt zu Dezimalwerten konvertiert wurden, wird ein Decimal-Wert zurückgegeben. Subtrahiert den rechten Operanden vom linken Operanden. Gibt andernfalls Undefined zurück. | 
| Anderer Wert | Anderer Wert | Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## \$1-Operator
<a name="iot-sql-operators-mult"></a>

Multipliziert den linken Operanden mit dem rechten Operanden 

*Syntax:* ` expression * expression`.


**\$1-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int Wert. Multipliziert den linken Operanden mit dem rechten Operanden | 
| Int/Decimal | Int/Decimal | Decimal Wert. Multipliziert den linken Operanden mit dem rechten Operanden | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen korrekt zu Dezimalwerten konvertiert wurden, wird ein Decimal-Wert zurückgegeben. Multipliziert den linken Operanden mit dem rechten Operanden Gibt andernfalls Undefined zurück. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## /-Operator
<a name="iot-sql-operators-div"></a>

Dividiert den linken Operanden durch den rechten Operanden 

*Syntax:* ` expression / expression`.


**/-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int Wert. Dividiert den linken Operanden durch den rechten Operanden | 
| Int/Decimal | Int/Decimal | Decimal Wert. Dividiert den linken Operanden durch den rechten Operanden | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen korrekt zu Dezimalwerten konvertiert wurden, wird ein Decimal-Wert zurückgegeben. Dividiert den linken Operanden durch den rechten Operanden Gibt andernfalls Undefined zurück. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## %-Operator
<a name="iot-sql-operators-mod"></a>

Gibt den Rest zurück, der beim Dividieren des linken Operanden durch den rechten Operanden entsteht. 

*Syntax:* ` expression % expression`.


**%-Operator**  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int Wert. Gibt den Rest zurück, der beim Dividieren des linken Operanden durch den rechten Operanden entsteht. | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen korrekt zu Dezimalwerten konvertiert wurden, wird ein Decimal-Wert zurückgegeben. Gibt den Rest zurück, der beim Dividieren des linken Operanden durch den rechten Operanden entsteht. Andernfalls Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

# Funktionen
<a name="iot-sql-functions"></a>

Verwenden Sie die folgenden integrierten Funktionen in den SELECT- oder WHERE-Klauseln Ihrer SQL-Ausdrücke.

Die folgenden externen Funktionen werden wie eine Regelaktion abgerechnet: [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda), [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb), und. [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow) Außerdem wird Ihnen die [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64) Funktion nur dann in Rechnung gestellt, wenn Sie [eine Protobuf-Nachricht in JSON dekodieren](https://docs.aws.amazon.com//iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf). Weitere Informationen finden Sie auf der [AWS IoT Core Seite mit den Preisen](https://aws.amazon.com/iot-core/pricing/).

## abs(Decimal)
<a name="iot-func-abs"></a>

Gibt den absoluten Wert einer Zahl zurück. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `abs(-5)` gibt 5 zurück.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Int, der absolute Wert des Arguments | 
| Decimal | Decimal, der absolute Wert des Arguments | 
| Boolean | Undefined. | 
| String | Decimal: das Ergebnis ist der absolute Wert des Arguments. Wenn die Zeichenfolge nicht konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## accountid()
<a name="iot-sql-function-accountid"></a>

Gibt die ID des Kontos zurück, das diese Regel als `String` besitzt. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`accountid() ` = "123456789012"

## acos(Decimal)
<a name="iot-func-acos"></a>

Gibt den umgekehrten Kosinus einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `acos(0)` = 1,5707963267948966 


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der umgekehrte Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der umgekehrte Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Boolean | Undefined. | 
| String | Decimal, der umgekehrte Kosinus des Arguments. Wenn die Zeichenfolge nicht konvertiert werden kann, ist das Ergebnis Undefined. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## asin(Decimal)
<a name="iot-func-asin"></a>

Gibt den umgekehrten Sinus einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `asin(0)` = 0,0


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der umgekehrte Sinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der umgekehrte Sinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der umgekehrte Sinus des Arguments. Wenn die Zeichenfolge nicht konvertiert werden kann, ist das Ergebnis Undefined. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## atan(Decimal)
<a name="iot-func-atan"></a>

Gibt den umgekehrten Tangens einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor Anwendung des Features auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `atan(0)` = 0,0


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der umgekehrte Tangens des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der umgekehrte Tangens des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Boolean | Undefined. | 
| String | Decimal, der umgekehrte Tangens des Arguments. Wenn die Zeichenfolge nicht konvertiert werden kann, ist das Ergebnis Undefined. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## atan2(Decimal, Decimal)
<a name="iot-func-atan2"></a>

Gibt den Winkel im Bogenmaß zwischen der positiven x-Achse und dem Punkt (x, y) an, der in den beiden Argumenten definiert ist.  Der Winkel ist positiv für Winkel gegen den Uhrzeigersinn (obere Halbebene, y > 0) und negativ für Winkel im Uhrzeigersinn (untere Halbebene, y < 0). `Decimal` Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher. 

Beispiel: `atan2(1, 0)` = 1,5707963267948966


****  

| Argumenttyp | Argumenttyp | Ergebnis | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Decimal (mit doppelter Genauigkeit), der Winkel zwischen der x-Achse und dem festgelegten Punkt (x, y) | 
| Int/Decimal/String | Int/Decimal/String | Decimal, der umgekehrte Tangens des beschriebenen Punkts. Wenn eine Zeichenfolge nicht konvertiert werden kann, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## aws\$1lambda(functionArn, inputJson)
<a name="iot-func-aws-lambda"></a>

 Ruft die angegebene Lambda-Funktion. Dabei wird `inputJson` an die Lambda-Funktion übergeben und das von der Lambda-Funktion generierte JSON-Objekt zurückgegeben.


**Argumente**  

| Argument | Description | 
| --- | --- | 
| functionArn |  Der ARN der aufzurufenden Lambda-Funktion. Die Lambda-Funktion muss JSON-Daten zurückgeben.  | 
| inputJson |  Die an die Lambda-Funktion übergebene JSON-Eingabe. Um Abfragen und Literale verschachtelter Objekte zu übergeben, müssen Sie die SQL-Version 2016-03-23 verwenden.  | 

Sie müssen AWS IoT `lambda:InvokeFunction` Berechtigungen erteilen, um die angegebene Lambda-Funktion aufzurufen. Das folgende Beispiel zeigt, wie die `lambda:InvokeFunction`-Berechtigung mit AWS CLI erteilt wird:

```
aws lambda add-permission --function-name "function_name"
--region "region"
--principal iot.amazonaws.com 
--source-arn arn:aws:iot:us-east-1:account_id:rule/rule_name
--source-account "account_id"
--statement-id "unique_id" 
--action "lambda:InvokeFunction"
```

Im Folgenden werden die Argumente für den Befehl **add-permission** aufgeführt:

--function-name   
Der Name der Lambda-Funktion. Sie fügen eine neue Berechtigung hinzu, um die Ressourcenrichtlinie der Funktion zu aktualisieren.

--Region  
Die AWS-Region Ihres Accounts.

--Prinzipal  
Der Prinzipal, der die Berechtigung erhält. Dies sollte dazu dienen`iot.amazonaws.com`, die AWS IoT Erlaubnis zum Aufrufen einer Lambda-Funktion zu gewähren.

--source-arn  
Der ARN der Regel. Sie können den **get-topic-rule** AWS CLI Befehl verwenden, um den ARN einer Regel abzurufen.

--source-account  
Der AWS-Konto Ort, an dem die Regel definiert ist.

--statement-id  
Ein eindeutiger Anweisungsbezeichner

--action  
Die Lambda-Aktionen, die Sie in dieser Anweisung zulassen möchten. Um AWS IoT den Aufruf einer Lambda-Funktion zu erlauben, geben Sie `lambda:InvokeFunction` an.

**Wichtig**  
Wenn Sie eine Berechtigung für einen AWS IoT Prinzipal hinzufügen, ohne das `source-arn` oder anzugeben, kann jede`source-account`, AWS-Konto die mit Ihrer Lambda-Aktion eine Regel erstellt, Regeln auslösen, von denen aus Ihre Lambda-Funktion aufgerufen wird. AWS IoT Weitere Informationen finden Sie unter [Lambda-Berechtigungsmodell](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html).

Bei einer JSON-Nachrichtennutzlast wie:

```
{
    "attribute1": 21,
    "attribute2": "value"
}
```

Die `aws_lambda`-Funktion kann verwendet werden, um die Lambda-Funktion wie folgt aufzurufen.

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", {"payload":attribute1}) as output FROM 'topic-filter'
```

Wenn Sie möchten, dass die vollständige MQTT-Nachrichtnutzlast übergeben wird, können Sie die JSON-Nutzlast mit „\$1“ angeben.

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", *) as output FROM 'topic-filter'
```

`payload.inner.element` wählt Daten von der zu Thema „Thema/Unterthema” veröffentlichten Nachrichten aus.

`some.value` wählt Daten aus der Ausgabe aus, die von der Lambda Funktion generiert wurde.

**Anmerkung**  
 Die Regeln-Engine begrenzt die Ausführungsdauer von Lambda-Funktionen. Aufrufe von Lambda-Funktionen über Regeln sollten innerhalb von 2.000 Millisekunden abgeschlossen werden. 

## bitand(Int, Int)
<a name="iot-func-bitand"></a>

Führt Bit für Bit AND für die Bit-Darstellungen der beiden `Int`(-konvertierten) Argumente durch. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `bitand(13, 5)` = 5


****  

| Argumenttyp | Argumenttyp | Ergebnis | 
| --- | --- | --- | 
| Int | Int | Int, ein bitweises AND der beiden Argumente. | 
| Int/Decimal | Int/Decimal | Int, ein bitweises AND der beiden Argumente. Alle Zahlen, die nicht vom Typ Int sind, werden auf den nächsten Int-Wert abgerundet. Wenn eines der Argumente nicht in einen Int-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, ein bitweises AND der beiden Argumente. Alle Zeichenfolgen werden in Dezimal-Werte konvertiert und auf den nächsten Int-Wert abgerundet. Wenn die Konvertierung fehlschlägt, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## bitor(Int, Int)
<a name="iot-func-bitor"></a>

Führt eine bBit für Bit einen OR-Vorgang für die Bit-Darstellungen der beiden Argumente durch. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `bitor(8, 5)` = 13


****  

| Argumenttyp | Argumenttyp | Ergebnis | 
| --- | --- | --- | 
| Int | Int | Int, das bitweise OR der beiden Argumente | 
| Int/Decimal | Int/Decimal | Int, das bitweise OR der beiden Argumente Alle Zahlen, die nicht vom Typ Int sind, werden auf den nächsten Int-Wert abgerundet. Wenn die Konvertierung fehlschlägt, ist das Ergebnis Undefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, das bitweise OR für die beiden Argumente. Alle Zeichenfolgen werden in Dezimal-Werte konvertiert und auf den nächsten Int-Wert abgerundet. Wenn die Konvertierung fehlschlägt, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## bitxor(Int, Int)
<a name="iot-func-xbitor"></a>

Führt Bit für Bit eine XOR-Maßnahme für die Bit-Darstellungen der beiden `Int`(-konvertierten) Argumente durch. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `bitor(13, 5)` = 8


****  

| Argumenttyp | Argumenttyp | Ergebnis | 
| --- | --- | --- | 
| Int | Int | Int, ein bitweises XOR für die beiden Argumente | 
| Int/Decimal | Int/Decimal | Int, ein bitweises XOR für die beiden Argumente Zahlen, die nicht vom Typ Int sind, werden auf den nächsten Int-Wert abgerundet. | 
| Int/Decimal/String | Int/Decimal/String | Int, ein bitweises XOR für die beiden Argumente. Zeichenfolgen werden in Dezimal-Werte konvertiert und auf den nächsten Int-Wert abgerundet. Wenn eine Konvertierung fehlschlägt, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## bitnot(Int)
<a name="iot-func-bitnot"></a>

Führt Bit für Bit einen NOT-Vorgang für die Bit-Darstellungen des `Int`(-konvertierten) Arguments durch. Unterstützt von SQL Version 2015-10-08 und höher. 

Beispiel: `bitnot(13)` = 2


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Int, ein bitweises NOT des Arguments. | 
| Decimal | Int, ein bitweises NOT des Arguments. Der Decimal-Wert wird auf den nächsten Int-Wert abgerundet. | 
| String | Int, ein bitweises NOT des Arguments. Zeichenfolgen werden in Dezimal-Werte konvertiert und auf den nächsten Int-Wert abgerundet. Wenn eine Konvertierung fehlschlägt, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert. | 

## cast()
<a name="iot-sql-function-cast"></a>

Konvertiert einen Wert von einem Datentyp in einen anderen. Diese Umwandlung verhält sich größtenteils wie die Standardkonvertierungen. Zusätzlich verfügt sie jedoch über die Möglichkeit, Zahlen von oder zu booleschen Werten umzuwandeln. Wenn Sie AWS IoT nicht feststellen können, wie ein Typ in einen anderen umgewandelt werden soll, lautet das Ergebnis. `Undefined` Unterstützt von SQL Version 2015-10-08 und höher. Format: Besetzung (*value*als*type*).

Beispiel:

`cast(true as Int) ` = 1

Die folgenden Schlüsselwörter können beim Aufrufen von `cast` unter Umständen nach „as“ angezeigt werden:


**Für SQL-Version 2015-10-08 und 2016-03-23**  

| Stichwort | Ergebnis | 
| --- | --- | 
| String | Wandelt einen Wert in String um. | 
| Nvarchar | Wandelt einen Wert in String um. | 
| Text | Wandelt einen Wert in String um. | 
| Ntext | Wandelt einen Wert in String um. | 
| varchar | Wandelt einen Wert in String um. | 
| Int | Wandelt einen Wert in Int um. | 
| Ganzzahl | Wandelt einen Wert in Int um. | 
| Double | Überträgt den Wert auf Decimal (mit doppelter Genauigkeit). | 


**Außerdem für SQL-Version 2016-03-23**  

| Stichwort | Ergebnis | 
| --- | --- | 
| Decimal | Wandelt einen Wert in Decimal um. | 
| Bool | Wandelt einen Wert in Boolean um. | 
| Boolean | Wandelt einen Wert in Boolean um. | 

Umwandlungsregeln:


**In Dezimalwert umwandeln**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Ein Wert vom Typ Decimal ohne Dezimaltrennzeichen | 
| Decimal |  Der Quellwert  Bei SQL V2 (23.03.2016) geben numerische Werte, bei denen es sich um ganze Zahlen handelt, z. B. `10.0` einen `Int` Wert (`10`) anstelle des erwarteten `Decimal` Werts (`10.0`) zurück. Um ganzzahlige numerische Werte zuverlässig in `Decimal`-Werte umzuwandeln, verwenden Sie SQL V1 (2015-10-08) für die Regelabfrageanweisung.   | 
| Boolean | "true" = 1,0, "false" = 0,0 | 
| String | Versucht, die Zeichenfolge als Decimal aufzulösen. AWS IoT versucht, Zeichenfolgen aufzulösen, die dem regex entsprechen: ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1. „0“, „-1,2“ und „5E-12“ sind Beispiele für Zeichenfolgen, die automatisch in Dezimal-Werte umgewandelt werden. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 


**In Ganzzahl umwandeln**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Der Quellwert | 
| Decimal | Der Quellwert, auf den nächsten Int-Wert abgerundet | 
| Boolean | "true" = 1,0, "false" = 0,0 | 
| String | Versucht, die Zeichenfolge als Decimal aufzulösen. AWS IoT versucht, Zeichenfolgen aufzulösen, die dem regex entsprechen: ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1. „0“, „-1,2“ und „5E-12“ sind Beispiele für Zeichenfolgen, die automatisch in Dezimal-Werte umgewandelt werden. AWS IoT versucht, die Zeichenfolge in einen Decimal-Wert zu konvertieren und auf den nächsten Int-Wert abzurunden. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 


**In `Boolean` umwandeln**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | 0 = false, alle Werte außer Null = true | 
| Decimal | 0 = false, alle Werte außer Null = true | 
| Boolean | Der Quellwert | 
| String | "true" = wahr und "false" = falsch (ohne Beachtung der Groß- und Kleinschreibung). Andere Zeichenfolgenwerte sind = Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 


**In Zeichenfolge umwandeln**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Eine Zeichenfolgendarstellung des Int-Werts in Standardnotation | 
| Decimal | Eine Zeichenfolge, die den Decimal-Wert in Standardnotation darstellt | 
| Boolean | "true" oder "false", in Kleinbuchstaben | 
| String | Der Quellwert | 
| Array | Das in JSON serialisierte Array. Die resultierende Zeichenfolge ist eine durch Kommata getrennte Liste in eckigen Klammern. String-Werte werden mit Anführungszeichen angegeben. Dies ist bei Decimal-, Int-, Boolean-Werten nicht der Fall. | 
| Object | Das in JSON serialisierte Objekt. Die JSON-Zeichenfolge ist eine durch Kommata getrennte Liste von Schlüssel-Wert-Paaren, die mit geschweiften Klammern beginnt und endet. String-Werte werden mit Anführungszeichen angegeben. Dies ist bei Decimal-, Int-, – Booleanund Null-Werten nicht der Fall. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## ceil(Decimal)
<a name="iot-func-ceil"></a>

Rundet den angegebenen `Decimal`-Wert auf den nächsten `Int`-Wert auf. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`ceil(1.2)` = 2

`ceil(-1.2)` = -1


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Int, der Argumentwert | 
| Decimal | Int, der Decimal-Wert, auf den nächsten Int-Wert gerundet | 
| String | Int. Die Zeichenfolge wird in Decimal konvertiert und auf den nächsten Int aufgerundet. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Anderer Wert | Undefined. | 

## chr(String)
<a name="iot-func-chr"></a>

Gibt das ASCII-Zeichen zurück, das dem angegebenen `Int`-Argument entspricht. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele: 

`chr(65)` = "A".

`chr(49)` = "1".


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Das Zeichen, das dem angegebenen ASCII-Wert entspricht. Wenn das Argument kein gültiger ASCII-Wert ist, ist das Ergebnis Undefined. | 
| Decimal | Das Zeichen, das dem angegebenen ASCII-Wert entspricht. Das Decimal-Argument wird auf den nächsten Int-Wert abgerundet. Wenn das Argument kein gültiger ASCII-Wert ist, ist das Ergebnis Undefined. | 
| Boolean | Undefined. | 
| String | Wenn der String-Wert nicht in einen Decimal-Wert konvertiert werden kann, wird er auf den nächsten Int-Wert abgerundet. Wenn das Argument kein gültiger ASCII-Wert ist, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Anderer Wert | Undefined. | 

## clientid()
<a name="iot-sql-function-clientid"></a>

Gibt die ID des MQTT-Clients zurück, der die Nachricht sendet, oder `n/a`, wenn die Nachricht nicht über MQTT gesendet wurde. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`clientid() ` = "123456789012"

## concat()
<a name="iot-func-concat"></a>

Hängt Arrays oder Zeichenfolgen aneinander an. Diese Funktion akzeptiert eine beliebige Anzahl von Argumenten und gibt einen – `String`oder `Array`-Wert zurück. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele: 

`concat() ` = `Undefined`.

`concat(1) ` = "1".

`concat([1, 2, 3], 4)` = [1, 2, 3, 4].

`concat([1, 2, 3], "hello")` = [1, 2, 3, "hello"]

`concat("con", "cat")` = "concat" 

`concat(1, "hello")` = "1hello"

`concat("he","is","man")` = "heisman"

`concat([1, 2, 3], "hello", [4, 5, 6])` = [1, 2, 3, "hello", 4, 5, 6]


****  

| Anzahl der Argumente | Ergebnis | 
| --- | --- | 
| 0 | Undefined. | 
| 1 | Das Argument wird unverändert zurückgegeben. | 
| 2\$1 |  Wenn ein Argument ein `Array` ist, ist das Ergebnis ein einzelnes Array, das alle Argumente enthält. Wenn kein Argument den Typ Array hat, und mindestens ein Argument den Typ `String` hat, ist das Ergebnis eine Verkettung der `String`-Darstellungen aller Argumente. Argumente werden mithilfe von oben genannten Standardkonvertierungen in Zeichenfolgen konvertiert.  | 

## cos(Decimal)
<a name="iot-func-cos"></a>

Gibt den Kosinus einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: 

`cos(0)` = 1.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der Kosinus des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## cosh(Decimal)
<a name="iot-func-cosh"></a>

Gibt den hyperbolischen Kosinus einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `cosh(2.3)` = 5,037220649268761. 


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der hyperbolische Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der hyperbolische Kosinus des Arguments. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der hyperbolische Kosinus des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. Imaginäre Ergebnisse werden als Undefined zurückgegeben. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## decode(value, decodingScheme)
<a name="iot-sql-decode-base64"></a>

Verwenden Sie die `decode` Funktion, um einen kodierten Wert zu dekodieren. Wenn es sich bei der dekodierten Zeichenfolge um ein JSON-Dokument handelt, wird ein adressierbares Objekt zurückgegeben. Andernfalls wird die dekodierte Zeichenfolge als Zeichenfolge zurückgegeben. Die Funktion gibt NULL zurück, wenn die Zeichenfolge nicht dekodiert werden kann. Diese Funktion unterstützt die Dekodierung von Base64-kodierten Zeichenketten und das Nachrichtenformat Protocol Buffer (protobuf).

Unterstützt von der SQL Version vom 23.03.2016 und höher.

value  
Ein Zeichenkettenwert oder einer der gültigen Ausdrücke, wie unter [AWS IoT SQL-Referenz](iot-sql-reference.md) definiert, die eine Zeichenfolge zurückgeben.

decodingScheme  
Eine Literalzeichenfolge, die das Schema darstellt, das zur Dekodierung des Wertes verwendet wurde. Aktuell werden nur `'base64'` und `'proto'` unterstützt.

### Dekodierung von base64-verschlüsselten Strings
<a name="iot-sql-decode-example"></a>

In diesem Beispiel enthält die Nachrichtennutzlast einen kodierten Wert.

```
{
    encoded_temp: "eyAidGVtcGVyYXR1cmUiOiAzMyB9Cg=="
}
```

Die `decode`-Funktion in dieser SQL-Anweisung dekodiert den Wert in der Nachrichtennutzlast.

```
SELECT decode(encoded_temp,"base64").temperature AS temp from 'topic/subtopic'
```

Die Dekodierung des `encoded_temp`-Wertes führt zu dem folgenden gültigen JSON-Dokument, das es der SELECT-Anweisung ermöglicht, den Temperaturwert zu lesen.

```
{ "temperature": 33 }
```

Das Ergebnis der SELECT-Anweisung in diesem Beispiel wird hier gezeigt.

```
{ "temp": 33 }
```

Ist der dekodierte Wert kein gültiges JSON-Dokument, wird der dekodierte Wert als Zeichenfolge zurückgegeben.

### Payloads der protobuf-Nachrichten entschlüsseln
<a name="iot-sql-decode-protobuf"></a>

Sie können SQL-Funktion dekodieren, um eine Regel zu konfigurieren, die die protobuf-Nachrichtennutzlast dekodieren kann. Weitere Informationen finden Sie unter [Payloads von protobuf-Nachrichten dekodieren](binary-payloads.md#binary-payloads-protobuf).

**Wichtig**  
Wenn Sie `source‐account` bei der Festlegung von Berechtigungen für einen AWS IoT Prinzipal das `source‐arn` oder weglassen, AWS-Konto kann jeder Ihre Decode-Funktion über andere Regeln aufrufen. AWS IoT Informationen zur Sicherung Ihrer Funktion finden Sie unter [Bucket-Richtlinien](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) im *Amazon Simple Storage Service-Benutzerhandbuch*.

Die Signatur der Funktion sieht wie folgt aus:

```
decode(<ENCODED DATA>, 'proto', '<S3 BUCKET NAME>', '<S3 OBJECT KEY>', '<PROTO NAME>', '<MESSAGE TYPE>')            
```

`ENCODED DATA`  
Gibt die protobuf-kodierten Daten an, die dekodiert werden sollen. Wenn es sich bei der gesamten an die Regel gesendeten Nachricht um protobuf-kodierte Daten handelt, können Sie die eingehende rohe binäre Nutzlast mit `*` referenzieren. Andernfalls muss es sich bei diesem Feld um eine Base-64-kodierte JSON-Zeichenfolge handeln, und ein Verweis auf die Zeichenfolge kann direkt übergeben werden.  
1) Um eine eingehende rohe binäre protobuf-Nutzlast zu dekodieren:  

```
decode(*, 'proto', ...)
```
2) Um eine protobuf-kodierte Nachricht zu dekodieren, die durch eine Base64-kodierte Zeichenfolge 'a.b' dargestellt wird:   

```
decode(a.b, 'proto', ...)
```

`proto`  
Spezifiziert die zu dekodierenden Daten in einem protobuf-Nachrichtenformat. Wenn Sie `base64` statt `proto` angeben, dekodiert diese Funktion Base64-kodierte Zeichenketten als JSON.

`S3 BUCKET NAME`  
Der Name des Amazon S3 Buckets, in den Sie die `FileDescriptorSet`-Datei hochgeladen haben.

`S3 OBJECT KEY`  
Der Objektschlüssel, das die `FileDescriptorSet`-Datei im Amazon S3 S3-Bucket spezifiziert.

`PROTO NAME`  
Der Name der `.proto`-Datei (ohne Erweiterung), aus der die `FileDescriptorSet`-Datei generiert wurde.

`MESSAGE TYPE`  
Der Name der protobuf-Nachrichtenstruktur innerhalb der `FileDescriptorSet`-Datei, der die zu dekodierenden Daten entsprechen sollen.

Ein Beispiel für einen SQL-Ausdruck, der die SQL-Funktion decode verwendet, kann wie folgt aussehen:

```
SELECT VALUE decode(*, 'proto', 's3-bucket', 'messageformat.desc', 'myproto', 'messagetype') FROM 'some/topic'
```
+ `*`

  Stellt eine binäre eingehende Nutzlast dar, die dem aufgerufenen protobuf-Nachrichtentyp mit dem Namen `mymessagetype`entspricht.
+ `messageformat.desc`

  Die in einem Amazon S3 S3-Bucket gespeicherte `FileDescriptorSet`-Datei mit dem Namen `s3-bucket`. 
+ `myproto`

  Die `.proto`-Originaldatei, die zur Generierung der `FileDescriptorSet`-Datei mit dem Namen `myproto.proto` verwendet wurde.
+ `messagetype`

  Der aufgerufene Nachrichtentyp `messagetype` (zusammen mit allen importierten Abhängigkeiten), wie in definiert`myproto.proto`.

## encode(value, encodingScheme)
<a name="iot-sql-encode-payload"></a>

Verwenden Sie die Funktion `encode`, um die Nutzlast, bei der es sich möglicherweise um Nicht-JSON-Daten handelt, auf der Grundlage des Kodierungsschemas in ihre String-Darstellung zu kodieren. Unterstützt von der SQL Version vom 23.03.2016 und höher.

value  
Einer der gültigen Ausdrücke, wie in [AWS IoT SQL-Referenz](iot-sql-reference.md) definiert. Sie können „\$1“ angeben, um die gesamte Nutzlast zu verschlüsseln, unabhängig davon, ob sie das JSON-Format oder ein anderes Format aufweist. Wenn Sie einen Ausdruck angeben, wird das Ergebnis der Auswertung vor dem Verschlüsseln in eine Zeichenfolge umgewandelt.

encodingScheme  
Eine Literalzeichenfolge, die das zu verwendende Verschlüsselungsschema darstellt. Derzeit wird nur `'base64'` unterstützt.

## endswith(String, String)
<a name="iot-func-endswith"></a>

Gibt einen Wert vom Typ `Boolean` zurück, der angibt, ob das erste `String`-Argument mit dem zweiten `String`-Argument endet. Wenn ein Argument `Null` oder `Undefined` ist, ist das Ergebnis `Undefined`. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `endswith("cat","at")` = true.


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| String | String | "True", wenn das erste Argument auf das zweite Argument endet. Ansonsten „false“. | 
| Anderer Wert | Anderer Wert | Beide Argumente werden mithilfe der Standardkonvertierungsregeln zu Zeichenfolgen konvertiert. "True", wenn das erste Argument auf das zweite Argument endet. Ansonsten „false“. Wenn ein Argument Null oder Undefined ist, ist das Ergebnis Undefined. | 

## exp(Decimal)
<a name="iot-func-exp"></a>

Gibt "e" zurück, potenziert mit dem `Decimal`-Argument. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `exp(1)` = e. 


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), e ^ Argument. | 
| Decimal | Decimal (mit doppelter Genauigkeit), e ^ Argument. | 
| String | Decimal (mit doppelter Genauigkeit), e ^ Argument. Wenn der String-Wert nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined.  | 
| Anderer Wert | Undefined. | 

## floor(Decimal)
<a name="iot-func-floor"></a>

Rundet den angegebenen `Decimal`-Wert auf den nächsten `Int`-Wert ab. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`floor(1.2)` = 1

`floor(-1.2)` = -2


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Int, der Argumentwert | 
| Decimal | Int, der auf den nächsten Int abgerundete Decimal-Wert. | 
| String | Int. Die Zeichenfolge wird konvertiert in Decimal und auf den nächsten Int-Wert abgerundet. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Anderer Wert | Undefined. | 

## get
<a name="iot-sql-function-get"></a>

Extrahiert einen Wert aus einem sammlungsartigen Typ (Array, Zeichenfolge, Objekt). Auf das erste Argument wird keine Konvertierung angewendet. Die Konvertierung wird wie in der Tabelle dokumentiert auf das zweite Argument angewendet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`get(["a", "b", "c"], 1) ` = "b"

`get({"a":"b"}, "a")` = "b"

`get("abc", 0)` = „a“.


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| Array | Beliebiger Typ (konvertiert in Int) | Das Element am 0-basierten Index des Array-Werts, der vom zweiten Argument angegeben wird (konvertiert in Int). Wenn die Konvertierung fehlschlägt, ist das Ergebnis Undefined. Wenn sich der Index außerhalb von Array befindet (negativ oder >= array.length), ist das Ergebnis Undefined. | 
| Zeichenfolge | Beliebiger Typ (konvertiert in Int) | Das Zeichen am 0-basierten Index der Zeichenfolge, der vom zweiten Argument angegeben wird (konvertiert in Int). Wenn die Konvertierung fehlschlägt, ist das Ergebnis Undefined. Wenn sich der Index außerhalb der Zeichenfolge befindet (negativ oder >= string.length), ist das Ergebnis Undefined. | 
| Object | String (keine Konvertierung wird angewendet) | Der im ersten Argumentobjekt gespeicherte Wert, der dem Zeichenfolgenschlüssel entspricht, der als zweites Argument angegeben wurde. | 
| Anderer Wert | Beliebiger Wert | Undefined. | 

## get\$1dynamodb (tableName,,, partitionKeyName, partitionKeyValue roleArn) sortKeyName sortKeyValue
<a name="iot-sql-function-get-dynamodb"></a>

Ruft Daten aus einer DynamoDB-Tabelle ab. `get_dynamodb()` ermöglicht es Ihnen, eine DynamoDB-Tabelle abzufragen, während eine Regel evaluiert wird. Sie können den Nachrichten-Payload mit Hilfe von Daten aus DynamoDB filtern oder erweitern. Unterstützt von der SQL Version vom 23.03.2016 und höher.

`get_dynamodb()` verwendet folgenden Parameter:

tableName  
Der Name der DynamoDB-Tabelle für die Abfrage.

partitionKeyName  
Der Name des Partitionsschlüssels. Weitere Informationen finden Sie unter [DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey).

partitionKeyValue  
Der Wert des Partitionsschlüssels, der zur Identifizierung eines Datensatzes verwendet wird. Weitere Informationen finden Sie unter [DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey).

sortKeyName  
(Optional) Der Name des Sortierschlüssels. Dieser Parameter ist nur erforderlich, wenn die abgefragte DynamoDB-Tabelle einen zusammengesetzten Schlüssel verwendet. Weitere Informationen finden Sie unter [DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey).

sortKeyValue  
Der Wert des Sortierschlüssels. Dieser Parameter ist nur erforderlich, wenn die abgefragte DynamoDB-Tabelle einen zusammengesetzten Schlüssel verwendet. Weitere Informationen finden Sie unter [DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey).

roleArn  
Der ARN der IAM-Rolle, der den Zugriff auf die DynamoDB-Tabelle gewährt. Die Regel-Engine übernimmt diese Rolle, um in Ihrem Namen auf die DynamoDB-Tabelle zuzugreifen. Vermeiden Sie die Verwendung einer zu großzügigen Rolle. Erteilen Sie der Rolle nur die von der Regel benötigten Berechtigungen. Nachfolgend finden Sie eine Beispielrichtlinie, die Zugriff auf eine DynamoDB-Tabelle gewährt.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dynamodb:GetItem",
            "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/table-name"
        }
    ]
}
```

Als Beispiel dafür, wie Sie `get_dynamodb()` verwenden können, nehmen wir an, Sie haben eine DynamoDB-Tabelle, die Geräte-ID- und Standortinformationen für alle mit AWS IoT verbundenen Geräte enthält. Die folgende SELECT-Anweisung verwendet die `get_dynamodb()`-Funktion, um den Standort für die angegebene Geräte-ID abzurufen:

`SELECT *, get_dynamodb("InServiceDevices", "deviceId", id, "arn:aws:iam::12345678910:role/getdynamo").location AS location FROM 'some/topic' `

**Anmerkung**  
Sie können `get_dynamodb()` maximal einmal pro SQL-Anweisung aufrufen. Der mehrfache Aufruf von `get_dynamodb()` in einer einzigen SQL-Anweisung führt dazu, dass die Regel ohne Aufruf von Aktionen beendet wird.

## get\$1mqtt\$1property(name)
<a name="iot-sql-function-get-mqtt-property"></a>

Verweist auf einen der folgenden MQTT5 Header:,, und. `contentType` `payLoadFormatIndicator` `responseTopic` `correlationData` Diese Funktion verwendet eine der folgenden Literalzeichenfolgen als Argument:`content_type`, `format_indicator`. `response_topic` und `correlation_data` Weitere Informationen in der folgenden Tabelle mit **Funktionsargumenten**.

contentType  
Zeichenfolge: Eine UTF-8-kodierte Zeichenfolge, die den Inhalt der Veröffentlichungsnachricht beschreibt.

payLoadFormatIndikator  
Zeichenfolge: Ein Enum-Zeichenfolgenwert, der angibt, ob die Nutzlast als UTF-8 formatiert ist. Gültige Werte sind `UNSPECIFIED_BYTES` und `UTF8_DATA`.

responseTopic  
Zeichenfolge: Eine UTF-8 kodierte Zeichenfolge, die als Themenname für eine Antwortnachricht verwendet wird. Das Antwortthema wird verwendet, um das Thema zu beschreiben, das der Empfänger im Rahmen des Ablaufs Anforderung-Antwort veröffentlichen soll. Das Thema darf keine Platzhalterzeichen enthalten.

correlationData  
Zeichenfolge: Die base64-kodierten Binärdaten, die vom Absender der Request Message verwendet werden, um zu identifizieren, für welche Anforderung die Response Message bestimmt ist, wenn sie empfangen wird.

Die folgende Tabelle zeigt die zulässigen Funktionsargumente und die zugehörigen Rückgabetypen für die `get_mqtt_property`-Funktion:


**Funktionsargumente**  

| SQL | Zurückgegebener Datentyp (falls vorhanden) | Zurückgegebener Datentyp (falls vorhanden) | 
| --- | --- | --- | 
| get\$1mqtt\$1property("format\$1indicator") | Zeichenfolge (UNSPECIFIED\$1BYTES oder \$1DATA) UTF8 | Zeichenfolge (UNSPECIFIED\$1BYTES) | 
| get\$1mqtt\$1property("content\$1type") | Zeichenfolge | Undefined | 
| get\$1mqtt\$1property("response\$1topic") | Zeichenfolge | Undefined | 
| get\$1mqtt\$1property("correlation\$1data") | base64-kodierte Zeichenfolge | Undefined | 
| get\$1mqtt\$1property("some\$1invalid\$1name") | Undefined | Undefined | 

Das folgende Beispiel für Rules SQL verweist auf einen der folgenden MQTT5 Header:,, und. `contentType` `payLoadFormatIndicator` `responseTopic` `correlationData`

```
SELECT *, get_mqtt_property('content_type') as contentType,
          get_mqtt_property('format_indicator') as payloadFormatIndicator,
          get_mqtt_property('response_topic') as responseTopic,
          get_mqtt_property('correlation_data') as correlationData
FROM 'some/topic'
```

## get\$1or\$1default (Ausdruck, defaultValue)
<a name="iot-sql-function-get-or-default"></a>

Gibt den Standardwert im zweiten Parameter zurück, falls angegeben, oder gibt undefined zurück, wenn der Ausdruck im ersten Parameter Null, undefiniert zurückgibt oder fehlschlägt. Unterstützt von der SQL Version vom 23.03.2016 und höher.

**Wichtig**  
`get_or_default`unterstützt Payloads, die nicht als JSON gelten, nicht direkt. Wenn Sie eine Nicht-JSON-Nutzlast verwenden, verwenden Sie die Funktionen oder. `encode` `decode`

`get_or_default()` verwendet folgenden Parameter:

Ausdruck  
Jeder gültige Ausdruck[Datentypen](iot-sql-data-types.md),,, [Variablen [Funktionen](#iot-sql-functions)[Literale](iot-sql-literals.md)](iot-sql-set.md#iot-sql-set-usage),, oder enthält. [Verschachtelte Objektabfragen](iot-sql-nested-queries.md) [JSON-Erweiterungen](iot-sql-json.md) 

defaultValue  
(Optional) Jeder gültige Ausdruck, der[Datentypen](iot-sql-data-types.md), [Funktionen](#iot-sql-functions)[Literale](iot-sql-literals.md), [Variablen](iot-sql-set.md#iot-sql-set-usage),[Verschachtelte Objektabfragen](iot-sql-nested-queries.md), oder enthält[JSON-Erweiterungen](iot-sql-json.md). Dies ist der Wert, der immer dann zurückgegeben werden muss, wenn das erste Argument Null oder undefiniert zurückgibt oder fehlschlägt.   
Funktionen, die Daten aus kundeneigenen Ressourcen abrufen, wie get\$1secret, get\$1dynamodb, aws\$1lambda, get\$1thing\$1shadow, decode-protobuf und machinelearning\$1predict, sind für den DefaultValue-Parameter nicht zulässig.

Die folgende Tabelle zeigt akzeptable Funktionsargumente für jedes Argument und die zugehörigen Ausgaben:


| Erstes Argument | Zweites Argument | Ausgabe | 
| --- | --- | --- | 
| Erfolgreiche Bewertung | Beliebiger Wert oder nicht angegeben | Der erste Argumentwert. | 
| Undefiniert, Null oder Fehler | Jeder Wert, einschließlich Undefiniert oder Null | Der zweite Argumentwert. | 
| Undefiniert, Null oder Fehler | nicht angegeben | Undefined | 

**Beispiele:**

Beispiel 1:

Das folgende Beispiel stellt einen DefaultValue-Wert bereit, falls eine DynamoDB-Tabelle oder -Abfrage fehlschlägt:

```
SELECT 
    device_id,
    get_or_default(
        get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME"),
        {"mode": "standard", "timeout": 30, "enabled": true }
    ) as config
FROM 'device/telemetry'
```

Beispiel 2:

Das folgende Beispiel stellt den sicheren Standardwert „UNKNOWN“ bereit, wenn der Status undefiniert ist:

```
SELECT 
  get_or_default( CASE status
    WHEN 'active' THEN 'GOOD'
    WHEN 'inactive' THEN 'BAD'/
    ELSE 'UNKNOWN'
  END, 'UNKNOWN') as status_category
FROM 'topic/subtopic'
```

Beispiel 3:

Das folgende Beispiel zeigt, wie Sie get\$1or\$1default auch mit einem einzigen Parameter verwenden können. Dies ist nützlich in Szenarien, in denen Sie möglicherweise keinen eindeutigen Standardwert haben, Sie aber nicht möchten, dass Ihre Regelausführung fehlschlägt.

```
SELECT 
  get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME") as config
FROM 'device/telemetry'
```

Wenn die DynamoDB-Suche fehlschlägt, schlägt die Regelausführung fehl und es werden keine Aktionen ausgeführt. Wenn stattdessen das folgende SQL verwendet wird:

```
SELECT 
  get_or_default(get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME")) as config
FROM 'device/telemetry'
```

Die get\$1or\$1default-Anweisung wird als ausgewertet. In diesem Beispiel wird also die SELECT-Anweisung insgesamt als ausgewertet `{}` und es werden alle Regelaktionen versucht. `Undefined`

**Wichtig**  
Wir empfehlen, die folgenden bewährten Methoden zu befolgen, um die Sicherheit bei der Verwendung dieser Funktion zu gewährleisten:  
Vermeiden Sie die Verwendung von hartcodierten Geheimnissen in Regeldefinitionen, einschließlich Standardwerten
Wird AWS Secrets Manager für die Verwaltung vertraulicher Informationen verwendet

## get\$1registry\$1data (Registry API, thingName, roleArn)
<a name="iot-sql-function-get-registry-data"></a>

Ruft Ding-Registrierungsdaten in einer Regel ab. AWS IoT AWS IoT Sie können Registrierungsdaten (wie Attribute, Dingtyp und Dinggruppen, zu denen ein Gerät gehört) lesen und diese Informationen verwenden, um Nachrichten zu filtern, anzureichern oder dynamisch weiterzuleiten. Unterstützt von der SQL Version vom 23.03.2016 und höher.

`get_registry_data()` verwendet folgenden Parameter:

Registrierungs-API  
Die Registrierungs-API wird aufgerufen. Gültige Werte sind `DescribeThing` und `ListThingGroupsForThing`. Bei diesen Werten muss es sich um konstante Zeichenketten handeln.

thingName  
Zeichenfolge: Der Name der Sache, deren Registrierungsdaten Sie abrufen möchten.

roleArn  
Zeichenfolge: Ein Rollen-ARN mit `iot:DescribeThing` and/or `iot:ListThingGroupsForThing` Berechtigungsberechtigungen, die auf der aufgerufenen API basieren.

Das Antwortformat der `get_registry_data` Funktion entspricht dem der aufgerufenen Registrierungs-API. Weitere Informationen finden Sie unter [DescribeThing](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeThing.html) und [ListThingGroupsForThing](https://docs.aws.amazon.com//iot/latest/apireference/API_ListThingGroupsForThing.html) APIs.

Beispiel:

Sie können Informationen zum Typ von Dingen abrufen, um die AWS IoT Core Lebenszyklusereignismeldungen nach Dingen filtern zu können (wobei der Name des Dings mit der MQTT-Client-ID übereinstimmt), für die sich der Typ des Dings befindet`testenv`.

```
SELECT * 
FROM '$aws/events/lifecycle/+' 
WHERE 
    get_registry_data("DescribeThing",clientId,[roleArn]).thingTypeName='testenv'
```

Beispiel:

Sie können die Ding-Attribute für ein Gerät mit dem Ding-Namen `sensor1` für alle Nachrichten abrufen, die von seinem Gateway-Gerät `gateway1` gesendet wurden.

```
SELECT *, get_registry_data("DescribeThing","sensor1",[roleArn]).attributes.temperature_threhold AS device1_tempthreshold 
FROM home1/gateway1/sensor1/#
```

**Anmerkung**  
Sie können `get_registry_data()` maximal einmal pro SQL-Anweisung und Ersatzvorlagen für Aktionen und Fehleraktionen aufrufen.

## get\$1secret (secretId, geheimer Typ, Schlüssel, roleArn)
<a name="iot-sql-function-get-secret"></a>

Ruft den Wert des verschlüsselten `SecretString` oder `SecretBinary`-Feldes der aktuellen Version eines Secrets in [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) ab. Weitere Hinweise zum Erstellen und Verwalten von Geheimnissen finden Sie unter [CreateSecret[UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html), und [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html).

`get_secret()` verwendet folgenden Parameter:

secretId  
Zeichenfolge: Der Amazon-Ressourcenname (ARN) oder der Anzeigename des Secrets, das abgerufen werden soll. 

SecretType  
Zeichenfolge: Der Secret-Typ. Zulässige Werte: `SecretString` \$1 `SecretBinary`.    
SecretString  
+ Informationen zu Geheimnissen, die Sie als JSON-Objekte mithilfe der APIs AWS CLI, der oder der AWS Secrets Manager Konsole erstellen:
  + Wenn Sie einen Wert für den `key`-Parameter angeben, gibt diese Funktion den Wert des angegebenen Schlüssels zurück.
  + Wenn Sie keinen Wert für den `key`-Parameter angeben, gibt diese Funktion das gesamte JSON-Objekt zurück.
+ Für Geheimnisse, die Sie als Nicht-JSON-Objekte erstellen, indem Sie das APIs oder das AWS CLI verwenden:
  + Wenn Sie einen Wert für den `key`-Parameter angeben, schlägt diese Funktion mit einer Ausnahme fehl.
  + Wenn Sie keinen Wert für den `key`-Parameter angeben, gibt diese Funktion den Inhalt des Secrets zurück.  
SecretBinary  
+ Wenn Sie einen Wert für den `key`-Parameter angeben, schlägt diese Funktion mit einer Ausnahme fehl.
+ Wenn Sie keinen Wert für den `key`-Parameter angeben, gibt diese Funktion den geheimen Wert als Base64-kodierte UTF-8-Zeichenfolge zurück.

Schlüssel  
(Optional) Zeichenfolge: Der Schlüsselname in einem JSON-Objekt, das im `SecretString`-Feld eines Geheimnisses gespeichert ist. Verwenden Sie diesen Wert, wenn Sie statt des gesamten JSON-Objekts nur den Wert eines in einem geheimen Schlüssel gespeicherten Schlüssels abrufen möchten.  
Wenn Sie einen Wert für diesen Parameter angeben und das Geheimnis kein JSON-Objekt in seinem `SecretString`-Feld enthält, schlägt diese Funktion mit einer Ausnahme fehl.

roleArn  
Zeichenfolge: Eine Rollen-ARN mit den Berechtigungen `secretsmanager:GetSecretValue` und `secretsmanager:DescribeSecret`.

**Anmerkung**  
Diese Funktion gibt immer die aktuelle Version des Geheimnisses zurück (die Version mit dem `AWSCURRENT` Tag). Die AWS IoT Regel-Engine speichert jedes Geheimnis bis zu 15 Minuten lang im Cache. Daher kann es bis zu 15 Minuten dauern, bis die Regel-Engine ein Geheimnis aktualisiert. Das heißt, wenn Sie ein Geheimnis bis zu 15 Minuten nach einem Update mit abrufen AWS Secrets Manager, gibt diese Funktion möglicherweise die vorherige Version zurück.  
Diese Funktion ist nicht kostenpflichtig, es AWS Secrets Manager fallen jedoch Gebühren an. Aufgrund des geheimen Caching-Mechanismus ruft die Regel-Engine gelegentlich AWS Secrets Manager auf. Da es sich bei der Regel-Engine um einen vollständig verteilten Dienst handelt, können Sie während des 15-minütigen Caching-Fensters mehrere Secrets Manager Manager-API-Aufrufe von der Regel-Engine sehen.

Beispiele:

Sie können die `get_secret`-Funktion in einem Authentifizierungsheader in einer HTTPS-Regelaktion verwenden, wie im folgenden Beispiel für die API-Schlüsselauthentifizierung.

```
"API_KEY": "${get_secret('API_KEY', 'SecretString', 'API_KEY_VALUE', 'arn:aws:iam::12345678910:role/getsecret')}"
```

Weitere Informationen zu Regelaktionen finden Sie unter [HTTP](https-rule-action.md).

## get\$1thing\$1shadow (DingName, shadowName, roleArn)
<a name="iot-sql-function-get-thing-shadow"></a>

Gibt den angegebenen Schatten des angegebenen Geräts zurück. Unterstützt von der SQL Version vom 23.03.2016 und höher.

thingName  
Zeichenfolge: Der Name des Geräts, dessen Schatten Sie abrufen möchten.

shadowName  
(Optionale) Zeichenfolge: Der Name des Schattens. Dieser Parameter ist nur erforderlich, wenn auf benannte Schatten verwiesen wird.

roleArn  
Zeichenfolge: Eine Rollen-ARN mit der Berechtigung `iot:GetThingShadow`.

Beispiele:

Geben Sie bei Verwendung mit einem benannten Schatten den `shadowName`-Parameter an.

```
SELECT * from 'topic/subtopic'
WHERE
    get_thing_shadow("MyThing","MyThingShadow","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
    .state.reported.alarm = 'ON'
```

Lassen Sie bei Verwendung mit einem benannten Schatten den `shadowName`-Parameter aus.

```
SELECT * from 'topic/subtopic'
WHERE
    get_thing_shadow("MyThing","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
    .state.reported.alarm = 'ON'
```

## get\$1user\$1properties () userPropertyKey
<a name="iot-sql-function-get-user-properties"></a>

Verweist auf Benutzereigenschaften, eine Art von Eigenschaftsheadern, die in unterstützt werden. MQTT5

userProperty  
Zeichenfolge: Eine Benutzereigenschaft ist ein Schlüssel-Wert-Paar. Diese Funktion verwendet den Schlüssel als Argument und gibt ein Array mit allen Werten zurück, die dem zugehörigen Schlüssel entsprechen.

**Funktionsargumente**

Für die folgenden Benutzereigenschaften in den Nachrichtenkopfzeilen:


| Key (Schlüssel) | Value (Wert) | 
| --- | --- | 
| ein Schlüssel | ein Wert | 
| ein anderer Schlüssel | ein anderer Wert | 
| ein Schlüssel | Wert mit doppeltem Schlüssel | 

Die folgende Tabelle zeigt das erwartete SQL-Verhalten:


| SQL | Ein Rückgabedatentyp | Zurückgegebener Datenwert | 
| --- | --- | --- | 
| get\$1user\$1properties ('irgendein Schlüssel') | Zeichenfolgen-Array | ['some value', 'value with duplicate key'] | 
| get\$1user\$1properties ('anderer Schlüssel') | Zeichenfolgen-Array | ['a different value'] | 
| get\$1user\$1properties () | Array von Schlüssel-Wert-Paar-Objekten | [\$1'"some key": "some value"'\$1, \$1"other key": "a different value"\$1, \$1"some key": "value with duplicate key"\$1] | 
| get\$1user\$1properties ('Schlüssel nicht vorhandener Schlüssel') | Undefined |  | 

Das folgende Beispiel für Rules SQL verweist auf Benutzereigenschaften (eine Art MQTT5 Eigenschaften-Header) in der Payload:

```
SELECT *, get_user_properties('user defined property key') as userProperty
FROM 'some/topic'
```

## Hashfunktionen
<a name="iot-sql-function-hash"></a>

 AWS IoT stellt die folgenden Hashing-Funktionen bereit:
+ md2
+ md5
+ sha1
+ sha224
+ sha256
+ sha384
+ sha512

Alle Hashfunktionen erwarten ein Zeichenfolgenargument. Das Ergebnis ist der Hashwert dieser Zeichenfolge. Standard-Zeichenfolgenkonvertierungen gelten für alle Argumente, die keine Zeichenfolgen sind. Alle Hashfunktionen werden von der SQL Version 2015-10-08 und höher unterstützt.

Beispiele:

`md2("hello")` = "a9046c73e00331af68917d3804f70655"

`md5("hello")` = "5d41402abc4b2a76b9719d911017c592"

## indexof(String, String)
<a name="iot-sql-function-indexof"></a>

Gibt den ersten Index (0-basiert) des zweiten Arguments als Teilzeichenfolge des ersten Arguments zurück. Beide Argumente werden als Zeichenfolgen erwartet. Argumente, die keine Zeichenfolgen sind, unterliegen den Standardregeln für die Zeichenfolgenkonvertierung. Diese Funktion gilt nicht für Arrays, nur für Zeichenfolgen. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Beispiele:

`indexof("abcd", "bc") ` = 1

## isNull()
<a name="iot-sql-function-isNull"></a>

Gibt „true“ zurück, wenn das Argument der Wert `Null` ist. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Beispiele:

`isNull(5) ` = false.

`isNull(Null) ` = true.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | true | 
| Undefined | false | 

## isUndefined()
<a name="iot-sql-function-isUndefined"></a>

Gibt „true“ zurück, wenn das Argument `Undefined` ist. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Beispiele:

`isUndefined(5) ` = false.

`isUndefined(floor([1,2,3]))) ` = true.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | false | 
| Undefined | true | 

## length(String)
<a name="iot-sql-function-length"></a>

Gibt die Anzahl der Zeichen in der angegebenen Zeichenfolge zurück. Für andere Argumente als `String` gelten Standardkonvertierungsregeln. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Beispiele:

`length("hi")` = 2

`length(false)` = 5

## ln(Decimal)
<a name="iot-func-nln"></a>

Gibt den natürlichen Logarithmus des Arguments zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `ln(e)` = 1. 


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der natürliche Logarithmus des Arguments | 
| Decimal | Decimal (mit doppelter Genauigkeit), der natürliche Logarithmus des Arguments | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der natürliche Logarithmus des Arguments Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined.  | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## log(Decimal)
<a name="iot-func-log"></a>

Gibt den Logarithmus des Arguments zur Basis 10 zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `log(100)` = 2.0. 


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der Logarithmus des Arguments zur Basis 10 | 
| Decimal | Decimal (mit doppelter Genauigkeit), der Logarithmus des Arguments zur Basis 10 | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der Logarithmus des Arguments zur Basis 10 Wenn der String-Wert nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined.  | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## lower(String)
<a name="iot-func-lower"></a>

Gibt die kleingeschriebene Version des angegebenen `String`-Werts zurück. Andere Argumente als Zeichenfolgen werden mithilfe der Standardkonvertierungsregeln zu Zeichenfolgen konvertiert. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`lower("HELLO")` = „hello“

`lower(["HELLO"])` = "[\$1"hello\$1"]"

## lpad(String, Int)
<a name="iot-func-lpad"></a>

Gibt das Argument `String` zurück, das auf der linken Seite mit der vom zweiten Argument festgelegten Anzahl an Leerzeichen aufgefüllt wurde. Das Argument `Int` muss zwischen 0 und 1000 liegen. Wenn der angegebene Wert außerhalb des gültigen Bereichs liegt, wird das Argument auf den nächsten gültigen Wert (0 oder 1000) festgelegt. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`lpad("hello", 2)` = "`  hello`".

`lpad(1, 3)` = "`   1`"


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| String | Int | String, der angegebene String-Wert, der auf der linken Seite mit der Anzahl an Leerzeichen aufgefüllt wurde, die dem angegebenen Int-Wert entspricht | 
| String | Decimal | Das Decimal-Argument wird auf den nächsten Int-Wert abgerundet und String wird links mit der angegebenen Anzahl an Leerzeichen aufgefüllt  | 
| String | String | Das zweite Argument wird in einen Decimal-Wert konvertiert, der auf den nächsten Int-Wert abgerundet wird und der String-Wert wird links mit der angegebenen Anzahl an Leerzeichen aufgefüllt. Wenn das zweite Argument nicht in einen Int-Wert konvertiert werden kann, ist das Ergebnis Undefined.  | 
| Anderer Wert | Int/Decimal/String | Der erste Wert wird mit der Standardkonvertierungen in String konvertiert und anschließend wird die LPAD-Funktion auf diesen String angewendet. Wenn er nicht konvertiert werden kann, ist das Ergebnis Undefined. | 
| Beliebiger Wert | Anderer Wert | Undefined. | 

## ltrim(String)
<a name="iot-func-ltrim"></a>

Entfernt alle führenden Leerzeichen (Tabulatoren und Leerzeichen) aus dem angegebenen `String`-Wert. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`Ltrim(" h i ")` = "hi "


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts nach dem Entfernen der führenden Leerzeichen. | 
| Decimal | Die String-Darstellung des Decimal-Werts nach dem Entfernen der führenden Leerzeichen. | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) nach dem Entfernen der führenden Leerzeichen. | 
| String | Das Argument nach dem Entfernen der führenden Leerzeichen. | 
| Array | Die String-Darstellung dvon es Array (mit Standardkonvertierungsregeln) nach dem Entfernen der führenden Leerzeichen. | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) nach dem Entfernen der führenden Leerzeichen. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## machinelearning\$1predict (modelId, roleArn, Datensatz)
<a name="iot-sql-function-machine-learning"></a>

Verwenden Sie die `machinelearning_predict` Funktion, um anhand der Daten aus einer MQTT-Nachricht, die auf einem Amazon SageMaker AI-Modell basiert, Vorhersagen zu treffen. Unterstützt von SQL Version 2015-10-08 und höher. Die Argumente für die `machinelearning_predict`-Funktion sind:

modelId  
Die ID des Modells, für das die Voraussage ausgeführt werden soll. Der Echtzeitendpunkt des Modells muss aktiviert sein.

roleArn  
Die IAM-Rolle, die über eine Richtlinie mit den Berechtigungen `machinelearning:Predict` und `machinelearning:GetMLModel` verfügt und Zugriff auf das Modell erlaubt, für das die Voraussage ausgeführt wird.

record  
Die Daten, die an die SageMaker AI Predict API übergeben werden sollen. Dies sollte als JSON-Objekt mit einer einzelnen Ebene dargestellt werden. Wenn der Datensatz ein JSON-Objekt mit mehreren Ebenen ist, wird der Datensatz auf eine Ebene gebracht, indem seine Werte serialisiert werden. Das folgende JSON-Objekt:  

```
{ "key1": {"innerKey1": "value1"}, "key2": 0}
```
 wird beispielsweise folgendermaßen geändert:  

```
{ "key1": "{\"innerKey1\": \"value1\"}", "key2": 0}
```

Die Funktion gibt ein JSON-Objekt mit den folgenden Feldern zurück:

predictedLabel  
Die Klassifizierung der Eingabe auf Grundlage des Modells

Details  
Enthält die folgenden Attribute:    
PredictiveModelType  
Der Modelltyp. Gültige Werte sind REGRESSION, BINARY, MULTICLASS.  
Algorithmus  
Der Algorithmus, der von SageMaker KI verwendet wird, um Vorhersagen zu treffen. Dieser Wert muss SGD sein.

predictedScores  
Enthält den Klassifizierungs-Rohwert für jede Bezeichnung.

predictedValue  
Der von SageMaker KI vorhergesagte Wert.

## mod(Decimal, Decimal)
<a name="iot-func-mod"></a>

Gibt den Rest zurück, der beim Teilen des ersten Arguments durch das zweite Argument entstanden ist. Äquivalent mit [remainder(Decimal, Decimal)](#iot-func-remainder). Sie können auch "%" als infix-Operator für die gleiche Modulfunktionalität verwenden. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `mod(8, 3)` = 2


****  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int, das erste Argumentmodulo des zweiten Arguments | 
| Int/Decimal | Int/Decimal | Decimal, das erste Argumentmodulo des zweiten Operanden | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in Dezimal-Werte konvertiert werden, ist das Ergebnis das erste Argumentmodulo des zweiten Arguments. Andernfalls Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## nanvl (AnyValue, AnyValue)
<a name="iot-func-nanvl"></a>

Gibt das erste Argument zurück, wenn es ein gültiger `Decimal`-Wert ist. Andernfalls wird das zweite Argument zurückgegeben. Unterstützt von SQL Version 2015-10-08 und höher. 

Beispiel: `Nanvl(8, 3)` = 8.


****  

| Argumenttyp 1 | Argumenttyp 2 | Ausgabe | 
| --- | --- | --- | 
| Undefined | Beliebiger Wert | Das zweite Argument | 
| Null | Beliebiger Wert | Das zweite Argument | 
| Decimal (NaN) | Beliebiger Wert | Das zweite Argument | 
| Decimal (nicht NaN) | Beliebiger Wert | Das erste Argument | 
| Anderer Wert | Beliebiger Wert | Das erste Argument | 

## newuuid()
<a name="iot-sql-function-newuuid"></a>

Gibt eine zufällige 16-Byte-UUID zurück. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `newuuid()` = `123a4567-b89c-12d3-e456-789012345000`

## numbytes(String)
<a name="iot-sql-function-numbytes"></a>

Gibt die Anzahl von Bytes in der UTF-8-Codierung der angegebenen Zeichenfolge zurück. Für andere Argumente als `String` gelten Standardkonvertierungsregeln. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Beispiele:

`numbytes("hi")` = 2

`numbytes("€") ` = 3

## parse\$1time(String, Long, [String])
<a name="iot-sql-function-parse-time"></a>

Verwenden Sie die `parse_time` Funktion, um einen Zeitstempel in ein für Menschen date/time lesbares Format zu formatieren. Unterstützt von der SQL Version vom 23.03.2016 und höher. Informationen zur Konvertierung einer Zeitstempelzeichenfolge in Millisekunden finden Sie unter [time\$1to\$1epoch (Zeichenfolge, Zeichenfolge)](#iot-sql-function-time-to-epoch).

Die `parse_time`-Funktion verwendet folgende Argumente:

pattern  
[(String) Ein date/time Muster, das den Joda-Time-Formaten folgt.](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html) 

Zeitstempel  
(Long) Die zu formatierende Zeit in Millisekunden seit dem Startdatum der Unixzeit. Siehe Funktion [timestamp()](#iot-function-timestamp).

timezone  
(Zeichenfolge) Die Zeitzone des formatierten Datums bzw. der formatierten Uhrzeit. Der Standardwert ist "UTC". Die Funktion unterstützt [Joda-Zeitzonen](http://joda-time.sourceforge.net/timezones.html) Dieses Argument ist optional.

Beispiele:

Wenn diese Nachricht für das Thema „A/B“ veröffentlicht wird, wird die Nutzlast `{"ts": "1970.01.01 AD at 21:46:40 CST"}` an den S3-Bucket gesendet:

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", 100000000, 'America/Belize' ) as ts FROM 'A/B'",

        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "s3": {
                    "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                    "bucketName": "BUCKET_NAME",
                    "key": "KEY_NAME"
                }
            }
        ],
        "ruleName": "RULE_NAME"
    }
}
```

Wenn diese Nachricht für das Thema „A/B“ veröffentlicht wird, wird eine Nutzlast ähnlich `{"ts": "2017.06.09 AD at 17:19:46 UTC"}` (aber mit aktuellen Datum/Uhrzeit) an den S3-Bucket gesendet:

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", timestamp() ) as ts FROM 'A/B'",
        "awsIotSqlVersion": "2016-03-23",
        "ruleDisabled": false,
        "actions": [
            {
                "s3": {
                    "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                    "bucketName": "BUCKET_NAME",
                    "key": "KEY_NAME"
                }
            }
        ],
        "ruleName": "RULE_NAME"
    }
}
```

`parse_time()` kann auch als Ersatz-Vorlage verwendet werden. Wenn diese Nachricht beispielsweise für das Thema „A/B“ veröffentlicht wird, wird die Nutzlast an den S3-Bucket mit Schlüssel = „2017“ gesendet:

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT * FROM 'A/B'",
        "awsIotSqlVersion": "2016-03-23",
        "ruleDisabled": false,
        "actions": [{
            "s3": {
                "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                "bucketName": "BUCKET_NAME",
                "key": "${parse_time('yyyy', timestamp(), 'UTC')}"
            }
        }],
        "ruleName": "RULE_NAME"
    }
}
```

## power(Decimal, Decimal)
<a name="iot-func-power"></a>

Gibt das erste Argument, potenziert mit dem zweiten Argument, zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `power(2, 5)` = 32,0


****  

| Argumenttyp 1 | Argumenttyp 2 | Ausgabe | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Ein Decimal-Wert (mit doppelter Genauigkeit), das erste Argument, potenziert mit dem zweiten Argument | 
| Int/Decimal/String | Int/Decimal/String | Ein Decimal-Wert (mit doppelter Genauigkeit), das erste Argument, potenziert mit dem zweiten Argument Alle Zeichenfolgen werden in Dezimal-Werte konvertiert. Wenn String-Werte nicht in Decimal-Werte umgewandelt werden können, ist das Ergebnis Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## Prinzipal()
<a name="iot-sql-function-principal"></a>

Gibt den Prinzipal zurück, den das Gerät für die Authentifizierung verwendet, basierend darauf, wie die auslösende Nachricht veröffentlicht wurde. Die folgende Tabelle beschreibt den Prinzipal, der für jede Veröffentlichungsmethode und jedes Protokoll zurückgegeben wird.


****  

| So wird die Nachricht veröffentlicht | Protocol (Protokoll) | Anmeldeinformationstyp | Auftraggeber | 
| --- | --- | --- | --- | 
| MQTT-Client | MQTT | X.509-Gerätezertifikat | X.509-Zertifikat-Thumbprint | 
| AWS IoT Konsolen-MQTT-Client | MQTT | IAM-Benutzer oder Rolle | iam-role-id:session-name | 
| AWS CLI | HTTP | IAM-Benutzer oder Rolle | userid | 
| AWS IoT Geräte-SDK | MQTT | X.509-Gerätezertifikat | X.509-Zertifikat-Thumbprint | 
| AWS IoT Geräte-SDK | MQTT vorbei WebSocket | IAM-Benutzer oder Rolle | userid | 

Die folgenden Beispiele zeigen die verschiedenen Arten von Werten, die von `principal()` zurückgegeben werden:
+ X.509-Zertifikat-Thumbprint: `ba67293af50bf2506f5f93469686da660c7c844e7b3950bfb16813e0d31e9373`
+ IAM-Rollen-ID und Sitzungsname: `ABCD1EFG3HIJK2LMNOP5:my-session-name`
+ gibt eine Benutzer-ID zurück: `ABCD1EFG3HIJK2LMNOP5`

## rand()
<a name="iot-sql-function-rand"></a>

Gibt einen pseudozufälligen, einheitlich verteilten doppelten Wert zwischen 0,0 und 1,0 zurück. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`rand()` = 0.8231909191640703

## regexp\$1matches(String, String)
<a name="iot-func-regex-matches"></a>

Gibt „true“ zurück, wenn die Zeichenfolge (erstes Argument) eine Übereinstimmung für den regulären Ausdruck (zweites Argument) enthält. Wenn Sie `|` den regulären Ausdruck verwenden, verwenden Sie ihn mit `()`.

Beispiele:

`regexp_matches("aaaa", "a{2,}") ` = true.

`regexp_matches("aaaa", "b")` = false.

`regexp_matches("aaa", "(aaa|bbb)") ` = true.

`regexp_matches("bbb", "(aaa|bbb)") ` = true.

`regexp_matches("ccc", "(aaa|bbb)") ` = false.


**Erstes Argument:**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts | 
| Decimal | Die String-Darstellung des Decimal-Werts | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) | 
| String | Das Tool String. | 
| Array | Die String-Darstellung des Array-Werts (mit Standardkonvertierungsregeln) | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) | 
| Null | Undefined. | 
| Undefined | Undefined. | 

*Zweites Argument:*

Muss ein gültiger regulärer Ausdruck sein. Nicht-String-Typen werden mit den Standardkonvertierungsregeln umgewandelt in `String`. Je nach Typ ist die resultierende Zeichenfolge unter Umständen kein gültiger regulärer Ausdruck. Wenn das (konvertierte) Argument kein gültiger regulärer Ausdruck ist, ist das Ergebnis `Undefined`. 

## regexp\$1replace(String, String, String)
<a name="iot-func-regex-replace"></a>

Ersetzt alle Vorkommen des zweiten Arguments (regulärer Ausdruck) im ersten Argument durch das dritte Argument. Verweist auf Erfassungsgruppen mit "\$1". Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`regexp_replace("abcd", "bc", "x")` = "axd"

`regexp_replace("abcd", "b(.*)d", "$1")` = "ac"


**Erstes Argument:**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts | 
| Decimal | Die String-Darstellung des Decimal-Werts | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) | 
| String | Der Quellwert | 
| Array | Die String-Darstellung des Array-Werts (mit Standardkonvertierungsregeln) | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) | 
| Null | Undefined. | 
| Undefined | Undefined. | 

*Zweites Argument:*

Muss ein gültiger regulärer Ausdruck sein. Nicht-String-Typen werden mit den Standardkonvertierungsregeln umgewandelt in `String`. Je nach Typ ist die resultierende Zeichenfolge unter Umständen kein gültiger regulärer Ausdruck. Wenn das (konvertierte) Argument kein gültiger regulärer Ausdruck ist, ist das Ergebnis `Undefined`. 

*Drittes Argument:*

Muss eine gültige RegEx-Ersetzungszeichenfolge sein. (Kann auf Erfassungsgruppen verweisen.) Nicht-String-Typen werden mit den Standardkonvertierungsregeln umgewandelt in `String`. Wenn das (konvertierte) Argument keine gültige RegEx-Ersetzungszeichenfolge ist, ist das Ergebnis `Undefined`. 

## regexp\$1substr(String, String)
<a name="iot-func-regex-substr"></a>

Findet die erste Übereinstimmung des zweiten Parameters (regex) im ersten Parameter. Verweist auf Erfassungsgruppen mit "\$1". Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`regexp_substr("hihihello", "hi")` = "hi"

`regexp_substr("hihihello", "(hi)*")` = "hihi"


**Erstes Argument:**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts | 
| Decimal | Die String-Darstellung des Decimal-Werts | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) | 
| String | Das String-Argument | 
| Array | Die String-Darstellung des Array-Werts (mit Standardkonvertierungsregeln) | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) | 
| Null | Undefined. | 
| Undefined | Undefined. | 

*Zweites Argument:*

Muss ein gültiger regulärer Ausdruck sein. Nicht-String-Typen werden mit den Standardkonvertierungsregeln umgewandelt in `String`. Je nach Typ ist die resultierende Zeichenfolge unter Umständen kein gültiger regulärer Ausdruck. Wenn das (konvertierte) Argument kein gültiger regulärer Ausdruck ist, ist das Ergebnis `Undefined`. 

## remainder(Decimal, Decimal)
<a name="iot-func-remainder"></a>

Gibt den Rest zurück, der beim Teilen des ersten Arguments durch das zweite Argument entstanden ist. Äquivalent mit [mod(Decimal, Decimal)](#iot-func-mod). Sie können auch "%" als infix-Operator für die gleiche Modulfunktionalität verwenden. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `remainder(8, 3)` = 2


****  

| Left operator | Right operator | Output | 
| --- | --- | --- | 
| Int | Int | Int, das erste Argumentmodulo des zweiten Arguments | 
| Int/Decimal | Int/Decimal | Decimal, das erste Argumentmodulo des zweiten Operanden | 
| String/Int/Decimal | String/Int/Decimal | Wenn alle Zeichenfolgen in Dezimal-Werte konvertiert werden, ist das Ergebnis das erste Argumentmodulo des zweiten Arguments. Andernfalls Undefined. | 
| Anderer Wert | Anderer Wert | Undefined. | 

## replace(String, String, String)
<a name="iot-func-replace"></a>

Ersetzt alle Vorkommen des zweiten Arguments im ersten Argument durch das dritte Argument. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`replace("abcd", "bc", "x")` = `"axd"`.

`replace("abcdabcd", "b", "x")` = `"axcdaxcd"`.


**Alle Argumente**  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts | 
| Decimal | Die String-Darstellung des Decimal-Werts | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) | 
| String | Der Quellwert | 
| Array | Die String-Darstellung des Array-Werts (mit Standardkonvertierungsregeln) | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## rpad(String, Int)
<a name="iot-func-rpad"></a>

Gibt das Zeichenfolgenargument zurück, das auf der rechten Seite mit der im zweiten Argument festgelegten Anzahl an Leerzeichen aufgefüllt wurde. Das Argument `Int` muss zwischen 0 und 1000 liegen. Wenn der angegebene Wert außerhalb des gültigen Bereichs liegt, wird das Argument auf den nächsten gültigen Wert (0 oder 1000) festgelegt. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`rpad("hello", 2)` = "`hello  `".

`rpad(1, 3)` = "`1   `".


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| String | Int | Der String-Wert, der auf der rechten Seite mit der Anzahl an Leerzeichen aufgefüllt wurde, die dem angegebenen Int-Wert entspricht | 
| String | Decimal | Das Decimal-Argument wird auf den nächsten Int-Wert abgerundet und die Zeichenfolge wird auf der rechten Seite mit der Anzahl an Leerzeichen aufgefüllt, die dem angegebenen Int-Wert entspricht. | 
| String | String | Das zweite Argument wird in einen Decimal-Wert konvertiert, der auf den nächsten Int-Wert abgerundet wird. Der String-Wert wird auf der rechten Seite mit der Anzahl an Leerzeichen aufgefüllt, die dem Int-Wert entspricht. | 
| Anderer Wert | Int/Decimal/String | Der erste Wert wird mit der Standardkonvertierungen in String konvertiert und anschließend wird die rpad-Funktion auf String angewendet. Wenn er nicht konvertiert werden kann, ist das Ergebnis Undefined. | 
| Beliebiger Wert | Anderer Wert | Undefined. | 

## round(Decimal)
<a name="iot-func-round"></a>

Runden den angegebenen `Decimal`-Wert auf den nächsten `Int`-Wert. Wenn `Decimal` gleich weit von zwei `Int`-Werten entfernt ist (z. B. 0,5), wird `Decimal` aufgerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `Round(1.2)` = 1.

`Round(1.5)` = 2.

`Round(1.7)` = 2.

`Round(-1.1)` = -1.

`Round(-1.5)` = -2.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Das Argument | 
| Decimal | Decimal wird auf den nächsten Int-Wert abgerundet. | 
| String | Decimal wird auf den nächsten Int-Wert abgerundet. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Anderer Wert | Undefined. | 

## rtrim(String)
<a name="iot-func-rtrim"></a>

Entfernt alle nachstehenden Leerzeichen (Tabulatoren und Leerzeichen) aus dem angegebenen `String`-Wert. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`rtrim(" h i ")` = " h i"


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts | 
| Decimal | Die String-Darstellung des Decimal-Werts | 
| Boolean | Die String-Darstellung des booleschen Werts („true“ oder „false“) | 
| Array | Die String-Darstellung des Array-Werts (mit Standardkonvertierungsregeln) | 
| Object | Die String-Darstellung des Objekts (mit Standardkonvertierungsregeln) | 
| Null | Undefined. | 
| Undefined | Undefined | 

## sign(Decimal)
<a name="iot-func-sign"></a>

Gibt das Vorzeichen der angegebenen Zahl zurück. Wenn das Vorzeichen des Arguments positiv ist, wird 1 zurückgegeben. Wenn das Vorzeichen des Arguments negativ ist, wird -1 zurückgegeben. Wenn das Argument 0 ist, wird 0 zurückgegeben. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`sign(-7)` = -1.

`sign(0)` = 0.

`sign(13)` = 1.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Int, das Vorzeichen des Int-Werts | 
| Decimal | Int, das Vorzeichen des Decimal-Werts | 
| String | Int, das Vorzeichen des Decimal-Werts Die Zeichenfolge wird in einen Decimal-Wert konvertiert und das Vorzeichen des Decimal-Werts wird zurückgegeben. Wenn der String-Wert nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. Unterstützt von SQL Version 2015-10-08 und höher. | 
| Anderer Wert | Undefined. | 

## sin(Decimal)
<a name="iot-func-sin"></a>

Gibt den Sinus einer Zahl im Bogenmaß zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `sin(0)` = 0,0


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der Sinus des Arguments. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der Sinus des Arguments. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der Sinus des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## sinh(Decimal)
<a name="iot-func-sinh"></a>

Gibt den hyperbolischen Sinus einer Zahl zurück. `Decimal`-Werte werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Das Ergebnis ist ein `Decimal`-Wert mit doppelter Genauigkeit. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `sinh(2.3)` = 4,936961805545957


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der hyperbolische Sinus des Arguments. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der hyperbolische Sinus des Arguments. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der hyperbolische Sinus des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## SourceIp
<a name="iot-function-sourceip"></a>

Ruft die IP-Adresse eines Geräts oder des Routers ab, der eine Verbindung zu diesem Gerät herstellt. Wenn Ihr Gerät direkt mit dem Internet verbunden ist, gibt die Funktion die Quell-IP-Adresse des Geräts zurück. Wenn Ihr Gerät mit einem Router verbunden ist, der eine Verbindung zum Internet herstellt, gibt die Funktion die Quell-IP-Adresse des Routers zurück. Unterstützt von der SQL-Version 2016-03-23. `sourceip()` benötigt keine Parameter.

**Wichtig**  
Die öffentliche Quell-IP-Adresse eines Geräts ist häufig die IP-Adresse des letzten Network Address Translation (NAT)-Gateways, z. B. des Routers oder des Kabelmodems Ihres Internetdienstanbieters.

Beispiele: 

`sourceip()="192.158.1.38"`

`sourceip()="1.102.103.104"`

`sourceip()="2001:db8:ff00::12ab:34cd"`

SQL-Beispiel

`SELECT *, sourceip() as deviceIp FROM 'some/topic'`

Beispiele für die Verwendung der Funktion sourceip () in AWS IoT Core Regelaktionen:

**Beispiel 1**

Das folgende Beispiel zeigt, wie die Funktion () als [Ersatzvorlage in einer [DynamoDB-Maßnahme](https://docs.aws.amazon.com//iot/latest/developerguide/dynamodb-rule-action.html)](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) aufgerufen wird.

```
{
	"topicRulePayload": {
		"sql": "SELECT * AS message FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"dynamoDB": {
					"tableName": "my_ddb_table",
					"hashKeyField": "key",
					"hashKeyValue": "${sourceip()}",
					"rangeKeyField": "timestamp",
					"rangeKeyValue": "${timestamp()}",
					"roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB"
				}
			}
		]
	}
}
```

**Beispiel 2**

Das folgende Beispiel zeigt, wie die Funktion sourceip() als MQTT-Benutzereigenschaft mithilfe von [Ersetzungsvorlagen](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) hinzugefügt wird.

```
{
	"topicRulePayload": {
		"sql": "SELECT * FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"republish": {
					"topic": "${topic()}/republish",
					"roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish",
					"headers": {
						"payloadFormatIndicator": "UTF8_DATA",
						"contentType": "rule/contentType",
						"correlationData": "cnVsZSBjb3JyZWxhdGlvbiBkYXRh",
						"userProperties": [
							{
								"key": "ruleKey1",
								"value": "ruleValue1"
							},
							{
								"key": "sourceip",
								"value": "${sourceip()}"
							}
						]
					}
				}
			}
		]
	}
}
```

Sie können die Quell-IP-Adresse aus Nachrichten abrufen, die sowohl über den Message Broker- als auch über den [Basic-Ingest-Pfad](https://docs.aws.amazon.com//iot/latest/developerguide/iot-basic-ingest.html) an AWS IoT Core Regeln weitergeleitet werden. Sie können auch die Quell-IP für beide IPv4 IPv6 Nachrichten abrufen. Die Quell-IP wird wie folgt angezeigt:

IPv6: `yyyy:yyyy:yyyy::yyyy:yyyy`

IPv4: `xxx.xxx.xxx.xxx`

**Anmerkung**  
Die ursprüngliche Quell-IP wird bei der [Maßnahme Erneut veröffentlichen](republish-rule-action.md) nicht weitergegeben.

## substring(String, Int[, Int])
<a name="iot-func-substring"></a>

Erwartet einen `String`-Wert, gefolgt von einem oder zwei `Int`-Werten. Für einen `String`-Wert und ein einzelnes `Int`-Argument gibt diese Funktion die Teilzeichenfolge des angegebenen `String`-Werts vom angegebenen `Int`-Index (0-basiert, inklusive) am Ende des `String`-Werts zurück. Für einen `String`-Wert und ein zwei `Int`-Argumente gibt diese Funktion die Teilzeichenfolge des angegebenen `String`-Werts vom ersten `Int`-Indexargument (0-basiert, inklusive) an das zweite`Int`-Indexargument (0-basiert, exklusive) zurück. Indizes, die kleiner als Null sind, werden auf Null festgelegt. Indizes, die größer sind als die `String`-Länge, werden auf die `String`-Länge festgelegt. Wenn bei drei Argumenten der erste Index mindestens genauso groß ist wie der zweite Index, ist das Ergebnis der leere `String`-Wert.

 Wenn die angegebenen Argumente nicht (*String*,*Int*) oder (,,) sind *String**Int*, *Int* werden die Standardkonvertierungen auf die Argumente angewendet, um zu versuchen, sie in die richtigen Typen zu konvertieren. Wenn die Typen nicht konvertiert werden können, ist das Ergebnis der Funktion `Undefined`. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`substring("012345", 0)` = "012345".

`substring("012345", 2)` = "2345".

`substring("012345", 2.745)` = "2345".

`substring(123, 2)` = "3".

`substring("012345", -1)` = "012345".

`substring(true, 1.2)` = "true".

`substring(false, -2.411E247)` = "false".

`substring("012345", 1, 3)` = "12".

`substring("012345", -50, 50)` = "012345".

`substring("012345", 3, 1)` = "".

## sql\$1version()
<a name="iot-sql-function-sql-version"></a>

Gibt die in dieser Regel angegebene SQL Version zurück. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`sql_version()` = "2016-03-23"

## sqrt(Decimal)
<a name="iot-func-sqrt"></a>

Gibt die Quadratwurzel einer Zahl zurück. `Decimal`-Argumente werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `sqrt(9)` = 3.0.


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die Quadratwurzel des Arguments. | 
| Decimal | Die Quadratwurzel des Arguments. | 
| Boolean | Undefined. | 
| String | Die Quadratwurzel des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## startswith(String, String)
<a name="iot-func-startswith"></a>

Gibt einen Wert vom Typ `Boolean` zurück, der angibt, ob das erste Zeichenfolgenargument mit dem zweiten Zeichenfolgenargument beginnt. Wenn ein Argument `Null` oder `Undefined` ist, ist das Ergebnis `Undefined`. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`startswith("ranger","ran")` = true


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| String | String | Ob die erste Zeichenfolge mit der zweiten Zeichenfolge beginnt | 
| Anderer Wert | Anderer Wert | Beide Argumente werden mithilfe der Standardkonvertierungsregeln zu Zeichenfolgen konvertiert. Gibt „true“ zurück, wenn die erste Zeichenfolge mit der zweiten Zeichenfolge beginnt. Wenn ein Argument Null oder Undefined ist, ist das Ergebnis Undefined. | 

## tan(Decimal)
<a name="iot-func-tan"></a>

Gibt den Tangens einer Zahl im Bogenmaß zurück. `Decimal`-Werte werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `tan(3)` = -0,1425465430742778


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der Tangens des Arguments. | 
| Decimal | Decimal (mit doppelter Genauigkeit), der Tangens des Arguments. | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der Tangens des Arguments. Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## tanh(Decimal)
<a name="iot-func-tanh"></a>

Gibt den hyperbolischen Tangens einer Zahl im Bogenmaß zurück. `Decimal`-Werte werden vor dem Anwenden der Funktion auf doppelte Genauigkeit gerundet. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `tanh(2.3)` = 0,9800963962661914


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Decimal (mit doppelter Genauigkeit), der hyperbolische Tangens des Arguments | 
| Decimal | Decimal (mit doppelter Genauigkeit), der hyperbolische Tangens des Arguments | 
| Boolean | Undefined. | 
| String | Decimal (mit doppelter Genauigkeit), der hyperbolische Tangens des Arguments Wenn die Zeichenfolge nicht in einen Decimal-Wert konvertiert werden kann, ist das Ergebnis Undefined. | 
| Array | Undefined. | 
| Object | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## time\$1to\$1epoch (Zeichenfolge, Zeichenfolge)
<a name="iot-sql-function-time-to-epoch"></a>

Verwenden Sie die `time_to_epoch`-Funktion, um eine Zeitstempelzeichenfolge in eine Anzahl von Millisekunden in der Unix-Zeit umzuwandeln. Unterstützt von der SQL Version vom 23.03.2016 und höher. Informationen zur Konvertierung von Millisekunden in eine formatierte Zeitstempelzeichenfolge finden Sie unter [parse\$1time(String, Long, [String])](#iot-sql-function-parse-time).

Die `time_to_epoch`-Funktion verwendet folgende Argumente:

Zeitstempel  
(Zeichenfolge) Die Zeitstempelzeichenfolge, die seit der Unix-Epoche in Millisekunden konvertiert werden soll. Wenn die Zeitstempelzeichenfolge keine Zeitzone angibt, verwendet die Funktion die UTC-Zeitzone.

pattern  
(Zeichenfolge) Ein date/time Muster, das [JDK11 Zeitformaten](http://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html) folgt.

Beispiele:

`time_to_epoch("2020-04-03 09:45:18 UTC+01:00", "yyyy-MM-dd HH:mm:ss VV")` = 1585903518000

`time_to_epoch("18 December 2015", "dd MMMM yyyy")` = 1450396800000

`time_to_epoch("2007-12-03 10:15:30.592 America/Los_Angeles", "yyyy-MM-dd HH:mm:ss.SSS z")` = 1196705730592

## timestamp()
<a name="iot-function-timestamp"></a>

Gibt den aktuellen Zeitstempel in Millisekunden ab 00:00:00 Uhr Coordinated Universal Time (UTC), Donnerstag, 1. Januar 1970, zurück, wie er von der Regel-Engine beobachtet wurde. AWS IoT Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel: `timestamp()` = `1481825251155`

## topic(Decimal)
<a name="iot-function-topic"></a>

Gibt das Topic zurück, an das die Nachricht gesendet wurde, welche die Regel ausgelöst hat. Wenn kein Parameter angegeben ist, wird das gesamte Topic zurückgegeben. Der Parameter `Decimal` wird verwendet, um ein bestimmtes Themensegment anzugeben, wobei 1 das erste Segment bezeichnet. Für das Thema `foo/bar/baz` gibt topic(1) `foo` zurück, topic(2) gibt `bar` zurück usw. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`topic()` = "things/myThings/thingOne"

`topic(1)` = "things"

Wenn [Basic Ingest](iot-basic-ingest.md) verwendet wird, ist das anfängliche Präfix des Themas (`$aws/rules/rule-name`) nicht für die Thema()-Funktion verfügbar. Angenommen, das Thema ist:

`$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights`

`topic()` = "Buildings/Building5/Floor2/Room201/Lights"

`topic(3)` = "Floor2" („Etage2”)

## traceid()
<a name="iot-sql-function-traceid"></a>

Gibt die Ablaufverfolgungs-ID (UUID) der MQTT-Nachricht zurück oder `Undefined`, wenn die Nachricht nicht über MQTT gesendet wurde. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`traceid() ` = "12345678-1234-1234-1234-123456789012"

## transformieren (Zeichenfolge, Objekt, Array)
<a name="iot-func-transform"></a>

Gibt ein Array von Objekten zurück, das das Ergebnis der angegebenen Transformation des `Object` Parameters für den `Array`-Parameter enthält.

Unterstützt von der SQL Version vom 23.03.2016 und höher.

Zeichenfolge  
Der zu verwendende Transformationsmodus. In der folgenden Tabelle finden Sie Informationen zu den unterstützten Transformationsmodi und dazu, wie sie die `Array`-Parameter `Result` aus den `Object` und erstellen.

Object  
Ein Objekt, das die Attribute enthält, die auf jedes Element von `Array` angewendet werden sollen.

Array  
Eine Reihe von Objekten, auf die die Attribute von `Object` angewendet werden.  
Jedes Objekt in diesem Array entspricht einem Objekt in der Antwort der Funktion. Jedes Objekt in der Antwort der Funktion enthält die Attribute, die im ursprünglichen Objekt vorhanden sind, und die Attribute, die von `Object` bereitgestellt werden, wie durch den in `String` angegebenen Transformationsmodus bestimmt.


| `String` Parameter | `Object` Parameter | `Array` Parameter | Ergebnis | 
| --- | --- | --- | --- | 
| `enrichArray` | Objekt | Array von -Objekten. | Ein Array von Objekten, in dem jedes Objekt die Attribute eines Elements aus dem `Array`-Parameter und die Attribute des `Object`-Parameters enthält. | 
| Jeder andere Wert | Beliebiger Wert | Beliebiger Wert | Undefined | 

**Anmerkung**  
Das von dieser Funktion zurückgegebene Array ist auf 128 KiB begrenzt.

### Beispiel 1 für die Transformationsfunktion
<a name="iot-func-transform-example1"></a>

Dieses Beispiel zeigt, wie die **transform()**-Funktion aus einem Datenobjekt und einem Array ein einzelnes Array von Objekten erzeugt.

In diesem Beispiel wird folgende Nachricht im MQTT-Thema `A/B` veröffentlicht.

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

Diese SQL-Anweisung für eine Themenregelaktion verwendet die **transform()**-Funktion mit dem Wert `String` von `enrichArray`. In diesem Beispiel `Object` handelt es sich um die `attributes`-Eigenschaft aus der Nachrichtennutzlast und um `Array` das `values` Array, das drei Objekte enthält.

```
select value transform("enrichArray", attributes, values) from 'A/B'
```

Nach dem Empfang der Nachrichtennutzdaten wird die SQL-Anweisung zu der folgenden Antwort ausgewertet.

```
[
  {
    "a": 3,
    "data1": 1,
    "data2": 2
  },
  {
    "b": 4,
    "data1": 1,
    "data2": 2
  },
  {
    "c": 5,
    "data1": 1,
    "data2": 2
  }
]
```

### Beispiel 2 für die Transformationsfunktion
<a name="iot-func-transform-example2"></a>

Dieses Beispiel zeigt, wie die **transform()**-Funktion Literalwerte verwenden kann, um einzelne Attribute aus der Nachrichtennutzlast einzubeziehen und umzubenennen.

In diesem Beispiel wird folgende Nachricht im MQTT-Thema `A/B` veröffentlicht. Dies ist dieselbe Nachricht, die in [Beispiel 1 für die Transformationsfunktion](#iot-func-transform-example1) verwendet wurde.

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

Diese SQL-Anweisung für eine Themenregelaktion verwendet die **transform()**-Funktion mit dem Wert `String` von `enrichArray`. Die `Object` in der **transform()**-Funktion hat ein einzelnes Attribut, das `key` mit dem Wert von `attributes.data1` in der Nachrichtennutzlast benannt ist, und `Array` ist das `values` Array, das dieselben drei Objekte enthält, die im vorherigen Beispiel verwendet wurden.

```
select value transform("enrichArray", {"key": attributes.data1}, values) from 'A/B'
```

Nach dem Empfang der Nachrichtennutzdaten wird diese SQL-Anweisung zu der folgenden Antwort ausgewertet. Beachten Sie, wie die `data1`-Eigenschaft `key` in der Antwort benannt ist.

```
[
  {
    "a": 3,
    "key": 1
  },
  {
    "b": 4,
    "key": 1
  },
  {
    "c": 5,
    "key": 1
  }
]
```

### Beispiel 3 für die Transformationsfunktion
<a name="iot-func-transform-example3"></a>

Dieses Beispiel zeigt, wie die **transform()**-Funktion in verschachtelten SELECT-Klauseln verwendet werden kann, um mehrere Attribute auszuwählen und neue Objekte für die nachfolgende Verarbeitung zu erstellen.

In diesem Beispiel wird folgende Nachricht im MQTT-Thema `A/B` veröffentlicht.

```
{
  "data1": "example",
  "data2": {
    "a": "first attribute",
    "b": "second attribute",
    "c": [
      {
        "x": {
          "someInt": 5,
          "someString": "hello"
        },
        "y": true
      },
      {
        "x": {
          "someInt": 10,
          "someString": "world"
        },
        "y": false
      }
    ]
  }
}
```

Das `Object` für diese Transformationsfunktion ist das Objekt, das von der SELECT-Anweisung zurückgegeben wurde, die die Elemente `a` und `b` des `data2`-Objekts der Nachricht enthält. Der `Array`-Parameter besteht aus den beiden Objekten aus dem `data2.c` Array in der ursprünglichen Nachricht.

```
select value transform('enrichArray', (select a, b from data2), (select value c from data2)) from 'A/B'
```

Bei der vorherigen Nachricht ergibt die SQL-Anweisung die folgende Antwort.

```
[
  {
    "x": {
      "someInt": 5,
      "someString": "hello"
    },
    "y": true,
    "a": "first attribute",
    "b": "second attribute"
  },
  {
    "x": {
      "someInt": 10,
      "someString": "world"
    },
    "y": false,
    "a": "first attribute",
    "b": "second attribute"
  }
]
```

 Das in dieser Antwort zurückgegebene Array könnte mit Themenregelaktionen verwendet werden, die `batchMode` unterstützen. 

## trim(String)
<a name="iot-func-trim"></a>

Entfernt alle führenden und nachfolgenden Leerzeichen aus dem angegebenen `String`-Wert. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiel:

`Trim(" hi ") ` = "hi"


****  

| Argumenttyp | Ergebnis | 
| --- | --- | 
| Int | Die String-Darstellung des Int-Werts nach dem Entfernen der führenden und nachfolgenden Leerzeichen. | 
| Decimal | Die String-Darstellung des Decimal-Werts nach dem Entfernen der führenden und nachfolgenden Leerzeichen. | 
| Boolean | Die String-Darstellung des Boolean-Werts ("true" oder "false") nach dem Entfernen der führenden und nachfolgenden Leerzeichen. | 
| String | Der String-Wert nach dem Entfernen der führenden und nachfolgenden Leerzeichen. | 
| Array | Die String-Darstellung des Array-Werts mit Standardkonvertierungsregeln | 
| Object | Die String-Darstellung des Objekts mit Standardkonvertierungsregeln | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## trunc(Decimal, Int)
<a name="iot-func-trunc"></a>

Schneidet das erste Argument auf die Anzahl von `Decimal`-Stellen ab, die vom zweiten Argument festgelegt wurden. Wenn das zweite Argument kleiner ist als Null, wird es auf Null festgelegt. Wenn das zweite Argument größer ist als 34, wird es auf 34 festgelegt. Nachfolgende Nullen werden aus dem Ergebnis entfernt. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele: 

`trunc(2.3, 0)` = 2.

`trunc(2.3123, 2)` = 2,31.

`trunc(2.888, 2)` = 2,88.

`trunc(2.00, 5)` = 2.


****  

| Argumenttyp 1 | Argumenttyp 2 | Ergebnis | 
| --- | --- | --- | 
| Int | Int | Der Quellwert | 
| Int/Decimal | Int/Decimal | Das erste Argument wird auf die Länge abgeschnitten, die vom zweiten Argument beschrieben wird. Wenn das zweite Argument kein Int-Wert ist, wird es auf den nächsten Int-Wert abgerundet. | 
| Int/Decimal/String | Int/Decimal | Das erste Argument wird auf die Länge abgeschnitten, die vom zweiten Argument beschrieben wird. Wenn das zweite Argument kein Int-Wert ist, wird es auf den nächsten Int-Wert abgerundet. Ein String-Wert wird zu einem Decimal-Wert konvertiert. Wenn die Konvertierung der Zeichenfolge fehlschlägt, ist das Ergebnis Undefined. | 
| Anderer Wert |  | Undefined. | 

## upper(String)
<a name="iot-sql-function-upper"></a>

Gibt die großgeschriebene Version des angegebenen `String`-Werts zurück. Andere Argumente als `String` werden mit der Standardkonvertierungsregeln in ,`String` konvertiert. Unterstützt von SQL Version 2015-10-08 und höher.

Beispiele:

`upper("hello")` = "HELLO"

`upper(["hello"])` = "[\$1"HELLO\$1"]"

# Literale
<a name="iot-sql-literals"></a>

Sie können Literalobjekte in den SELECT- und WHERE-Klauseln Ihrer Regel-SQL direkt angeben, was zum Weitergeben von Informationen praktisch ist. 

**Anmerkung**  
Literale sind nur verfügbar, wenn Sie die SQL-Version vom 23.03.2016 oder höher verwenden.

Die JSON-Objektsyntax wird verwendet (Schlüssel-Wert-Paare, durch Trennzeichen getrennt, wobei Schlüssel Zeichenfolgen und Wert JSON-Werte sind, eingeschlossen in geschweifte Klammern: \$1\$1). Beispiel:

Eingehende Nutzlast veröffentlicht für Topic `topic/subtopic`: `{"lat_long": [47.606,-122.332]}`

SQL-Anweisung: `SELECT {'latitude': get(lat_long, 0),'longitude':get(lat_long, 1)} as lat_long FROM 'topic/subtopic'`

Die resultierende ausgehende Nutzlast ist: `{"lat_long":{"latitude":47.606,"longitude":-122.332}}`. 

Sie können auch Arrays in den SELECT- und WHERE-Klauseln Ihrer Regel-SQL direkt angeben, was Ihnen das Gruppieren von Informationen ermöglicht. Die JSON-Syntax wird verwendet (setzen Sie durch Trennzeichen getrennte Elemente zwischen eckige Klammern, [], um ein Arrayliteral zu erstellen). Beispiel:

Eingehende Nutzlast veröffentlicht für Topic `topic/subtopic`: `{"lat": 47.696, "long": -122.332}`

SQL-Anweisung: `SELECT [lat,long] as lat_long FROM 'topic/subtopic'`

Verwenden Sie eine Austausch-Vorlage, um die JSON-Daten zu erhöhen, die zurückgegeben werden, wenn eine Regel ausgelöst wird und `{"lat_long": [47.606,-122.332]}` eine Maßnahme durchführt.

# Case-Anweisungen
<a name="iot-sql-case"></a>

Case-Anweisungen können zum Branchen verwendet werden, wie etwa eine switch-Anweisung.

Syntax:

```
CASE v WHEN t[1] THEN r[1] 
  WHEN t[2] THEN r[2] ... 
  WHEN t[n] THEN r[n] 
  ELSE r[e] END
```

Der Ausdruck *`v`* wird ausgewertet und die Übereinstimmung mit dem Wert jeder *`t[i]`*-Klausel abgeglichen. `WHEN` Bei einer Übereinstimmung wird der entsprechende *`r[i]`*-Ausdruck zum Ergebnis der `CASE`-Anweisung. Die `WHEN`-Klauseln werden der Reihe nach ausgewertet, sodass, wenn es mehr als eine übereinstimmende Klausel gibt, das Ergebnis der ersten übereinstimmenden Klausel zum Ergebnis der `CASE`-Anweisung wird. Wenn es keine Treffer gibt, ist *`r[e]`* der`ELSE` Klausel das Ergebnis. Wenn es keine Übereinstimmung und keine `ELSE`-Klausel gibt, ist das Ergebnis `Undefined`.

Für `CASE`-Anweisungen ist mindestens eine `WHEN`-Klausel erforderlich. Eine `ELSE`-Klausel ist optional.

Beispiel:

Eingehende Nutzlast veröffentlicht für Topic `topic/subtopic`:

```
{
    "color":"yellow"
}
```

SQL-Anweisung: 

```
SELECT CASE color
        WHEN 'green' THEN 'go'
        WHEN 'yellow' THEN 'caution'
        WHEN 'red' THEN 'stop'
        ELSE 'you are not at a stop light' END as instructions
    FROM 'topic/subtopic'
```

Die resultierende Ausgabenutzlast ist:

```
{
    "instructions":"caution"
}
```

**Anmerkung**  
Wenn *`v`* `Undefined` ist, ist das Ergebnis der Case-Anweisung `Undefined`.

# JSON-Erweiterungen
<a name="iot-sql-json"></a>

Sie können die folgenden Erweiterungen für die ANSI SQL-Syntax verwenden, um die Arbeit mit verschachtelten JSON-Objekten zu vereinfachen.

"." Operator

Dieser Operator greift auf Elemente in eingebetteten JSON-Objekten zu und funktioniert genauso wie ANSI SQL und. JavaScript Beispiel: 

```
SELECT foo.bar AS bar.baz FROM 'topic/subtopic'
```

wählt den Wert der `bar`-Eigenschaft im `foo`-Objekt aus der folgenden Nachrichten-Payload aus, die an das `topic/subtopic`-Thema gesendet wurde.

```
{
  "foo": {
    "bar": "RED",
    "bar1": "GREEN",
    "bar2": "BLUE"
  }
}
```

Wenn ein JSON-Eigenschaftsname einen Bindestrich oder numerische Zeichen enthält, funktioniert die Notation „Punkt“ nicht. Stattdessen müssen Sie die [Funktion get](iot-sql-functions.md#iot-sql-function-get) verwenden, um den Wert der Eigenschaft zu extrahieren. 

 In diesem Beispiel wird die folgende Nachricht an das `iot/rules`-Thema gesendet. 

```
{
  "mydata": {
    "item2": {
      "0": {
        "my-key": "myValue"
      }
    }
  }
}
```

Normalerweise wird der Wert von `my-key` wie in dieser Abfrage identifiziert.

```
SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"
```

Da der Eigenschaftsname `my-key` jedoch einen Bindestrich und ein numerisches Zeichen `item2` enthält, muss die [Funktion get](iot-sql-functions.md#iot-sql-function-get) verwendet werden, wie die folgende Abfrage zeigt.

```
SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"
```

`*`-Operator

Dieser funktioniert genauso wie der Platzhalter `*` in ANSI SQL. Er wird nur in der SELECT-Klausel verwendet und erstellt ein neues JSON-Objekt, das die Nachrichtdaten enthält. Wenn die Nachrichtnutzlast nicht im JSON-Format vorliegt, gibt `*` die gesamte Nachrichtnutzlast als Rohbytes zurück. Beispiel: 

```
SELECT * FROM 'topic/subtopic'
```

**Anwenden einer Funktion auf einen Attributwert**  
Im Folgenden finden Sie ein Beispiel für eine JSON-Nutzlast, die von einem Gerät veröffentlicht werden kann:

```
{
    "deviceid" : "iot123",
    "temp" : 54.98,
    "humidity" : 32.43,
    "coords" : {
        "latitude" : 47.615694,
        "longitude" : -122.3359976
    }
}
```

Das folgende Beispiel wendet eine Funktion auf einen Attributwert in einer JSON-Nutzlast an:

```
SELECT temp, md5(deviceid) AS hashed_id FROM topic/#
```

Das Ergebnis dieser Abfrage ist das folgende JSON-Objekt:

```
{
   "temp": 54.98,
   "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1"
}
```

# Ersetzungsvorlagen
<a name="iot-substitution-templates"></a>

Sie können eine Ersatzvorlage verwenden, um die JSON-Daten zu erweitern, die zurückgegeben werden, wenn eine Regel ausgelöst wird und AWS IoT eine Aktion ausführt. *Die Syntax für eine Substitutionsvorlage lautet `${` *Ausdruck`}`, wobei Ausdruck ein beliebiger Ausdruck* sein kann, der von INSELECT-Klauseln, AWS IoT WHERE-Klauseln und unterstützt wird.* [AWS IoT Regelaktionen](iot-rule-actions.md) Dieser Ausdruck kann in ein Aktionsfeld für eine Regel eingefügt werden, sodass Sie eine Aktion dynamisch konfigurieren können. Tatsächlich ersetzt diese Funktion eine Information in einer Aktion. Dazu gehören Funktionen, Operatoren und Informationen aus der ursprünglichen Nachrichtennutzlast.

**Wichtig**  
Da ein Ausdruck in einer Ersatzvorlage separat von dem „SELECT...“-Ausdruck evaluiert wird, können Sie nicht auf ein mit der AS-Klausel erstelltes Alias verweisen. Sie können zu den unterstützten [Funktionen](iot-sql-functions.md) und [Operatoren](iot-sql-operators.md) nur in der ursprünglichen Nutzlast vorhandene Informationen referenzieren.

Weitere Informationen zu unterstützten Ausdrücken unter [AWS IoT SQL-Referenz](iot-sql-reference.md).

Die folgenden Regelaktionen unterstützen Ersetzungsvorlagen. Jede Aktion unterstützt verschiedene Felder, die ersetzt werden können.
+ [Apache Kafka](apache-kafka-rule-action.md)
+ [CloudWatch Alarme](cloudwatch-alarms-rule-action.md)
+ [CloudWatch Logs](cloudwatch-logs-rule-action.md)
+ [CloudWatch Metriken](cloudwatch-metrics-rule-action.md)
+ [DynamoDB](dynamodb-rule-action.md)
+ [Dynamo DBv2](dynamodb-v2-rule-action.md)
+ [Elasticsearch](elasticsearch-rule-action.md)
+ [HTTP](https-rule-action.md)
+ [AWS IoT Events](iotevents-rule-action.md)
+ [AWS IoT SiteWise](iotsitewise-rule-action.md)
+ [Kinesis Data Streams](kinesis-rule-action.md)
+ [Firehose](kinesis-firehose-rule-action.md)
+ [Lambda](lambda-rule-action.md)
+ [Speicherort](location-rule-action.md)
+ [OpenSearch](opensearch-rule-action.md)
+ [Erneut veröffentlichen](republish-rule-action.md)
+ [S3](s3-rule-action.md)
+ [SNS](sns-rule-action.md)
+ [SQS](sqs-rule-action.md)
+ [Step Functions](stepfunctions-rule-action.md)
+ [Timestream](timestream-rule-action.md)

Ersetzungsvorlagen werden in den Aktionsparametern innerhalb einer Regel angezeigt: 

```
{
    "sql": "SELECT *, timestamp() AS timestamp FROM 'my/iot/topic'",
    "ruleDisabled": false,
    "actions": [{
        "republish": {
            "topic": "${topic()}/republish",
            "roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
        }
    }]
}
```

Wenn diese Regel vom folgenden in `my/iot/topic` veröffentlichten JSON ausgelöst wird:

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    }
}
```

Anschließend veröffentlicht diese Regel das folgende JSON-Format`my/iot/topic/republish`, das AWS IoT durch Folgendes ersetzt wird: `${topic()}/republish`

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    },
    "timestamp": 1579637878451
}
```

# Verschachtelte Objektabfragen
<a name="iot-sql-nested-queries"></a>

Sie können verschachtelte SELECT-Klauseln verwenden, um Attribute in Arrays und inneren JSON-Objekten abzufragen. Unterstützt von der SQL Version vom 23.03.2016 und höher.

Betrachten Sie die folgende MQTT-Meldung:

```
{ 
    "e": [
        { "n": "temperature", "u": "Cel", "t": 1234, "v": 22.5 },
        { "n": "light", "u": "lm", "t": 1235, "v": 135 },
        { "n": "acidity", "u": "pH", "t": 1235, "v": 7 }
    ]
}
```

**Example**  
Sie können Werte in ein neues Array mit der folgenden Regel konvertieren.  

```
SELECT (SELECT VALUE n FROM e) as sensors FROM 'my/topic'
```

Die Regel generiert folgenden Output:

```
{
    "sensors": [
        "temperature",
        "light",
        "acidity"
    ]
}
```

**Example**  
Mit derselben MQTT-Meldung können Sie auch einen bestimmten Wert innerhalb eines verschachtelten Objekts mit der folgenden Regel abfragen.  

```
SELECT (SELECT v FROM e WHERE n = 'temperature') as temperature FROM 'my/topic'
```

Die Regel generiert folgenden Output:

```
{
    "temperature": [
        {
            "v": 22.5
        }
    ]
}
```

**Example**  
Sie können die Ausgabe auch mit einer komplizierteren Regel glätten.  

```
SELECT get((SELECT v FROM e WHERE n = 'temperature'), 0).v as temperature FROM 'topic'
```

Die Regel generiert folgenden Output:

```
{
    "temperature": 22.5
}
```

# Arbeiten mit binären Nutzlasten
<a name="binary-payloads"></a>

Wenn Nachrichtennutzlasten als unformatierte binäre Daten behandelt werden sollen (und nicht als JSON-Objekt), können Sie den Operator \$1 verwenden, um darauf in einer SELECT-Klausel zu verweisen. 

**Topics**
+ [Beispiele für binäre Nutzlasten](#binary-payloads-examples)
+ [Payloads von protobuf-Nachrichten entschlüsseln](#binary-payloads-protobuf)

## Beispiele für binäre Nutzlasten
<a name="binary-payloads-examples"></a>

Wenn Sie \$1 verwenden, um die Nachrichtennutzlast als unformatierte Binärdaten zu bezeichnen, können Sie der Regel Daten hinzufügen. Wenn Sie eine leere oder eine JSON-Nutzlast haben, können der resultierenden Nutzlast mithilfe der Regel Daten hinzugefügt werden. Es folgen Beispiele unterstützter `SELECT`-Klauseln.
+ Sie können die folgenden `SELECT`-Klauseln nur mit einem Sternchen (\$1) für binäre Payloads verwenden.
  + 

    ```
    SELECT * FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
    ```
+ Sie können auch Daten hinzufügen und die folgenden `SELECT`-Klauseln verwenden.
  + 

    ```
    SELECT *, principal() as principal, timestamp() as time FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
    ```
+ Sie können diese `SELECT`-Klauseln auch mit binären Payloads verwenden.
  + Das Folgende bezieht sich auf `device_type` in der WHERE-Klausel.

    ```
    SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'
    ```
  + Folgendes wird ebenfalls unterstützt.

    ```
    {
    	"sql": "SELECT * FROM 'topic/subtopic'",
    	"actions": [
    		{
    			"republish": {
    				"topic": "device/${device_id}"
    			}
    		}
    	]
    }
    ```

Die folgenden Regelaktionen unterstützen keine binären Payloads, sodass Sie sie dekodieren müssen.
+ Für Regelaktionen, die die Eingabe binärer Nutzlast nicht unterstützen, wie z. B. die [-Maßnahme](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html#lambda-rule), müssen Sie binäre Nutzlasten dekodieren. Die Lambda-Regelaktion kann binäre Daten empfangen, wenn sie base64-kodiert und in einer JSON-Nutzlast enthalten sind. Dazu müssen Sie die Regel folgendermaßen ändern:

  ```
  SELECT encode(*, 'base64') AS data FROM 'my_topic'
  ```
+ Die SQL-Anweisung unterstützt keine Zeichenfolge als Eingabe. Um eine String-Eingabe in JSON zu konvertieren, können Sie den folgenden Befehl ausführen.

  ```
  SELECT decode(encode(*, 'base64'), 'base64') AS payload FROM 'topic'
  ```

## Payloads von protobuf-Nachrichten entschlüsseln
<a name="binary-payloads-protobuf"></a>

[Protocol Buffers (protobuf)](https://developers.google.com/protocol-buffers) ist ein Open-Source-Datenformat, das zur Serialisierung strukturierter Daten in kompakter, binärer Form verwendet wird. Es wird verwendet, um Daten über Netzwerke zu übertragen oder in Dateien zu speichern. Mit Protobuf können Sie Daten in kleinen Paketgrößen und mit einer schnelleren Geschwindigkeit als mit anderen Nachrichtenformaten senden. AWS IoT Core Regeln unterstützen Protobuf, indem sie die SQL-Funktion [decode (value, decodingScheme) bereitstellen,](iot-sql-functions.md#iot-sql-decode-base64) mit der Sie Protobuf-kodierte Nachrichtennutzdaten in das JSON-Format dekodieren und an nachgeschaltete Dienste weiterleiten können. In diesem Abschnitt wird der Prozess zur Konfiguration der Protobuf-Decodierung in Regeln beschrieben. step-by-step AWS IoT Core 

**Topics**
+ [Voraussetzungen](#binary-payloads-protobuf-prerequisites)
+ [Deskriptordateien erstellen](#binary-payloads-protobuf-descriptor-steps)
+ [So laden Sie die Dateien zu einem S3-Bucket hoch](#binary-payloads-protobuf-s3-steps)
+ [Konfigurieren Sie die protobuf-Dekodierung in Regeln.](#binary-payloads-protobuf-steps)
+ [Einschränkungen](#binary-payloads-protobuf-limitations)
+ [Best Practices](#binary-payloads-protobuf-bestpractices)

### Voraussetzungen
<a name="binary-payloads-protobuf-prerequisites"></a>
+ Ein grundlegendes Verständnis von [Protocol Buffers (protobuf](https://developers.google.com/protocol-buffers))
+ Die [`.proto`-Dateien](https://developers.google.com/protocol-buffers/docs/proto3), die Nachrichtentypen und zugehörige Abhängigkeiten definieren
+ Installieren Sie den [protobuf Compiler (protoc](https://github.com/protocolbuffers/protobuf/releases)) auf Ihrem System.

### Deskriptordateien erstellen
<a name="binary-payloads-protobuf-descriptor-steps"></a>

Wenn Sie bereits über die Deskriptordateien verfügen, können Sie diesen Schritt überspringen. Eine Deskriptordatei (`.desc`) ist eine kompilierte Version einer `.proto`-Datei, bei der es sich um eine Textdatei handelt, die die Datenstrukturen und Nachrichtentypen definiert, die bei einer protobuf-Serialisierung verwendet werden sollen. Um eine Deskriptordatei zu generieren, müssen Sie eine `.proto`-Datei definieren und sie mit dem [protoc-Compiler](https://github.com/protocolbuffers/protobuf/releases) kompilieren. 

1. Erstellen Sie `.proto`-Dateien, die die Nachrichtentypen definieren. Ein Beispiel `.proto` könnte folgendermaßen aussehen:

   ```
   syntax = "proto3";
   
   message Person {
     optional string name = 1;
     optional int32 id = 2;
     optional string email = 3;
   }
   ```

   In dieser `.proto`-Beispieldatei verwenden Sie die Proto3-Syntax und definieren den Nachrichtentyp `Person`. Die `Person`-Nachrichtendefinition spezifiziert drei Felder (Name, ID und E-Mail). Weitere Informationen zu `.proto`-Dateiformaten im [Language Guide (proto3)](https://developers.google.com/protocol-buffers/docs/proto3).

1. Verwenden Sie den [Protoc-Compiler](https://github.com/protocolbuffers/protobuf/releases), um die `.proto` Dateien zu kompilieren und eine Deskriptordatei zu generieren. Ein Beispielbefehl zum Erstellen einer Deskriptordatei (`.desc`) kann der folgende sein:

   ```
   protoc --descriptor_set_out=<FILENAME>.desc \
       --proto_path=<PATH_TO_IMPORTS_DIRECTORY> \
       --include_imports \
       <PROTO_FILENAME>.proto
   ```

   Dieser Beispielbefehl generiert eine Deskriptordatei`<FILENAME>.desc`, mit der AWS IoT Core Rules Protobuf-Payloads dekodieren kann, die der in definierten Datenstruktur entsprechen. `<PROTO_FILENAME>.proto`
   + `--descriptor_set_out`

     Gibt den Namen der Deskriptordatei (`<FILENAME>.desc`) an, die generiert werden soll.
   + `--proto_path`

     Gibt die Speicherorte aller importierten `.proto`-Dateien an, auf die in der kompilierten Datei verwiesen wird. Sie können das Kennzeichen mehrfach angeben, wenn Sie mehrere importierte `.proto`-Dateien mit unterschiedlichen Speicherorten haben.
   + `--include_imports`

     Gibt an, dass alle importierten `.proto`-Dateien ebenfalls kompiliert und in die `<FILENAME>.desc`-Deskriptordatei aufgenommen werden sollen.
   + `<PROTO_FILENAME>.proto`

     Gibt den Namen der `.proto`-Datei an, die Sie kompilieren möchten.

   Weitere Informationen über die Protoc-Referenz finden Sie unter [API-Referenz](https://developers.google.com/protocol-buffers/docs/reference/overview).

### So laden Sie die Dateien zu einem S3-Bucket hoch
<a name="binary-payloads-protobuf-s3-steps"></a>

Nachdem Sie Ihre Deskriptordateien erstellt haben`<FILENAME>.desc`, laden Sie die Deskriptordateien `<FILENAME>.desc` mithilfe der AWS API, des AWS SDK oder der in einen Amazon S3 S3-Bucket hoch. AWS-Managementkonsole

**Wichtige Überlegungen**
+ Stellen Sie sicher, dass Sie die Deskriptordateien in einen Amazon S3 S3-Bucket AWS-Konto in derselben Umgebung hochladen AWS-Region , in der Sie Ihre Regeln konfigurieren möchten.
+ Stellen Sie sicher, dass Sie AWS IoT Core Zugriff zum Lesen der Daten `FileDescriptorSet` aus S3 gewähren. Wenn im S3-Bucket die serverseitige Verschlüsselung (SSE) deaktiviert ist oder wenn Ihr S3-Bucket mit von Amazon S3-verwalteten Schlüsseln (SSE-S3) verschlüsselt ist, sind keine zusätzlichen Richtlinienkonfigurationen erforderlich. Dies kann mit der Beispiel-Bucket-Richtlinie erreicht werden:  
****  

  ```
  {
  	"Version":"2012-10-17",		 	 	 
  	"Statement": [
  		{
  			"Sid": "Statement1",
  			"Effect": "Allow",
  			"Principal": {
  				"Service": "iot.amazonaws.com"
  			},
  			"Action": "s3:Get*",
                        "Resource": "arn:aws:s3:::<BUCKET NAME>/<FILENAME>.desc"
  		}
  	]
  }
  ```
+ Wenn Ihr S3-Bucket mit einem AWS Key Management Service Schlüssel (SSE-KMS) verschlüsselt ist, stellen Sie sicher, dass Sie beim Zugriff auf Ihren S3-Bucket die AWS IoT Core Erlaubnis zur Verwendung des Schlüssels erteilen. Dazu müssen Sie diese Erklärung zu Ihrer Schlüsselrichtlinie hinzufügen:

  ```
  {
  	"Sid": "Statement1",
  	"Effect": "Allow",
  	"Principal": {
  		"Service": "iot.amazonaws.com"
  	},
  	"Action": [
  		"kms:Decrypt",
  		"kms:GenerateDataKey*",
  		"kms:DescribeKey"
  	],
          "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  	
  }
  ```

### Konfigurieren Sie die protobuf-Dekodierung in Regeln.
<a name="binary-payloads-protobuf-steps"></a>

Nachdem Sie die Deskriptordateien in Ihren Amazon S3 S3-Bucket hochgeladen haben, konfigurieren Sie eine [Regel](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-rule.html), die Ihr protobuf-Nachrichtennutzdatenformat mit der SQL-Funktion [decode (value, decodingScheme) dekodieren](iot-sql-functions.md#iot-sql-decode-base64) kann. *Eine ausführliche Funktionssignatur und ein Beispiel finden Sie in der SQL-Funktion [decode (value,](iot-sql-functions.md#iot-sql-decode-base64) decodingScheme) der SQL-Referenz.AWS IoT *

Im Folgenden finden Sie ein Beispiel für einen SQL-Ausdruck, der die Funktion [decode (value,](iot-sql-functions.md#iot-sql-decode-base64) decodingScheme) verwendet:

```
SELECT VALUE decode(*, 'proto', '<BUCKET NAME>', '<FILENAME>.desc', '<PROTO_FILENAME>', '<PROTO_MESSAGE_TYPE>') FROM '<MY_TOPIC>'
```

In diesem Beispielausdruck:
+ Sie verwenden die SQL-Funktion [decode (value, DecodingScheme),](iot-sql-functions.md#iot-sql-decode-base64) um die Nutzdaten der binären Nachricht zu dekodieren, auf die von `*` verwiesen wird. Dies kann eine binäre protobuf-kodierte Nutzlast oder eine JSON-Zeichenfolge sein, die eine Base64-kodierte protobuf-Nutzlast darstellt.
+ Die bereitgestellte Nachrichtennutzlast ist mit dem Nachrichtentyp `Person` definierten in `PROTO_FILENAME.proto` kodiert.
+ Der benannte Amazon S3 S3-Bucket `BUCKET NAME` enthält das `FILENAME.desc` generierte von `PROTO_FILENAME.proto`.

Nachdem Sie die Konfiguration abgeschlossen haben, veröffentlichen Sie eine Nachricht zu AWS IoT Core dem Thema, für das die Regel abonniert wurde.

### Einschränkungen
<a name="binary-payloads-protobuf-limitations"></a>

AWS IoT Core Regeln unterstützen Protobuf mit den folgenden Einschränkungen:
+ Die Dekodierung von protobuf-Nachrichtennutzlasten innerhalb von [Ersatzvorlagen](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) wird nicht unterstützt.
+ Beim Dekodieren von protobuf-Nachrichtennutzlasten können Sie die [Funktion „SQL dekodieren“](iot-sql-functions.md#iot-sql-decode-base64) innerhalb eines einzelnen SQL-Ausdrucks bis zu zweimal verwenden.
+ Die maximale Größe der eingehenden Nutzlast beträgt 128 KiB (1 = 1024 Byte), die maximale Größe der ausgehenden Nutzlast beträgt 128 KiB und die maximale Größe für ein `FileDescriptorSet`-Objekt, das in einem Amazon S3-Bucket gespeichert ist, beträgt 32 KiB.
+ Mit SSE-C-Verschlüsselung verschlüsselte Amazon S3 Buckets werden nicht unterstützt.

### Best Practices
<a name="binary-payloads-protobuf-bestpractices"></a>

Nachfolgend Best Practices und Tipps zur Fehlerbehebung.
+ Laden Sie die proto-Dateien in den Amazon S3 Bucket hoch.

  Es empfiehlt sich, die proto-Dateien zu sichern, falls etwas schief geht. Wenn Sie z. B. bei der Ausführung von protoc die proto-Dateien fälschlicherweise ohne Sicherungen ändern, kann dies zu Problemen in Ihrem Produktionsstapel führen. Es gibt mehrere Möglichkeiten, Dateien in einem Amazon S3-Bucket zu sichern. Sie können beispielsweise die [Versionierung in S3-Buckets verwenden](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Versioning.html). Weitere Informationen zum Sichern von Dateien in Amazon S3-Buckets im *[Amazon S3 Developer Guide](https://docs.aws.amazon.com//aws-backup/latest/devguide/recovery-points.html)*.
+ Konfigurieren Sie die AWS IoT Protokollierung, um Protokolleinträge anzuzeigen.

  Es empfiehlt sich, die AWS IoT Protokollierung so zu konfigurieren, dass Sie die AWS IoT Protokolle für Ihr Konto überprüfen können CloudWatch. Wenn die SQL-Abfrage einer Regel eine externe Funktion aufruft, generiert AWS IoT Core Rules einen Protokolleintrag mit dem Wert `eventType` of`FunctionExecution`, der das Feld „Grund“ enthält, das Ihnen bei der Behebung von Fehlern hilft. Zu den möglichen Fehlern gehören ein Amazon S3 S3-Objekt, das nicht gefunden wurde, oder ein ungültiger protobuf-Dateideskriptor. Weitere Informationen zur Konfiguration der AWS IoT -Protokollierung und zum Anzeigen der Protokolleinträge unter [AWS IoT Protokollierung konfigurieren](https://docs.aws.amazon.com//iot/latest/developerguide/configure-logging.html) und Protokolleinträge der [Rules Engine](https://docs.aws.amazon.com//iot/latest/developerguide/cwl-format.html#log-rules-fn-exec).
+ Aktualisieren Sie `FileDescriptorSet` mit einem neuen Objektschlüssel und aktualisieren Sie den Objektschlüssel in der Regel.

  Zum Aktualisieren von `FileDescriptorSet` laden Sie eine aktualisierte Deskriptordatei in den Amazon S3 S3-Bucket hoch. Es kann bis zu 15 Minuten dauern, bis `FileDescriptorSet`-Aktualisierungen angezeigt werden. Es empfiehlt sich, die aktualisierte `FileDescriptorSet` mit einem neuen Objektschlüssel hochzuladen und den Objektschlüssel in der Regel zu aktualisieren.

# SQL-Versionen
<a name="iot-rule-sql-version"></a>

Die AWS IoT Regel-Engine verwendet eine SQL-ähnliche Syntax, um Daten aus MQTT-Nachrichten auszuwählen. Die SQL-Anweisungen werden auf Grundlage einer SQL-Version interpretiert, die mit der Eigenschaft `awsIotSqlVersion` in einem JSON-Dokument angegeben ist, welches die Regel beschreibt. Weitere Informationen zur Struktur von JSON-Regeldokumenten unter [Erstellen einer Regel](iot-create-rule.md). Mit der `awsIotSqlVersion` Eigenschaft können Sie angeben, welche Version der AWS IoT SQL-Regel-Engine Sie verwenden möchten. Wenn eine neue Version bereitgestellt wird, können Sie weiterhin eine frühere Version verwenden oder die Regel ändern, damit sie die neue Version nutzt. Die aktuellen Regeln verwenden weiterhin die Version, mit der sie erstellt wurden. 

Das folgende JSON-Beispiel zeigt, wie die SQL-Version mit der Eigenschaft `awsIotSqlVersion` angegeben wird:

```
{
    "sql": "expression",
    "ruleDisabled": false,
    "awsIotSqlVersion": "2016-03-23",
    "actions": [{
        "republish": {
            "topic": "my-mqtt-topic",
            "roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
        }
    }]
}
```

AWS IoT unterstützt derzeit die folgenden SQL-Versionen:
+ `2016-03-23` – Die SQL-Version von 23.03.2016 (empfohlen).
+ `2015-10-08` – Die ursprüngliche SQL-Version von 08.10.2015.
+ `beta` – Die neueste Beta-SQL-Version. Mit dieser Version können Sie die Regeln grundlegend ändern.

## Neuerungen in der Version der SQL-Regel-Engine vom 23.03.2016
<a name="sql-2016-03-23-beta"></a>
+ Lösungen für das Auswählen verschachtelter JSON-Objekte
+ Lösungen für Array-Abfragen
+ Unterstützung von Intra-Objektabfragen. Weitere Informationen finden Sie unter [Verschachtelte Objektabfragen](iot-sql-nested-queries.md).
+ Unterstützung zum Ausgeben eines Arrays als oberstes Objekt
+ Hinzufügen der `encode(value, encodingScheme)`-Funktion, die auf JSON- und Nicht-JSON-Formatdaten angewendet werden kann. Weitere Informationen finden Sie unter [Encode-Funktion](iot-sql-functions.md#iot-sql-encode-payload).

### Ausgeben von `Array` als oberstes Objekt
<a name="return-array-rule"></a>

Diese Funktion ermöglicht eine Regel, mit der ein Array als oberstes Objekt zurückgegeben wird. Als Beispiel dient etwa die folgende MQTT-Nachricht:

```
{
    "a": {"b":"c"},
    "arr":[1,2,3,4]
}
```

Und die folgende Regel:

```
SELECT VALUE arr FROM 'topic'
```

Die Regel generiert folgenden Output:

```
[1,2,3,4]
```