

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Aturan untuk AWS IoT
<a name="iot-rules"></a>

Aturan memberi perangkat Anda kemampuan untuk berinteraksi Layanan AWS. Aturan dianalisis dan tindakan dilakukan berdasarkan aliran topik MQTT. Anda dapat menggunakan aturan untuk mendukung tugas-tugas berikut:
+ Menambah atau memfilter data yang diterima dari perangkat.
+ Menulis data yang diterima dari perangkat ke database Amazon DynamoDB.
+ Simpan file ke Amazon S3.
+ Kirim pemberitahuan push ke semua pengguna yang menggunakan Amazon SNS.
+ Publikasikan data ke antrian Amazon SQS.
+ Memanggil fungsi Lambda untuk mengekstrak data.
+ Memproses pesan dari sejumlah besar perangkat menggunakan Amazon Kinesis.
+ Kirim data ke OpenSearch Layanan Amazon.
+ Tangkap CloudWatch metrik. 
+ Ubah CloudWatch alarm.
+ Kirim data dari pesan MQTT ke Amazon SageMaker AI untuk membuat prediksi berdasarkan model pembelajaran mesin (ML). 
+ Kirim pesan kepada Salesforce IoT Input Stream.
+ Mulai proses mesin status Step Functions.
+ Kirim data pesan ke AWS IoT Events input.
+ Kirim data pesan ke properti aset di AWS IoT SiteWise.
+ Kirim data pesan ke aplikasi atau layanan web.

Aturan Anda dapat menggunakan pesan MQTT yang melewati publish/subscribe protokol yang didukung oleh. [Protokol komunikasi perangkat](protocols.md) [Anda juga dapat menggunakan fitur [Basic Ingest](iot-basic-ingest.md) untuk mengirim data perangkat dengan aman ke Layanan AWS daftar sebelumnya, tanpa menimbulkan biaya pengiriman pesan.](https://aws.amazon.com/iot-core/pricing/) Fitur [Basic Ingest](iot-basic-ingest.md) mengoptimalkan aliran data dengan menghapus broker publish/subscribe pesan dari jalur konsumsi. Ini membuatnya hemat biaya sambil tetap menjaga keamanan dan fitur pemrosesan data AWS IoT.

Sebelum AWS IoT dapat melakukan tindakan ini, Anda harus memberikan izin untuk mengakses AWS sumber daya Anda atas nama Anda. Ketika tindakan dilakukan, Anda dikenakan biaya standar untuk Layanan AWS yang Anda gunakan.

**Topics**
+ [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md)
+ [Melewati izin peran](pass-role.md)
+ [Membuat AWS IoT aturan](iot-create-rule.md)
+ [Mengelola AWS IoT aturan](iot-managae-rule.md)
+ [AWS IoT tindakan aturan](iot-rule-actions.md)
+ [Memecahkan masalah aturan](#iot-troubleshoot-rule)
+ [Mengakses sumber daya lintas akun menggunakan aturan AWS IoT](accessing-cross-account-resources-using-rules.md)
+ [Penanganan kesalahan (tindakan kesalahan)](rule-error-handling.md)
+ [Mengurangi biaya pengiriman pesan dengan Basic Ingest](iot-basic-ingest.md)
+ [AWS IoT Referensi SQL](iot-sql-reference.md)

# Memberikan AWS IoT aturan akses yang dibutuhkannya
<a name="iot-create-role"></a>

Gunakan peran IAM untuk mengontrol AWS sumber daya yang dapat diakses oleh setiap aturan. Sebelum membuat aturan, Anda harus membuat peran IAM dengan kebijakan yang memungkinkan akses ke AWS sumber daya yang diperlukan. AWS IoT mengasumsikan peran ini saat menerapkan aturan.

**Selesaikan langkah-langkah berikut untuk membuat peran dan AWS IoT kebijakan IAM yang memberikan AWS IoT aturan akses yang diperlukan (AWS CLI).**

1. Simpan dokumen kebijakan kepercayaan berikut, yang memberikan AWS IoT izin untuk mengambil peran, ke file bernama`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"
               }
           }
           }
       ]
   }
   ```

   Gunakan perintah [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) untuk membuat peran IAM yang menentukan file: `iot-role-trust.json`

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

   Output dari perintah ini terlihat seperti berikut:

   ```
   {
   	"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. Simpan JSON berikut ke dalam file bernama`my-iot-policy.json`.  
****  

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

   JSON ini adalah contoh dokumen kebijakan yang memberikan akses AWS IoT administrator ke DynamoDB.

   Gunakan perintah [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) untuk memberikan AWS IoT akses ke AWS sumber daya Anda setelah mengambil peran, meneruskan file: `my-iot-policy.json`

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

   Untuk informasi selengkapnya tentang cara memberikan akses ke Layanan AWS dalam kebijakan AWS IoT, lihat[Membuat AWS IoT aturan](iot-create-rule.md).

   Output dari perintah [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) berisi ARN kebijakan. Lampirkan kebijakan ke peran.

   ```
   {
   	"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. Gunakan [attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)perintah untuk melampirkan kebijakan Anda ke peran Anda:

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

## Cabut akses mesin aturan
<a name="w2aac21c13b7"></a>

Untuk segera mencabut akses mesin aturan, lakukan hal berikut

1. [Hapus iot.amazonaws.com dari kebijakan kepercayaan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)

1. Ikuti langkah-langkah untuk [mencabut sesi peran iot](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_revoke-sessions.html)

# Melewati izin peran
<a name="pass-role"></a>

Bagian dari definisi aturan adalah peran IAM yang memberikan izin untuk mengakses sumber daya yang ditentukan dalam tindakan aturan. Mesin aturan mengasumsikan peran itu ketika tindakan aturan dipanggil. Peran harus didefinisikan Akun AWS sama dengan aturan.

Saat membuat atau mengganti aturan, Anda, pada dasarnya, meneruskan peran ke mesin aturan. `iam:PassRole`Izin diperlukan untuk melakukan operasi ini. Untuk memverifikasi bahwa Anda memiliki izin ini, buat kebijakan yang memberikan `iam:PassRole` izin dan melampirkannya ke pengguna IAM Anda. Kebijakan berikut menunjukkan cara mengizinkan `iam:PassRole` izin untuk peran.

****  

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

Dalam contoh kebijakan ini, izin `iam:PassRole` diberikan untuk peran `myRole`. Peran ditentukan dengan menggunakan ARN peran. Lampirkan kebijakan ini ke pengguna IAM Anda atau peran yang dimiliki pengguna Anda. Untuk informasi lebih lanjut, lihat [Bekerja dengan Kebijakan Terkelola](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_managed-using.html).

**catatan**  
Fungsi Lambda menggunakan kebijakan berbasis sumber daya, dan kebijakan tersebut melekat langsung ke fungsi Lambda itu sendiri. Saat Anda membuat aturan yang memanggil fungsi Lambda, Anda tidak meneruskan peran, sehingga pengguna yang membuat aturan tidak memerlukan `iam:PassRole` izin. Untuk informasi selengkapnya tentang otorisasi fungsi Lambda, lihat [Memberikan Izin Menggunakan Kebijakan Sumber Daya](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy). 

# Membuat AWS IoT aturan
<a name="iot-create-rule"></a>

Anda dapat membuat AWS IoT aturan untuk merutekan data dari hal-hal yang terhubung untuk berinteraksi dengan AWS layanan lain. AWS IoT Aturan terdiri dari komponen-komponen berikut:


**Komponen aturan**  

| Komponen | Deskripsi | Diperlukan atau Opsional | 
| --- | --- | --- | 
| Nama aturan |  Nama aturan . Perhatikan bahwa kami tidak merekomendasikan penggunaan informasi identitas pribadi dalam nama aturan Anda.  | Wajib. | 
| Deskripsi aturan |  Deskripsi tekstual aturan. Perhatikan bahwa kami tidak merekomendasikan penggunaan informasi identitas pribadi dalam deskripsi aturan Anda.  | Tidak wajib. | 
| Pernyataan SQL |  Sintaks SQL yang disederhanakan untuk memfilter pesan yang diterima pada topik MQTT dan mendorong data ke tempat lain. Untuk informasi selengkapnya, lihat [AWS IoT Referensi SQL](iot-sql-reference.md).  | Wajib. | 
| Versi SQL |  Versi mesin aturan SQL untuk digunakan saat mengevaluasi aturan. Meskipun properti ini opsional, kami sangat menyarankan Anda menentukan versi SQL. AWS IoT Core Konsol menetapkan properti ini secara `2016-03-23` default. Jika properti ini tidak diatur, seperti dalam AWS CLI perintah atau CloudFormation template, `2015-10-08` digunakan. Untuk informasi selengkapnya, lihat [Versi SQL](iot-rule-sql-version.md).  | Wajib. | 
| Satu atau lebih tindakan | Tindakan AWS IoT dilakukan saat memberlakukan aturan. Misalnya, Anda dapat memasukkan data ke dalam tabel DynamoDB, menulis data ke bucket Amazon S3, memublikasikan ke topik Amazon SNS, atau menginvokasi fungsi Lambda. | Wajib. | 
| Tindakan kesalahan | Tindakan AWS IoT dilakukan ketika tidak dapat melakukan tindakan aturan. | Tidak wajib. | 

Sebelum membuat AWS IoT aturan, Anda harus membuat peran IAM dengan kebijakan yang memungkinkan akses ke AWS sumber daya yang diperlukan. AWS IoT mengasumsikan peran ini saat menerapkan aturan. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang diperlukan](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html) dan [Melewati izin peran](https://docs.aws.amazon.com//iot/latest/developerguide/pass-role.html).

Saat Anda membuat aturan, perhatikan berapa banyak data yang Anda publikasikan tentang topik. Jika Anda membuat aturan yang menyertakan pola topik wildcard, aturan tersebut mungkin cocok dengan sebagian besar pesan Anda. Jika ini masalahnya, Anda mungkin perlu meningkatkan kapasitas AWS sumber daya yang digunakan oleh tindakan target. Sebaiknya hindari pola topik wildcard dalam aturan penerbitan ulang untuk mencegah pemrosesan duplikat dan mengurangi biaya.

**catatan**  
Membuat dan memperbarui aturan adalah tindakan tingkat administrator. Setiap pengguna yang memiliki izin untuk membuat atau memperbarui aturan dapat mengakses data yang diproses oleh aturan.

## Buat aturan (Konsol)
<a name="iot-create-rule-console"></a>

**Untuk membuat aturan (Konsol Manajemen AWS)**

Gunakan [Konsol Manajemen AWS](https://console.aws.amazon.com//iot/home#/home)perintah untuk membuat aturan:

1. Buka [konsol AWS IoT](https://console.aws.amazon.com//iot/home#/home).

1. Di navigasi kiri, pilih **Perutean pesan** dari bagian **Kelola**. Kemudian pilih **Aturan**.

1. Pada halaman **Aturan**, pilih **Buat aturan**.

1. Pada halaman **Tentukan properti aturan**, masukkan nama untuk aturan Anda. **Deskripsi aturan** dan **Tag** adalah opsional. Pilih **Berikutnya**.

1. Pada halaman **pernyataan Configure SQL**, pilih versi SQL dan masukkan pernyataan SQL. Contoh pernyataan SQL bisa. `SELECT temperature FROM 'iot/topic' WHERE temperature > 50` Untuk informasi selengkapnya, lihat [versi SQL](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-sql-version.html) dan referensi [AWS IoT SQL](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-reference.html).

1. Pada halaman **Lampirkan tindakan aturan**, tambahkan tindakan aturan untuk merutekan data ke AWS layanan lain.

   1. Dalam **Tindakan aturan**, pilih tindakan aturan dari daftar drop-down. Misalnya, Anda dapat memilih **Kinesis** Stream. Untuk informasi selengkapnya tentang tindakan aturan, lihat [tindakan AWS IoT aturan](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rule-actions.html).

   1. Bergantung pada tindakan aturan yang Anda pilih, masukkan detail konfigurasi terkait. Misalnya, jika Anda memilih **Kinesis Stream**, Anda harus memilih atau membuat sumber daya aliran data, dan secara opsional memasukkan detail konfigurasi seperti **kunci Partisi**, yang digunakan untuk mengelompokkan data dengan pecahan dalam Steam.

   1. Dalam **peran IAM**, pilih atau buat peran untuk memberikan AWS IoT akses ke titik akhir Anda. Perhatikan bahwa secara otomatis AWS IoT akan membuat kebijakan dengan awalan `aws-iot-rule` di bawah peran IAM Anda dipilih. Anda dapat memilih **Lihat** untuk melihat peran IAM dan kebijakan dari konsol IAM. **Tindakan kesalahan** adalah opsional. Anda dapat menemukan informasi lebih lanjut di [Penanganan kesalahan (tindakan kesalahan)](https://docs.aws.amazon.com//iot/latest/developerguide/rule-error-handling.html). Untuk informasi selengkapnya tentang membuat peran IAM untuk aturan Anda, lihat [Memberikan aturan akses yang diperlukan](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-role.html). Pilih **Berikutnya**.

1. Pada halaman **Tinjau dan buat**, tinjau semua konfigurasi dan lakukan pengeditan jika diperlukan. Pilih **Buat**.

Setelah Anda membuat aturan berhasil, Anda akan melihat aturan yang tercantum di halaman **Aturan**. Anda dapat memilih aturan untuk membuka halaman **Detail** tempat Anda dapat melihat aturan, mengedit aturan, menonaktifkan aturan, dan menghapus aturan.

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

**Untuk membuat aturan (AWS CLI)**  
Gunakan [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)perintah untuk membuat aturan:

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

Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke dalam tabel DynamoDB yang ditentukan. Pernyataan SQL menyaring pesan dan peran ARN AWS IoT memberikan izin untuk menulis ke tabel DynamoDB.

```
{
	"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()}"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke dalam bucket S3 yang ditentukan. Pernyataan SQL memfilter pesan, dan peran ARN AWS IoT memberikan izin untuk menulis ke bucket Amazon S3.

```
{
	"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"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang mendorong data ke Amazon OpenSearch Service:

```
{
	"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()}"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang memanggil fungsi Lambda:

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

Berikut ini adalah contoh file payload dengan aturan yang menerbitkan ke topik Amazon SNS:

```
{
	"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"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang menerbitkan kembali pada topik MQTT yang berbeda:

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

Berikut ini adalah contoh file payload dengan aturan yang mendorong data ke aliran Amazon Data Firehose:

```
{
	"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"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang menggunakan `machinelearning_predict` fungsi Amazon SageMaker AI untuk menerbitkan ulang ke topik jika data dalam muatan MQTT diklasifikasikan sebagai 1.

```
{
	"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"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang menerbitkan pesan ke aliran input Salesforce IoT Cloud.

```
{
	"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"
			}
		}
	]
}
```

Berikut ini adalah contoh file payload dengan aturan yang memulai eksekusi mesin status Step Functions.

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

# Mengelola AWS IoT aturan
<a name="iot-managae-rule"></a>

Anda dapat menggunakan tindakan berikut untuk mengelola AWS IoT aturan Anda.

**Topics**
+ [Menandai aturan](#iot-create-rule-tagging)
+ [Melihat aturan](#iot-view-rules)
+ [Menghapus aturan](#iot-delete-rule)

## Menandai aturan
<a name="iot-create-rule-tagging"></a>

Untuk menambahkan lapisan spesifisitas lain ke aturan baru atau yang sudah ada, Anda dapat menerapkan penandaan. Penandaan memanfaatkan pasangan nilai kunci dalam aturan Anda untuk memberi Anda kontrol yang lebih besar atas bagaimana dan di mana aturan Anda diterapkan pada sumber daya dan layanan Anda AWS IoT . Misalnya, Anda dapat membatasi cakupan aturan agar hanya berlaku di lingkungan beta untuk pengujian pra rilis (`Key=environment, Value=beta`) atau menangkap semua pesan yang dikirim ke `iot/test` topik hanya dari titik akhir tertentu dan menyimpannya di bucket Amazon S3.

### Contoh kebijakan IAM
<a name="iot-create-rule-tagging-iam-example"></a>

Untuk contoh yang menunjukkan cara memberikan izin penandaan untuk aturan, pertimbangkan pengguna yang menjalankan perintah berikut untuk membuat aturan dan menandainya agar hanya diterapkan ke lingkungan beta mereka.

Dalam contoh, ganti:
+ *MyTopicRuleName*dengan nama aturan.
+ *myrule.json*dengan nama dokumen kebijakan.

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

Untuk contoh ini, Anda harus menggunakan kebijakan IAM berikut:

****  

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

Contoh di atas menunjukkan aturan yang baru dibuat `MyTopicRuleName` yang disebut yang hanya berlaku untuk lingkungan beta Anda. `iot:TagResource`Dalam pernyataan kebijakan dengan panggilan `MyTopicRuleName` khusus memungkinkan penandaan saat membuat atau memperbarui`MyTopicRuleName`. Parameter yang `--tags "environment=beta"` digunakan saat membuat aturan membatasi cakupan hanya `MyTopicRuleName` untuk lingkungan beta Anda. Jika Anda menghapus parameter`--tags "environment=beta"`, maka `MyTopicRuleName` akan berlaku untuk semua lingkungan.

Untuk informasi selengkapnya tentang membuat peran dan kebijakan IAM khusus untuk AWS IoT aturan, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md)

Untuk informasi umum tentang menandai sumber daya Anda, lihat[Menandai sumber daya Anda AWS IoT](tagging-iot.md).

## Melihat aturan
<a name="iot-view-rules"></a>

Gunakan [list-topic-rules](https://docs.aws.amazon.com/cli/latest/reference/iot/list-topic-rules.html)perintah untuk membuat daftar aturan Anda:

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

Gunakan [get-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/get-topic-rule.html)perintah untuk mendapatkan informasi tentang aturan:

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

## Menghapus aturan
<a name="iot-delete-rule"></a>

Ketika Anda selesai dengan aturan, Anda dapat menghapusnya.

**Untuk menghapus aturan (AWS CLI)**  
Gunakan [delete-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-topic-rule.html)perintah untuk menghapus aturan:

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

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

AWS IoT tindakan aturan menentukan apa yang harus dilakukan ketika aturan dipanggil. Anda dapat menentukan tindakan untuk mengirim data ke database Amazon DynamoDB, mengirim data ke Amazon Kinesis Data Streams, memanggil fungsi, AWS Lambda dan sebagainya. AWS IoT mendukung tindakan berikut di Wilayah AWS mana layanan tindakan tersedia.


| Tindakan aturan | Deskripsi | Nama di API | 
| --- | --- | --- | 
| [Apache Kafka](apache-kafka-rule-action.md) | Mengirim pesan ke cluster Apache Kafka. | kafka | 
| [CloudWatch alarm](cloudwatch-alarms-rule-action.md) | Mengubah status CloudWatch alarm Amazon. | cloudwatchAlarm | 
| [CloudWatch Log](cloudwatch-logs-rule-action.md) | Mengirim pesan ke Amazon CloudWatch Logs. | cloudwatchLogs | 
| [CloudWatch metrik](cloudwatch-metrics-rule-action.md) | Mengirim pesan ke CloudWatch metrik. | cloudwatchMetric | 
| [DynamoDB](dynamodb-rule-action.md) | Mengirim pesan ke tabel DynamoDB. | dynamoDB | 
| [Dinamo DBv2](dynamodb-v2-rule-action.md) | Mengirim data pesan ke beberapa kolom dalam tabel DynamoDB. | dynamoDBv2 | 
| [Elasticsearch](elasticsearch-rule-action.md) | Mengirim pesan ke OpenSearch titik akhir. | OpenSearch | 
| [HTTP](https-rule-action.md) | Memposting pesan ke titik akhir HTTPS. | http | 
| [AWS IoT Events](iotevents-rule-action.md) | Mengirim pesan ke AWS IoT Events input. | iotEvents | 
| [AWS IoT SiteWise](iotsitewise-rule-action.md) | Mengirim data pesan ke properti AWS IoT SiteWise aset. | iotSiteWise | 
| [Firehouse](kinesis-firehose-rule-action.md) | Mengirim pesan ke aliran pengiriman Firehose. | firehose | 
| [Kinesis Data Streams](kinesis-rule-action.md) | Mengirim pesan ke aliran data Kinesis. | kinesis | 
| [Lambda](lambda-rule-action.md) | Memanggil fungsi Lambda dengan data pesan sebagai input. | lambda | 
| [Lokasi](location-rule-action.md) | Mengirim data lokasi ke Amazon Location Service. | location | 
| [OpenSearch](opensearch-rule-action.md) | Mengirim pesan ke titik akhir OpenSearch Layanan Amazon. | OpenSearch | 
| [Publikasikan ulang](republish-rule-action.md) | Menerbitkan kembali pesan ke topik MQTT lain. | republish | 
| [S3](s3-rule-action.md) | Menyimpan pesan di bucket Amazon Simple Storage Service (Amazon S3). | s3 | 
| [Salesforce IoT](salesforce-iot-rule-action.md) | Mengirim pesan ke aliran input IoT Salesforce. | salesforce | 
| [SNS](sns-rule-action.md) | Menerbitkan pesan sebagai notifikasi push Amazon Simple Notification Service (Amazon SNS). | sns | 
| [SQS](sqs-rule-action.md) | Mengirim pesan ke antrian Amazon Simple Queue Service (Amazon SQS). | sqs | 
| [Step Functions](stepfunctions-rule-action.md) | Memulai mesin AWS Step Functions negara. | stepFunctions | 
| [Timestream](timestream-rule-action.md) | Mengirim pesan ke tabel database Amazon Timestream. | timestream | 

**Catatan**  
Tentukan aturan Wilayah AWS sama dengan sumber daya layanan lain sehingga tindakan aturan dapat berinteraksi dengan sumber daya tersebut.
Mesin AWS IoT aturan mungkin melakukan beberapa upaya untuk melakukan tindakan jika terjadi kesalahan intermiten. Jika semua upaya gagal, pesan akan dibuang dan kesalahan tersedia di Log Anda CloudWatch . Anda dapat menentukan tindakan kesalahan untuk setiap aturan yang diinvokasi setelah terjadi kegagalan. Untuk informasi selengkapnya, lihat [Penanganan kesalahan (tindakan kesalahan)](rule-error-handling.md).
Beberapa tindakan aturan mengaktifkan tindakan dalam layanan yang terintegrasi dengan AWS Key Management Service (AWS KMS) untuk mendukung enkripsi data saat istirahat. Jika Anda menggunakan kunci AWS KMS key KMS yang dikelola pelanggan untuk mengenkripsi data saat istirahat, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk mempelajari cara mengelola izin untuk kunci KMS yang dikelola pelanggan, lihat topik enkripsi data di panduan layanan yang sesuai. Untuk informasi selengkapnya tentang kunci KMS yang dikelola pelanggan, lihat [AWS Key Management Service konsep](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) di *Panduan AWS Key Management Service Pengembang*.  
Anda dapat menggunakan [fungsi](iot-sql-functions.md) atau [templat substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) apa pun dalam pernyataan SQL tindakan kesalahan termasuk fungsi eksternal: [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), dan. [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) Jika tindakan kesalahan mengharuskan untuk memanggil fungsi eksternal, maka menjalankan tindakan kesalahan dapat mengakibatkan tagihan tambahan untuk fungsi eksternal.

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

[Tindakan Apache Kafka (Kafka) mengirim pesan langsung ke Amazon [Managed Streaming for Apache Kafka (Amazon MSK), cluster Apache Kafka yang dikelola](https://docs.aws.amazon.com//msk/latest/developerguide/what-is-msk.html) oleh penyedia pihak ketiga seperti Confluent Cloud, atau cluster Apache Kafka yang dikelola sendiri.](https://www.confluent.io/) Dengan tindakan aturan Kafka, Anda dapat merutekan data IoT Anda ke cluster Kafka. Ini memungkinkan Anda membangun jaringan data berkinerja tinggi untuk berbagai tujuan, seperti analitik streaming, integrasi data, visualisasi, dan aplikasi bisnis yang sangat penting.

**catatan**  
Topik ini mengasumsikan keakraban dengan platform Apache Kafka dan konsep terkait. Untuk informasi lebih lanjut tentang Apache Kafka, lihat [Apache](https://kafka.apache.org/) Kafka. [MSK Tanpa Server tidak didukung](https://docs.aws.amazon.com//msk/latest/developerguide/serverless.html). MSK Kluster tanpa server hanya dapat dilakukan melalui otentikasi IAM, yang saat ini tidak didukung oleh tindakan aturan Apache Kafka. Untuk informasi selengkapnya tentang cara mengonfigurasi AWS IoT Core dengan Confluent, lihat [Memanfaatkan Konfluen dan AWS Memecahkan Tantangan Manajemen Perangkat dan Data IoT](https://aws.amazon.com/blogs/apn/leveraging-confluent-and-aws-to-solve-iot-device-and-data-management-challenges/).

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan`ec2:CreateNetworkInterface`,`ec2:DescribeNetworkInterfaces`,`ec2:CreateNetworkInterfacePermission`,`ec2:DeleteNetworkInterface`,`ec2:DescribeSubnets`, `ec2:DescribeVpcs``ec2:DescribeVpcAttribute`, dan `ec2:DescribeSecurityGroups` operasi. Peran ini menciptakan dan mengelola antarmuka jaringan elastis ke Amazon Virtual Private Cloud Anda untuk menjangkau broker Kafka Anda. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT Core untuk melakukan tindakan aturan ini. 

  Untuk informasi selengkapnya tentang antarmuka jaringan, lihat [Antarmuka jaringan elastis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) di Panduan Pengguna *Amazon EC2*.

  Kebijakan yang dilampirkan pada peran yang Anda tentukan akan terlihat seperti contoh berikut.  
****  

  ```
  {
      "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": "*"
          }
      ]
  }
  ```
+ Jika Anda menggunakan AWS Secrets Manager untuk menyimpan kredensyal yang diperlukan untuk terhubung ke broker Kafka Anda, Anda harus membuat peran IAM yang AWS IoT Core dapat diasumsikan untuk melakukan dan operasi. `secretsmanager:GetSecretValue` `secretsmanager:DescribeSecret`

  Kebijakan yang dilampirkan pada peran yang Anda tentukan akan terlihat seperti contoh berikut.  
****  

  ```
  {
      "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-*"
              ]
          }
      ]
  }
  ```
+ Anda dapat menjalankan cluster Apache Kafka Anda di dalam Amazon Virtual Private Cloud (Amazon VPC). Anda harus membuat tujuan Apache Kafka Virtual Private Cloud (VPC) Virtual Cloud (VPC) dan menggunakan gateway NAT di subnet Anda untuk meneruskan pesan dari ke kluster Kafka publik. AWS IoT Mesin AWS IoT aturan membuat antarmuka jaringan di setiap subnet yang tercantum di tujuan untuk mengarahkan lalu lintas langsung ke VPC. Saat tujuan Anda, mesin AWS IoT aturan secara otomatis membuat tindakan aturan VPC. Untuk informasi selengkapnya tentang tindakan aturan VPC, lihat. [Tujuan Apache Kafka Virtual Private Cloud (VPC)](kafka-vpc-destination.md)
+ Jika Anda menggunakan pelanggan yang dikelola AWS KMS key (kunci KMS) untuk mengenkripsi data saat istirahat, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [enkripsi MSK Amazon di Panduan Pengembang](https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html) *Amazon Managed Streaming for Apache* Kafka Kafka.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

Destinasi ARN  
Nama Sumber Daya Amazon (ARN) dari tujuan Apache Kafka Virtual Private Cloud (VPC). Untuk informasi tentang membuat tujuan, lihat[Tujuan Apache Kafka Virtual Private Cloud (VPC)](kafka-vpc-destination.md).

topik  
Topik Kafka untuk pesan yang akan dikirim ke broker Kafka.  
Anda dapat mengganti bidang ini menggunakan templat substitusi. Untuk informasi selengkapnya, lihat [Templat substitusi](iot-substitution-templates.md). 

kunci (opsional)  
Kunci pesan Kafka.  
Anda dapat mengganti bidang ini menggunakan templat substitusi. Untuk informasi selengkapnya, lihat [Templat substitusi](iot-substitution-templates.md). 

header (opsional)  
Daftar header Kafka yang Anda tentukan. Setiap header adalah pasangan kunci-nilai yang dapat Anda tentukan saat Anda membuat tindakan Kafka. Anda dapat menggunakan header ini untuk merutekan data dari klien IoT ke hilir kluster Kafka tanpa mengubah payload pesan Anda.  
Anda dapat mengganti bidang ini menggunakan templat substitusi. [Untuk memahami cara meneruskan fungsi Aturan sebaris sebagai templat substitusi di header Kafka Action, lihat Contoh.](#apache-kafka-rule-action-examples) Untuk informasi selengkapnya, lihat [Templat substitusi](iot-substitution-templates.md).  
Header dalam format biner tidak didukung.

partisi (opsional)  
Partisi pesan Kafka.  
Anda dapat mengganti bidang ini menggunakan templat substitusi. Untuk informasi selengkapnya, lihat [Templat substitusi](iot-substitution-templates.md).

ClientProperties  
Objek yang mendefinisikan properti klien produsen Apache Kafka.    
acks (opsional)  
Jumlah ucapan terima kasih yang harus diterima oleh produsen sebelum mempertimbangkan permintaan lengkap.  
Jika Anda menentukan 0 sebagai nilai, produsen tidak akan menunggu pengakuan apa pun dari server. Jika server tidak menerima pesan, produser tidak akan mencoba lagi untuk mengirim pesan.  
Nilai yang valid:`-1`,`0`,`1`,`all`. Nilai default-nya adalah `1`.  
bootstrap.servers  
Daftar pasangan host dan port (misalnya,`host1:port1`,`host2:port2`) yang digunakan untuk membuat koneksi awal ke cluster Kafka Anda.  
kompresi.type (opsional)  
Jenis kompresi untuk semua data yang dihasilkan oleh produsen.  
Nilai yang valid:`none`,`gzip`,`snappy`,`lz4`,`zstd`. Nilai default-nya adalah `none`.  
security.protocol  
Protokol keamanan yang digunakan untuk melampirkan ke broker Kafka Anda.  
Nilai-nilai yang valid: `SSL`, `SASL_SSL`. Nilai default-nya adalah `SSL`.  
key.serializer  
Menentukan cara mengubah objek kunci yang Anda berikan dengan `ProducerRecord` menjadi byte.  
Nilai valid: `StringSerializer`.  
value.serializer  
Menentukan cara mengubah objek nilai yang Anda berikan dengan `ProducerRecord` menjadi byte.  
Nilai valid: `ByteBufferSerializer`.  
ssl.truststore  
File truststore dalam format base64 atau lokasi file truststore di. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) Nilai ini tidak diperlukan jika truststore Anda dipercaya oleh otoritas sertifikat Amazon (CA).  
Bidang ini mendukung template substitusi. Jika Anda menggunakan Secrets Manager untuk menyimpan kredensyal yang diperlukan untuk terhubung ke broker Kafka Anda, Anda dapat menggunakan fungsi `get_secret` SQL untuk mengambil nilai untuk bidang ini. Untuk informasi selengkapnya tentang templat substitusi, lihat[Templat substitusi](iot-substitution-templates.md). Untuk informasi selengkapnya tentang fungsi `get_secret` SQL, lihat[get\$1secret (secretID, secretType, kunci, roLearn)](iot-sql-functions.md#iot-sql-function-get-secret). Jika truststore dalam bentuk file, gunakan parameternya`SecretBinary`. Jika truststore dalam bentuk string, gunakan parameternya`SecretString`.  
Ukuran maksimum nilai ini adalah 65 KB.  
ssl.truststore.password  
Kata sandi untuk truststore. Nilai ini diperlukan hanya jika Anda telah membuat kata sandi untuk truststore.  
ssl.keystore  
File keystore. Nilai ini diperlukan saat Anda menentukan `SSL` sebagai nilai untuk`security.protocol`.  
Bidang ini mendukung template substitusi. Gunakan Secrets Manager untuk menyimpan kredensil yang diperlukan untuk terhubung ke broker Kafka Anda. Untuk mengambil nilai untuk bidang ini, gunakan fungsi `get_secret` SQL. Untuk informasi selengkapnya tentang templat substitusi, lihat[Templat substitusi](iot-substitution-templates.md). Untuk informasi selengkapnya tentang fungsi `get_secret` SQL, lihat[get\$1secret (secretID, secretType, kunci, roLearn)](iot-sql-functions.md#iot-sql-function-get-secret). Gunakan parameter `SecretBinary`.  
ssl.keystore.password  
Kata sandi toko untuk file keystore. Nilai ini diperlukan jika Anda menentukan nilai untuk`ssl.keystore`.  
Nilai bidang ini bisa berupa plaintext. Bidang ini juga mendukung template substitusi. Gunakan Secrets Manager untuk menyimpan kredensil yang diperlukan untuk terhubung ke broker Kafka Anda. Untuk mengambil nilai untuk bidang ini, gunakan fungsi `get_secret` SQL. Untuk informasi selengkapnya tentang templat substitusi, lihat[Templat substitusi](iot-substitution-templates.md). Untuk informasi selengkapnya tentang fungsi `get_secret` SQL, lihat[get\$1secret (secretID, secretType, kunci, roLearn)](iot-sql-functions.md#iot-sql-function-get-secret). Gunakan parameter `SecretString`.  
ssl.key.password  
Kata sandi kunci pribadi di file keystore Anda.  
Bidang ini mendukung template substitusi. Gunakan Secrets Manager untuk menyimpan kredensil yang diperlukan untuk terhubung ke broker Kafka Anda. Untuk mengambil nilai untuk bidang ini, gunakan fungsi `get_secret` SQL. Untuk informasi selengkapnya tentang templat substitusi, lihat[Templat substitusi](iot-substitution-templates.md). Untuk informasi selengkapnya tentang fungsi `get_secret` SQL, lihat[get\$1secret (secretID, secretType, kunci, roLearn)](iot-sql-functions.md#iot-sql-function-get-secret). Gunakan parameter `SecretString`.  
sasl.mekanisme  
Mekanisme keamanan yang digunakan untuk terhubung ke broker Kafka Anda. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk`security.protocol`.  
Nilai-nilai yang valid: `PLAIN`, `SCRAM-SHA-512`, `GSSAPI`.  
`SCRAM-SHA-512`adalah satu-satunya mekanisme keamanan yang didukung di Wilayah cn-north-1, cn-northwest-1, -1, dan -1. us-gov-east us-gov-west  
sasl.plain.username  
Nama pengguna yang digunakan untuk mengambil string rahasia dari Secrets Manager. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `PLAIN` untuk`sasl.mechanism`.  
sasl.plain.password  
Kata sandi yang digunakan untuk mengambil string rahasia dari Secrets Manager. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `PLAIN` untuk`sasl.mechanism`.  
sasl.scram.username  
Nama pengguna yang digunakan untuk mengambil string rahasia dari Secrets Manager. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `SCRAM-SHA-512` untuk`sasl.mechanism`.  
sasl.scram.password  
Kata sandi yang digunakan untuk mengambil string rahasia dari Secrets Manager. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `SCRAM-SHA-512` untuk`sasl.mechanism`.  
sasl.kerberos.keytab  
File keytab untuk otentikasi Kerberos di Secrets Manager. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `GSSAPI` untuk`sasl.mechanism`.  
Bidang ini mendukung template substitusi. Gunakan Secrets Manager untuk menyimpan kredensil yang diperlukan untuk terhubung ke broker Kafka Anda. Untuk mengambil nilai untuk bidang ini, gunakan fungsi `get_secret` SQL. Untuk informasi selengkapnya tentang templat substitusi, lihat[Templat substitusi](iot-substitution-templates.md). Untuk informasi selengkapnya tentang fungsi `get_secret` SQL, lihat[get\$1secret (secretID, secretType, kunci, roLearn)](iot-sql-functions.md#iot-sql-function-get-secret). Gunakan parameter `SecretBinary`.  
sasl.kerberos.service.name  
Nama utama Kerberos di mana Apache Kafka berjalan. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `GSSAPI` untuk`sasl.mechanism`.  
sasl.kerberos.krb5.kdc  
Nama host dari pusat distribusi kunci (KDC) yang terhubung dengan klien produsen Apache Kafka Anda. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `GSSAPI` untuk`sasl.mechanism`.  
sasl.kerberos.krb5.realm  
Ranah yang terhubung dengan klien produser Apache Kafka Anda. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `GSSAPI` untuk`sasl.mechanism`.  
sasl.kerberos.principal  
Identitas unik Kerberos tempat Kerberos dapat menetapkan tiket untuk mengakses layanan yang sadar Kerberos. Nilai ini diperlukan saat Anda menentukan `SASL_SSL` untuk `security.protocol` dan `GSSAPI` untuk`sasl.mechanism`.

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

Contoh JSON berikut mendefinisikan tindakan Apache Kafka dalam sebuah aturan. AWS IoT Contoh berikut meneruskan fungsi inline [sourceIP (](iot-sql-functions.md#iot-function-sourceip)) sebagai template [substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) di header Kafka Action.

```
{
	"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()}"
						}
					]
				}
			}
		]
	}
}
```

**Catatan penting tentang pengaturan Kerberos Anda**
+ Pusat distribusi kunci (KDC) Anda harus dapat diselesaikan melalui Private Domain Name System (DNS) dalam VPC target Anda. Salah satu pendekatan yang mungkin adalah menambahkan entri DNS KDC ke zona host pribadi. Untuk informasi selengkapnya tentang pendekatan ini, lihat [Bekerja dengan zona yang dihosting pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).
+ Setiap VPC harus memiliki resolusi DNS yang diaktifkan. Untuk informasi selengkapnya, lihat [Menggunakan DNS dengan VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).
+ Grup keamanan antarmuka jaringan dan grup keamanan tingkat instans di tujuan VPC harus mengizinkan lalu lintas dari dalam VPC Anda pada port berikut.
  + Lalu lintas TCP pada port pendengar broker bootstrap (seringkali 9092, tetapi harus berada dalam kisaran 9000—9100)
  + Lalu lintas TCP dan UDP di port 88 untuk KDC
+ `SCRAM-SHA-512`adalah satu-satunya mekanisme keamanan yang didukung di Wilayah cn-north-1, cn-northwest-1, -1, dan -1. us-gov-east us-gov-west

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

Tindakan aturan Apache Kafka merutekan data ke cluster Apache Kafka di Amazon Virtual Private Cloud (Amazon VPC). Konfigurasi VPC yang digunakan oleh tindakan aturan Apache Kafka diaktifkan secara otomatis saat Anda menentukan tujuan VPC untuk tindakan aturan Anda.

Tujuan Apache Kafka Virtual Private Cloud (VPC) berisi daftar subnet di dalam VPC. Mesin aturan membuat antarmuka jaringan elastis di setiap subnet yang Anda tentukan dalam daftar ini. Untuk informasi selengkapnya tentang antarmuka jaringan, lihat [Antarmuka jaringan elastis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) di Panduan Pengguna Amazon EC2.

## Persyaratan dan pertimbangan
<a name="kafka-vpc-destination-considerations"></a>
+ Jika Anda menggunakan cluster Apache Kafka yang dikelola sendiri yang akan diakses menggunakan endpoint publik di internet:
  + Buat gateway NAT untuk instance di subnet Anda. Gateway NAT memiliki alamat IP publik yang dapat terhubung ke internet, yang memungkinkan mesin aturan untuk meneruskan pesan Anda ke kluster Kafka publik.
  + Alokasikan alamat IP Elastis dengan antarmuka jaringan elastis (ENIs) yang dibuat oleh tujuan Apache Kafka Virtual Private Cloud (VPC). Grup keamanan yang Anda gunakan harus dikonfigurasi untuk memblokir lalu lintas masuk.
**catatan**  
Jika tujuan Apache Kafka Virtual Private Cloud (VPC) dinonaktifkan dan kemudian diaktifkan kembali, Anda harus mengaitkan ulang elastis dengan yang baru. IPs ENIs
+ Jika tujuan Apache Kafka Virtual Private Cloud (VPC) tidak menerima lalu lintas selama 30 hari berturut-turut, itu akan dinonaktifkan.
+ Jika ada sumber daya yang digunakan oleh tujuan Apache Kafka Virtual Private Cloud (VPC) Virtual Cloud (VPC) berubah, tujuan akan dinonaktifkan dan tidak dapat digunakan.
+ Beberapa perubahan yang dapat menonaktifkan tujuan Apache Kafka Virtual Private Cloud (VPC) meliputi: 
  + Menghapus VPC, subnet, grup keamanan, atau peran yang digunakan.
  + Memodifikasi peran agar tidak lagi memiliki izin yang diperlukan.
  + Mencapai kapasitas subnet yang mendekati yang membuat kami tidak dapat menerapkan tambalan [FedRAMP](https://aws.amazon.com/compliance/fedramp/).
  + Menonaktifkan tujuan.

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

Untuk tujuan penetapan harga, tindakan aturan VPC diukur selain tindakan yang mengirim pesan ke sumber daya saat sumber daya ada di VPC Anda. Untuk informasi harga, lihat [Harga AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

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

Anda membuat tujuan Apache Kafka Virtual Private Cloud (VPC) Virtual Cloud (VPC) dengan menggunakan [CreateTopicRuleDestination](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRuleDestination.html)API atau konsol. AWS IoT Core 

Saat Anda membuat tujuan, Anda harus menentukan informasi berikut.

vpcId  
ID unik dari Amazon VPC.

subnetIds  
Daftar subnet di mana mesin aturan menciptakan antarmuka jaringan elastis. Mesin aturan mengalokasikan antarmuka jaringan tunggal untuk setiap subnet dalam daftar.

SecurityGroups (opsional)  
Daftar grup keamanan untuk diterapkan ke antarmuka jaringan.

roleArn  
Nama Sumber Daya Amazon (ARN) dari peran yang memiliki izin untuk membuat antarmuka jaringan atas nama Anda.  
ARN ini harus memiliki kebijakan yang melekat padanya yang terlihat seperti contoh berikut.    
****  

```
{
    "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"
            }
        }
        }
    ]
}
```

### Membuat tujuan Apache Kafka Virtual Private Cloud (VPC) dengan menggunakan AWS CLI
<a name="kafka-vpc-destination-create-cli"></a>

Contoh berikut menunjukkan cara membuat tujuan dengan menggunakan 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"}'
```

Setelah Anda menjalankan perintah ini, status tujuan akan menjadi`IN_PROGRESS`. Setelah beberapa menit, statusnya akan berubah menjadi `ERROR` (jika perintah tidak berhasil) atau`ENABLED`. Ketika status tujuan`ENABLED`, itu siap digunakan.

Anda dapat menggunakan perintah berikut untuk mendapatkan status tujuan Apache Kafka Virtual Private Cloud (VPC) Anda.

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

### Membuat tujuan Apache Kafka Virtual Private Cloud (VPC) dengan menggunakan konsol AWS IoT Core
<a name="kafka-vpc-destination-create-console"></a>

Langkah-langkah berikut menjelaskan cara membuat tujuan dengan menggunakan AWS IoT Core konsol.

1. Arahkan ke AWS IoT Core konsol. Di panel kiri, pada tab **Act**, pilih **Destinasi**.

1. Masukkan nilai untuk bidang berikut.
   + **ID VPC**
   + **Subnet IDs**
   + **Grup Keamanan**

1. Pilih peran yang memiliki izin yang diperlukan untuk membuat antarmuka jaringan. Kebijakan contoh sebelumnya berisi izin ini.

Ketika status tujuan Apache Kafka Virtual Private Cloud (VPC) Virtual Cloud (VPC) DIAKTIFKAN, **itu** siap digunakan.

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

Tindakan CloudWatch alarm (`cloudWatchAlarm`) mengubah status CloudWatch alarm Amazon. Anda dapat menentukan alasan dan nilai perubahan status dalam panggilan ini. 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `cloudwatch:SetAlarmState` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`alarmName`  
Nama CloudWatch alarm.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`stateReason`  
Alasan perubahan alarm.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`stateValue`  
Nilai status alarm. Nilai-nilai yang valid: `OK`, `ALARM`, `INSUFFICIENT_DATA`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Peran IAM yang memungkinkan akses ke CloudWatch alarm. Untuk informasi selengkapnya, lihat [Persyaratan](#cloudwatch-alarms-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan CloudWatch alarm AWS IoT dalam aturan.

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="cloudwatch-alarms-rule-action-see-also"></a>
+ [Apa itu Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/) di *Panduan CloudWatch Pengguna Amazon*
+ [Menggunakan CloudWatch alarm Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) di * CloudWatch Panduan Pengguna Amazon*

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

Tindakan CloudWatch Logs (`cloudwatchLogs`) mengirimkan data ke Amazon CloudWatch Logs. Anda dapat menggunakan `batchMode` untuk mengunggah dan stempel waktu beberapa catatan log perangkat dalam satu pesan. Anda juga dapat menentukan grup log tempat tindakan mengirim data.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan`logs:CreateLogStream`,`logs:DescribeLogStreams`, dan `logs:PutLogEvents` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan pelanggan yang dikelola AWS KMS key (kunci KMS) untuk mengenkripsi data CloudWatch log di Log, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [Mengenkripsi data CloudWatch log di Log menggunakan AWS KMS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) *Panduan Pengguna Amazon CloudWatch Logs*.

## Persyaratan format pesan MQTT untuk `batchMode`
<a name="cloudwatch-logs-rule-action-message-format"></a>

Jika Anda menggunakan tindakan aturan CloudWatch Log dengan `batchMode` dimatikan, tidak ada persyaratan pemformatan pesan MQTT. (Catatan: nilai default `batchMode` parameter adalah`false`.) Namun, jika Anda menggunakan tindakan aturan CloudWatch Log dengan `batchMode` diaktifkan (nilai parameternya`true`), pesan MQTT yang berisi log sisi perangkat harus diformat agar berisi stempel waktu dan muatan pesan. **Catatan:** `timestamp` mewakili waktu terjadinya peristiwa dan dinyatakan sebagai sejumlah milidetik setelah 1 Januari 1970 00:00:00 UTC.

Berikut ini adalah contoh format publikasi:

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

Bergantung pada bagaimana log sisi perangkat dihasilkan, log tersebut mungkin perlu difilter dan diformat ulang sebelum dikirim untuk memenuhi persyaratan ini. Untuk informasi selengkapnya, lihat [Muatan Pesan MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topicdata.html).

Terlepas dari `batchMode` parameter, `message` konten harus mematuhi batasan ukuran AWS IoT pesan. Untuk informasi lebih lanjut, lihat [AWS IoT Core kuota dan titik akhir](https://docs.aws.amazon.com/general/latest/gr/iot-core.html).

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`logGroupName`  
Grup CloudWatch log tempat tindakan mengirimkan data.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`roleArn`  
Peran IAM yang memungkinkan akses ke grup CloudWatch log. Untuk informasi selengkapnya, lihat [Persyaratan](#cloudwatch-logs-rule-action-requirements).   
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

(opsional) `batchMode`  
 Menunjukkan apakah kumpulan catatan log akan diekstraksi dan diunggah ke dalam. CloudWatch Nilai termasuk `true` atau `false` (default). Untuk informasi selengkapnya, lihat [Persyaratan](#cloudwatch-logs-rule-action-requirements).   
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan CloudWatch Log dalam aturan. AWS IoT 

```
{
    "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                    
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="cloudwatch-logs-rule-action-see-also"></a>
+ [Apa itu Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/) di *Panduan Pengguna CloudWatch Log Amazon*

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

Tindakan CloudWatch metrik (`cloudwatchMetric`) menangkap CloudWatch metrik Amazon. Anda dapat menentukan namespace metrik, nama, nilai, unit, dan stempel waktu. 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `cloudwatch:PutMetricData` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`metricName`  
Nama CloudWatch metrik.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`metricNamespace`  
Nama namespace CloudWatch metrik.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`metricUnit`  
Unit metrik yang didukung oleh CloudWatch.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`metricValue`  
String yang berisi nilai CloudWatch metrik.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`metricTimestamp`  
(Opsional) String yang berisi stempel waktu, dinyatakan dalam detik dalam waktu epoch Unix. Default ke waktu epoch Unix saat ini.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Peran IAM yang memungkinkan akses ke CloudWatch metrik. Untuk informasi selengkapnya, lihat [Persyaratan](#cloudwatch-metrics-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan CloudWatch metrik dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan CloudWatch metrik dengan template substitusi dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="cloudwatch-metrics-rule-action-see-also"></a>
+ [Apa itu Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/) di *Panduan CloudWatch Pengguna Amazon*
+ [Menggunakan CloudWatch metrik Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) di * CloudWatch Panduan Pengguna Amazon*

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

Tindakan DynamoDB `dynamoDB` () menulis semua atau sebagian pesan MQTT ke tabel Amazon DynamoDB. 

Anda dapat mengikuti tutorial yang menunjukkan cara membuat dan menguji aturan dengan tindakan DynamoDB. Untuk informasi selengkapnya, lihat [Tutorial: Menyimpan data perangkat dalam tabel DynamoDB](iot-ddb-rule.md).

**catatan**  
Aturan ini menulis data non-JSON ke DynamoDB sebagai data biner. Konsol DynamoDB menampilkan data sebagai teks yang disandikan base64.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `dynamodb:PutItem` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+  Jika Anda menggunakan pelanggan yang dikelola AWS KMS key (kunci KMS) untuk mengenkripsi data saat istirahat di DynamoDB, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [kunci KMS yang Dikelola Pelanggan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-cmk-customer-managed) di Panduan Memulai *Amazon DynamoDB*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`tableName`  
Nama dari tabel DynamoDB.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`hashKeyField`  
Nama kunci hash (juga disebut kunci partisi).  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`hashKeyType`  
(Opsional) Tipe data dari kunci hash (juga disebut kunci partisi). Nilai-nilai yang valid: `STRING`, `NUMBER`.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`hashKeyValue`  
Nilai kunci hash. Pertimbangkan untuk menggunakan template substitusi seperti `${topic()}` atau`${timestamp()}`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`rangeKeyField`  
(Opsional) Nama tombol rentang (juga disebut tombol sortir).  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`rangeKeyType`  
(Opsional) Tipe data dari tombol rentang (juga disebut tombol sortir). Nilai-nilai yang valid: `STRING`, `NUMBER`.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`rangeKeyValue`  
(Opsional) Nilai tombol rentang. Pertimbangkan untuk menggunakan template substitusi seperti `${topic()}` atau`${timestamp()}`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`payloadField`  
(Opsional) Nama kolom tempat muatan ditulis. Jika Anda menghilangkan nilai ini, payload ditulis ke kolom bernama. `payload`  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`operation`  
(Opsional) Jenis operasi yang akan dilakukan. Nilai-nilai yang valid: `INSERT`, `UPDATE`, `DELETE`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleARN`  
Peran IAM yang memungkinkan akses ke tabel DynamoDB. Untuk informasi selengkapnya, lihat [Persyaratan](#dynamodb-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

Data yang ditulis ke tabel DynamoDB adalah hasil dari pernyataan SQL aturan.

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

Contoh JSON berikut mendefinisikan tindakan DynamoDB dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="dynamodb-rule-action-see-also"></a>
+ [Apa itu Amazon DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/) di Panduan Pengembang *Amazon DynamoDB*
+ [Memulai DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) di Panduan Pengembang Amazon *DynamoDB*
+ [Tutorial: Menyimpan data perangkat dalam tabel DynamoDB](iot-ddb-rule.md)

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

Tindakan Dynamo DBv2 (`dynamoDBv2`) menulis semua atau sebagian pesan MQTT ke tabel Amazon DynamoDB. Setiap atribut dalam payload ditulis ke kolom terpisah dalam basis data DynamoDB.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `dynamodb:PutItem` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Payload pesan MQTT harus berisi kunci tingkat root yang cocok dengan kunci partisi utama tabel dan kunci tingkat root yang cocok dengan kunci sortir utama tabel, jika ditentukan.
+ Jika Anda menggunakan pelanggan yang dikelola AWS KMS key (kunci KMS) untuk mengenkripsi data saat istirahat di DynamoDB, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [kunci KMS yang Dikelola Pelanggan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-cmk-customer-managed) di Panduan Memulai *Amazon DynamoDB*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`putItem`  
Objek yang menentukan tabel DynamoDB yang data pesan akan ditulis. Objek ini harus berisi informasi berikut:    
`tableName`  
Nama dari tabel DynamoDB.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`roleARN`  
Peran IAM yang memungkinkan akses ke tabel DynamoDB. Untuk informasi selengkapnya, lihat [Persyaratan](#dynamodb-v2-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

Data yang ditulis ke tabel DynamoDB adalah hasil dari pernyataan SQL aturan.

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

Contoh JSON berikut mendefinisikan DBv2 tindakan Dynamo dalam aturan. AWS IoT 

```
{
    "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", 
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan DynamoDB dengan template substitusi dalam aturan. 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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="dynamodb-v2-rule-action-see-also"></a>
+ [Apa itu Amazon DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/) di Panduan Pengembang *Amazon DynamoDB*
+ [Memulai DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) di Panduan Pengembang Amazon *DynamoDB*

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

Tindakan Elasticsearch (`elasticsearch`) menulis data dari pesan MQTT ke domain Layanan Amazon. OpenSearch Anda kemudian dapat menggunakan alat seperti OpenSearch Dasbor untuk menanyakan dan memvisualisasikan data di OpenSearch Layanan.

**Awas**  
`Elasticsearch`Tindakan hanya dapat digunakan oleh tindakan aturan yang ada. Untuk membuat tindakan aturan baru atau memperbarui tindakan aturan yang ada, gunakan tindakan `OpenSearch` aturan sebagai gantinya. Untuk informasi selengkapnya, lihat [OpenSearch](opensearch-rule-action.md). 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `es:ESHttpPut` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan pelanggan yang dikelola AWS KMS key (kunci KMS) untuk mengenkripsi data saat istirahat OpenSearch, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [Enkripsi data saat istirahat untuk OpenSearch Layanan Amazon](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) *di Panduan Pengembang OpenSearch Layanan Amazon*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`endpoint`  
Titik akhir domain layanan Anda.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`index`  
Indeks tempat Anda ingin menyimpan data Anda.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`type`  
Jenis dokumen yang Anda simpan.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`id`  
Pengidentifikasi unik untuk setiap dokumen.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleARN`  
Peran IAM yang memungkinkan akses ke domain OpenSearch Layanan. Untuk informasi selengkapnya, lihat [Persyaratan](#elasticsearch-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan Elasticsearch dalam AWS IoT aturan dan bagaimana Anda dapat menentukan bidang untuk tindakan tersebut. `elasticsearch` Untuk informasi selengkapnya, lihat [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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan Elasticsearch dengan template substitusi dalam aturan. 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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="elasticsearch-rule-action-see-also"></a>
+ [OpenSearch](opensearch-rule-action.md)
+ [Apa itu OpenSearch Layanan Amazon?](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/)

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

Tindakan HTTPS (`http`) mengirimkan data dari pesan MQTT ke titik akhir HTTPS, yang dapat menunjuk ke aplikasi atau layanan web.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Anda harus mengonfirmasi dan mengaktifkan HTTPS titik akhir sebelum mesin aturan dapat menggunakannya. Untuk informasi selengkapnya, lihat [Tujuan aksi HTTP](http-action-destination.md).

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`url`  
Titik akhir HTTPS tempat pesan dikirim menggunakan metode HTTP POST. Jika Anda menggunakan alamat IP sebagai pengganti nama host, itu harus berupa IPv4 alamat. IPv6 alamat tidak didukung.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`confirmationUrl`  
(Opsional) Jika ditentukan, AWS IoT gunakan URL konfirmasi untuk membuat tujuan aturan topik yang cocok. Anda harus mengaktifkan tujuan tindakan HTTP sebelum menggunakannya dalam tindakan HTTP. Untuk informasi selengkapnya, lihat [Tujuan aksi HTTP](http-action-destination.md). Jika Anda menggunakan templat substitusi, Anda harus membuat tujuan tindakan HTTP secara manual sebelum `http` tindakan dapat digunakan. `confirmationUrl`harus menjadi awalan dari. `url`  
Hubungan antara `url` dan `confirmationUrl` dijelaskan sebagai berikut:  
+ Jika `url` di-hardcode dan tidak `confirmationUrl` disediakan, kami secara implisit memperlakukan bidang tersebut sebagai. `url` `confirmationUrl` AWS IoT membuat tujuan aturan topik untuk`url`.
+ Jika `url` dan `confirmationUrl` di-hardcode, `url` harus dimulai dengan. `confirmationUrl` AWS IoT membuat tujuan aturan topik untuk`confirmationUrl`.
+ Jika `url` berisi template substitusi, Anda harus menentukan `confirmationUrl` dan `url` harus mulai dengan`confirmationUrl`. Jika `confirmationUrl` berisi templat substitusi, Anda harus membuat tujuan tindakan HTTP secara manual sebelum `http` tindakan dapat digunakan. Jika `confirmationUrl` tidak berisi templat substitusi, AWS IoT buat tujuan aturan topik untuk`confirmationUrl`.
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`headers`  
(Opsional) Daftar header untuk disertakan dalam permintaan HTTP ke titik akhir. Setiap header harus berisi informasi berikut:    
`key`  
Kunci header.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak  
`value`  
Nilai header.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya
Jenis konten default adalah application/json ketika payload dalam format JSON. Jika tidak, itu adalah application/octet-stream. Anda dapat menimpa dengan menentukan jenis konten yang tepat di header dengan tipe konten kunci (case insensitive). 

`auth`  
(Opsional) Otentikasi yang digunakan oleh mesin aturan untuk terhubung ke URL titik akhir yang ditentukan dalam argumen. `url` Saat ini, Signature Version 4 adalah satu-satunya jenis otentikasi yang didukung. Untuk informasi selengkapnya, lihat [Otorisasi HTTP](https://docs.aws.amazon.com/iot/latest/apireference/API_HttpAuthorization.html).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`enableBatching`  
(Opsional) Apakah akan memproses pesan tindakan HTTP menjadi satu permintaan untuk url yang diberikan. Nilai bisa benar atau salah. Untuk informasi selengkapnya tentang pengelompokan, lihat [Mengelompokkan pesan tindakan HTTP](http_batching.md).  
Nilai Boolean  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`batchConfig`  
(Opsional) Pengaturan konfigurasi untuk batching. Setelah diaktifkan, `batchConfig` parameter harus ditentukan. Jika `batchConfig` parameter tidak ditentukan, nilai default akan digunakan.    
`maxBatchOpenMs`  
Jumlah waktu maksimum (dalam milidetik) pesan keluar menunggu pesan lain untuk membuat batch. Semakin tinggi pengaturan, semakin lama latensi tindakan HTTP batch.  
Nilai Minimum: 5 ms. Nilai Maksimum: 200 ms.  
Nilai Default: 20 ms  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak  
`maxBatchSize`  
Jumlah maksimum pesan yang dikumpulkan bersama dalam satu eksekusi tindakan.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak  
Nilai Minimum: 2 pesan. Nilai Maksimum: 10 pesan  
Nilai Default: 10 pesan  
`maxBatchSizeBytes`  
Ukuran maksimum kumpulan pesan, dalam byte.  
Nilai Minimum: 100 byte. Nilai Maksimum: 131.072 byte  
Nilai Default: 5.120 byte  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak
Jenis konten default adalah application/json ketika payload dalam format JSON. Jika tidak, itu adalah application/octet-stream. Anda dapat menimpa dengan menentukan jenis konten yang tepat di header dengan tipe konten kunci (case insensitive). 

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

Contoh JSON berikut mendefinisikan AWS IoT aturan dengan tindakan HTTP.

```
{
    "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
        }
}
```

## Logika coba lagi tindakan HTTP
<a name="https-rule-action-retry-logic"></a>

Mesin AWS IoT aturan mencoba ulang tindakan HTTP sesuai dengan aturan ini:
+ Mesin aturan mencoba mengirim pesan setidaknya sekali.
+ Mesin aturan mencoba ulang paling banyak dua kali. Jumlah percobaan maksimum adalah tiga.
+ Mesin aturan tidak mencoba lagi jika:
  + Percobaan sebelumnya memberikan respons yang lebih besar dari 16.384 byte.
  + Layanan web hilir atau aplikasi menutup koneksi TCP setelah mencoba.
  + Total waktu untuk menyelesaikan permintaan dengan percobaan ulang melebihi batas batas waktu permintaan.
  + Permintaan mengembalikan kode status HTTP selain 429, 500-599.

**catatan**  
[Biaya transfer data standar](https://aws.amazon.com/ec2/pricing/on-demand/) berlaku untuk percobaan ulang.

## Lihat juga
<a name="https-rule-action-see-also"></a>
+ [Menempatkan pesan tindakan HTTP dalam batch](http_batching.md)
+ [Tujuan aksi HTTP](http-action-destination.md)
+ [Rutekan data langsung dari AWS IoT Core ke layanan web Anda](https://aws.amazon.com/blogs/iot/route-data-directly-from-iot-core-to-your-web-services/) di *Internet of Things di AWS* blog

# Menempatkan pesan tindakan HTTP dalam batch
<a name="http_batching"></a>

Anda dapat menggunakan batching untuk mengirim beberapa pesan tindakan HTTP dalam satu permintaan.

## Ikhtisar
<a name="batching_overview"></a>

Batching memungkinkan Anda mengirim pesan dari AWS IoT Core Rules Engine ke endpoint HTTP Anda dalam batch. Fungsionalitas ini dapat membantu mengurangi biaya Anda dengan menurunkan jumlah eksekusi tindakan HTTP serta meningkatkan efisiensi dengan mengurangi overhead yang terkait dengan membangun koneksi baru.

**catatan**  
Tindakan HTTP batch diukur sebagai tindakan tunggal. Anda diukur dengan penambahan 5 KiB, berdasarkan ukuran payload batch keluar yang dipancarkan oleh Rules Engine ke layanan hilir. AWS IoT Core Untuk informasi lebih lanjut, lihat halaman [harga AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

Saat Anda mengaktifkan batching dalam definisi Tindakan Aturan IoT Anda, parameter berikut akan tersedia untuk konfigurasi:

`maxBatchOpenMs`  
Jumlah waktu maksimum (dalam milidetik) pesan keluar menunggu pesan lain untuk membuat batch. Semakin tinggi pengaturan, semakin lama latensi tindakan HTTP batch.  
Nilai Minimum: 5 ms. Nilai Maksimum: 200 ms.  
Nilai Default: 20 ms  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`maxBatchSize`  
Jumlah maksimum pesan yang dikumpulkan bersama dalam satu eksekusi tindakan aturan IoT.  
Nilai Minimum: 2 pesan. Nilai Maksimum: 10 pesan  
Nilai Default: 10 pesan  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`maxBatchSizeBytes`  
Ukuran maksimum kumpulan pesan, dalam byte.  
Nilai Minimum: 100 byte. Nilai Maksimum: 131.072 byte  
Nilai Default: 5120 byte  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

**penting**  
Saat Anda menentukan beberapa parameter batch, batching selesai saat batas pertama tercapai. Misalnya, jika Anda menentukan 100 ms sebagai Waktu Buka Batch Maksimum dan 5 KiB sebagai Ukuran Batch Maksimum, dan Batch Rules Engine hanya 2 KiB dalam 100 ms, maka batch 2 KiB akan dibuat dan dikirim.

## Menggunakan header HTTP dalam batch
<a name="batching_http_headers"></a>

Saat Anda menggunakan header dalam tindakan HTTP Anda, permintaan batch menggunakan nilai header dari pesan terakhir yang ditambahkan ke batch (belum tentu pesan terakhir yang Anda terbitkan). Kami merekomendasikan menggunakan nilai header yang:
+ Identik di semua pesan dalam batch
+ Berlaku untuk semua pesan (misalnya, kredensi otentikasi)

Header dikirim dengan permintaan HTTP dan bukan bagian dari badan pesan.

**catatan**  
Saat batching diaktifkan:  
Permintaan batch secara otomatis menyertakan `Content-Type: application/json` header, karena batch dikirim sebagai array JSON.
Kami tidak dapat menjamin bahwa pesan terakhir dalam batch adalah pesan terakhir yang Anda terbitkan. Ini adalah pesan terakhir yang berhasil masuk ke dalam batch.

## Contoh Muatan
<a name="batching_payload"></a>

Contoh berikut menunjukkan struktur payload pesan batch yang dikirim ke titik akhir HTTP Anda:

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

## Batasan
<a name="batching_limitations"></a>

Berikut ini adalah batasan batching:
+ AWS IoT Core tidak menjamin pemesanan pesan secara keseluruhan. Batching dilakukan secara lokal pada setiap host, yang dapat mengakibatkan pesan dalam batch diproses dalam urutan yang berbeda dari yang diterima.
+ AWS IoT Core tidak menyediakan dukungan pemrosesan pesan di sisi penerima. Anda bertanggung jawab untuk memastikan bahwa layanan hilir Anda dikonfigurasi untuk menerima dan memproses data dalam batch.
+ Batching lintas akun tidak didukung, bahkan jika pesan ditujukan untuk pengenal sumber daya yang sama (URL HTTP atau ARN sumber daya).
+ AWS IoT Core tidak menjamin bahwa ukuran batch akan memenuhi konfigurasi yang Anda tentukan. Batch mungkin lebih kecil dari batas yang dikonfigurasi berdasarkan waktu dan alur pesan.
+ Saat batching diaktifkan, muatan biner (data non-UTF-8) tidak didukung. Hanya muatan teks UTF-8 (seperti JSON) yang diterima. Untuk mengirim data biner, base64 menyandikannya sebelum mengirimnya ke aksi HTTP, dan kemudian mendekodekannya di titik akhir penerima Anda. Misalnya, Anda dapat menggunakan [fungsi encode](iot-sql-functions.html#iot-function-encode) dalam aturan IoT untuk menyandikan payload biner. Atau, Anda dapat menyandikan payload biner di perangkat IoT Anda dan mempublikasikannya ke. AWS IoT Core

## Tindakan Kesalahan untuk Batching
<a name="batching_errors"></a>

Anda tidak akan dapat mendefinisikan logika batching terpisah dalam definisi Tindakan Kesalahan Anda. Namun, Error Action Anda akan mendukung batching jika Anda telah menentukan logika batching di Action utama Anda.

Ketika permintaan batch gagal, mesin AWS IoT Core Rules akan mengikuti [logika coba lagi tindakan HTTP](https-rule-action.md#https-rule-action-retry-logic). Setelah percobaan ulang terakhir, tindakan kesalahan akan dipanggil untuk seluruh batch yang gagal.

Berikut ini adalah contoh pesan tindakan kesalahan dengan batching diaktifkan:

```
{
    "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"
        }
    ]
}
```

**catatan**  
Kegagalan tindakan batch juga menghasilkan muatan tindakan kesalahan yang lebih besar yang dapat meningkatkan kemungkinan kegagalan tindakan kesalahan karena ukurannya. Anda dapat memantau kegagalan tindakan kesalahan menggunakan `ErrorActionFailure` metrik. Untuk informasi selengkapnya, lihat [Metrik tindakan aturan](metrics_dimensions.md#rule-action-metrics).

## Mengelompokkan pesan tindakan HTTP dengan AWS CLI
<a name="batching_procedure"></a>

### Membuat atau memperbarui tindakan aturan dengan batching
<a name="batching_create_update_rule"></a>

1. Gunakan AWS CLI perintah yang sesuai untuk membuat atau memperbarui aturan:
   + Untuk membuat aturan baru, gunakan [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)perintah:

     ```
     aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```
   + Untuk memperbarui aturan yang ada, gunakan [replace-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html)perintah:

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

1. Aktifkan kemampuan batching dengan menyetel parameter enableBatching ke true di payload aturan topik Anda:

   ```
   {
           "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. Konfigurasikan parameter batching. Anda tidak perlu menentukan semua parameter batch. Anda dapat memilih untuk menentukan 1, 2, atau semua 3 parameter batch. Jika Anda tidak menentukan parameter batch, Rules Engine akan memperbarui parameter itu dengan nilai default. Untuk informasi selengkapnya tentang parameter batching dan nilai defaultnya, lihat [parameter HTTP](https-rule-action.md#https-rule-action-parameters).

# Tujuan aksi HTTP
<a name="http-action-destination"></a>

Tujuan tindakan HTTP adalah layanan web tempat mesin aturan dapat merutekan data dari aturan topik. AWS IoT Core Sumber daya menjelaskan layanan web untuk AWS IoT. Sumber daya tujuan dapat dibagi dengan aturan yang berbeda.

Sebelum AWS IoT Core dapat mengirim data ke layanan web lain, itu harus mengkonfirmasi bahwa ia dapat mengakses titik akhir layanan.

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

Tujuan tindakan HTTP mengacu pada layanan web yang mendukung URL konfirmasi dan satu atau lebih pengumpulan data URLs. Sumber daya tujuan berisi URL konfirmasi layanan web Anda. Saat Anda mengonfigurasi tindakan HTTP, Anda menentukan URL sebenarnya dari titik akhir yang seharusnya menerima data bersama dengan URL konfirmasi layanan web. Setelah tujuan Anda dikonfirmasi, aturan topik mengirimkan hasil pernyataan SQL ke titik akhir HTTPS (dan bukan ke URL konfirmasi).

Tujuan tindakan HTTP dapat berada di salah satu status berikut:

ENABLED  
Tujuan telah dikonfirmasi dan dapat digunakan oleh tindakan aturan. Tujuan harus berada di `ENABLED` negara bagian agar dapat digunakan dalam suatu aturan. Anda hanya dapat mengaktifkan tujuan yang dalam status DISABLED.

DISABLED  
Tujuan telah dikonfirmasi tetapi tidak dapat digunakan oleh tindakan aturan. Ini berguna jika Anda ingin mencegah sementara lalu lintas ke titik akhir Anda tanpa harus melalui proses konfirmasi lagi. Anda hanya dapat menonaktifkan tujuan yang berada dalam status ENABLED.

IN\$1PROGRESS  
Konfirmasi tujuan sedang berlangsung.

ERROR  
Konfirmasi tujuan habis waktu.

Setelah tujuan tindakan HTTP telah dikonfirmasi dan diaktifkan, itu dapat digunakan dengan aturan apa pun di akun Anda.

## Mengelola tujuan tindakan HTTP
<a name="http-action-destination-managing"></a>

Anda dapat menggunakan operasi berikut untuk mengelola tujuan tindakan HTTP Anda.

### Membuat tujuan aksi HTTP
<a name="http-action-destination-creating"></a>

Anda membuat tujuan tindakan HTTP dengan memanggil `CreateTopicRuleDestination` operasi atau dengan menggunakan AWS IoT konsol.

Setelah Anda membuat tujuan, AWS IoT kirimkan permintaan konfirmasi ke URL konfirmasi. Permintaan konfirmasi memiliki format berikut:

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

Isi permintaan konfirmasi mencakup informasi berikut:

arn  
Nama Sumber Daya Amazon (ARN) untuk tujuan tindakan HTTP untuk mengonfirmasi.

confirmationToken  
Token konfirmasi yang dikirim oleh AWS IoT Core. Token dalam contoh terpotong. Token Anda akan lebih lama. Anda memerlukan token ini untuk mengonfirmasi tujuan Anda AWS IoT Core.

enableUrl  
URL yang Anda telusuri untuk mengonfirmasi tujuan aturan topik.

messageType  
Jenis pesan.

### Mengonfirmasi tujuan tindakan HTTP
<a name="http-action-destination-confirming"></a>

Untuk menyelesaikan proses konfirmasi titik akhir, jika Anda menggunakan AWS CLI, Anda harus melakukan langkah-langkah berikut setelah URL konfirmasi Anda menerima permintaan konfirmasi.

1. 

**Konfirmasikan bahwa tujuan siap menerima pesan**  
Untuk mengonfirmasi bahwa tujuan tindakan HTTP siap menerima pesan IoT, hubungi permintaan konfirmasi, atau lakukan operasi `ConfirmTopicRuleDestination` API dan teruskan `confirmationToken` dari permintaan konfirmasi. `enableUrl`

1. 

**Tetapkan status aturan topik ke diaktifkan**  
Setelah mengonfirmasi bahwa tujuan dapat menerima pesan, Anda harus menjalankan operasi `UpdateTopicRuleDestination` API untuk menyetel status aturan topik`ENABLED`.

Jika Anda menggunakan AWS IoT konsol, salin `confirmationToken` dan tempel ke dialog konfirmasi tujuan di AWS IoT konsol. Anda kemudian dapat mengaktifkan aturan topik.

### Mengirim permintaan konfirmasi baru
<a name="trigger-confirm"></a>

Untuk mengaktifkan pesan konfirmasi baru untuk tujuan, panggil `UpdateTopicRuleDestination` dan setel status tujuan aturan topik ke`IN_PROGRESS`. 

Ulangi proses konfirmasi setelah Anda mengirim permintaan konfirmasi baru.

### Menonaktifkan dan menghapus tujuan tindakan HTTP
<a name="http-action-destination-deleting"></a>

Untuk menonaktifkan tujuan, panggil `UpdateTopicRuleDestination` dan setel status tujuan aturan topik ke`DISABLED`. Aturan topik dalam status DISABLED dapat diaktifkan lagi tanpa perlu mengirim permintaan konfirmasi baru.

Untuk menghapus tujuan tindakan HTTP, panggil`DeleteTopicRuleDestination`.

## Dukungan Otoritas Sertifikat
<a name="http-action-destination-certificates"></a>

**catatan**  
Sertifikat yang ditandatangani sendiri tidak didukung. 

 Titik Akhir HTTPS dalam tujuan tindakan HTTP mendukung sertifikat yang dikeluarkan oleh [AWS Private Certificate Authority](https://www.amazontrust.com/repository/) dan [Lets Encrypt](https://letsencrypt.org/certificates/). 

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

Tindakan AWS IoT Events (`iotEvents`) mengirimkan data dari pesan MQTT ke input. AWS IoT Events 

**penting**  
Jika payload dikirim ke AWS IoT Core tanpa`Input attribute Key`, atau jika kunci tidak berada di jalur JSON yang sama yang ditentukan dalam kunci, itu akan menyebabkan aturan IoT gagal dengan kesalahan. `Failed to send message to Iot Events`

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `iotevents:BatchPutMessage` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`batchMode`  
(Opsional) Apakah akan memproses tindakan acara sebagai batch. Nilai default-nya adalah `false`.  
`batchMode`Kapan `true` dan pernyataan aturan SQL mengevaluasi ke Array, setiap elemen Array diperlakukan sebagai pesan terpisah ketika dikirim ke AWS IoT Acara dengan memanggil. [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) Array yang dihasilkan tidak dapat memiliki lebih dari 10 pesan.  
`batchMode`Kapan`true`, Anda tidak dapat menentukan`messageId`.   
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`inputName`  
Nama AWS IoT Events input.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`messageId`  
(Opsional) Gunakan ini untuk memverifikasi bahwa hanya satu input (pesan) dengan yang `messageId` diberikan diproses oleh AWS IoT Events detektor. Anda dapat menggunakan template `${newuuid()}` substitusi untuk menghasilkan ID unik untuk setiap permintaan.  
Saat `batchMode` adalah `true`, Anda tidak dapat menentukan `messageId`—nilai UUID baru akan diberikan.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Peran IAM yang memungkinkan AWS IoT untuk mengirim input ke AWS IoT Events detektor. Untuk informasi selengkapnya, lihat [Persyaratan](#iotevents-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan IoT Events dalam sebuah aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="iotevents-rule-action-see-also"></a>
+ [Apa itu AWS IoT Events?](https://docs.aws.amazon.com/iotevents/latest/developerguide/) di *Panduan AWS IoT Events Pengembang*

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

Tindakan AWS IoT SiteWise (`iotSiteWise`) mengirimkan data dari pesan MQTT ke properti aset di. AWS IoT SiteWise

Anda dapat mengikuti tutorial yang menunjukkan cara menelan data dari AWS IoT berbagai hal. Untuk informasi selengkapnya, lihat tutorial [Menelan data ke AWS IoT SiteWise dari AWS IoT hal-hal](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/ingest-data-from-iot-things.html) atau bagian [Menyerap data menggunakan aturan AWS IoT Inti](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/iot-rules.html) di *AWS IoT SiteWise Panduan Pengguna*.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `iotsitewise:BatchPutAssetPropertyValue` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Anda dapat melampirkan contoh kebijakan kepercayaan berikut ke peran tersebut.  
****  

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

  Untuk meningkatkan keamanan, Anda dapat menentukan jalur hierarki AWS IoT SiteWise aset di `Condition` properti. Contoh berikut adalah kebijakan kepercayaan yang menentukan jalur hierarki aset.  
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "iotsitewise:BatchPutAssetPropertyValue",
              "Resource": "*",
              "Condition": {
                  "StringLike": {
                      "iotsitewise:assetHierarchyPath": [
                          "/root node asset ID",
                          "/root node asset ID/*"
                      ]
              }
          }
          }
      ]
  }
  ```
+ Saat Anda mengirim data AWS IoT SiteWise dengan tindakan ini, data Anda harus memenuhi persyaratan `BatchPutAssetPropertyValue` operasi. Untuk informasi selengkapnya, lihat [BatchPutAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_BatchPutAssetPropertyValue.html) di dalam *Referensi API AWS IoT SiteWise *. 

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`putAssetPropertyValueEntries`  
Daftar entri nilai properti aset yang masing-masing berisi informasi berikut:    
`propertyAlias`  
(Opsional) Alias properti yang terkait dengan properti aset Anda. Tentukan salah satu `propertyAlias` atau keduanya `assetId` dan a`propertyId`. *Untuk informasi selengkapnya tentang alias properti, lihat [Memetakan aliran data industri ke properti aset di Panduan](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html) Pengguna.AWS IoT SiteWise *  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`assetId`  
(Opsional) ID AWS IoT SiteWise aset. Tentukan salah satu `propertyAlias` atau keduanya `assetId` dan a`propertyId`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`propertyId`  
(Opsional) ID properti aset. Tentukan salah satu `propertyAlias` atau keduanya `assetId` dan a`propertyId`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`entryId`  
(Opsional) Pengidentifikasi unik untuk entri ini. Tentukan `entryId` untuk melacak pesan mana yang menyebabkan kesalahan dengan lebih baik jika terjadi kegagalan. Default untuk UUID baru.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`propertyValues`  
Daftar nilai properti untuk disisipkan yang masing-masing berisi stempel waktu, kualitas, dan nilai (TQV) dalam format berikut:    
`timestamp`  
Struktur stempel waktu yang berisi informasi berikut:    
`timeInSeconds`  
Sebuah string yang berisi waktu dalam detik dalam waktu epoch Unix. Jika payload pesan Anda tidak memiliki stempel waktu, Anda dapat menggunakan[stempel waktu ()](iot-sql-functions.md#iot-function-timestamp), yang mengembalikan waktu saat ini dalam milidetik. Untuk mengonversi waktu itu menjadi detik, Anda dapat menggunakan templat substitusi berikut:**\$1\$1floor(timestamp() / 1E3)\$1**.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`offsetInNanos`  
(Opsional) String yang berisi offset waktu nanodetik dari waktu dalam detik. Jika payload pesan Anda tidak memiliki stempel waktu, Anda dapat menggunakan[stempel waktu ()](iot-sql-functions.md#iot-function-timestamp), yang mengembalikan waktu saat ini dalam milidetik. Untuk menghitung offset nanodetik sejak saat itu, Anda dapat menggunakan templat substitusi berikut:. **\$1\$1(timestamp() % 1E3) \$1 1E6\$1**  
Mendukung [template substitusi](iot-substitution-templates.md): Ya
Mengenai waktu epoch Unix, hanya AWS IoT SiteWise menerima entri yang memiliki stempel waktu hingga 7 hari di masa lalu hingga 5 menit di masa depan.  
`quality`  
(Opsional) String yang menggambarkan kualitas nilai. Nilai-nilai yang valid: `GOOD`, `BAD`, `UNCERTAIN`.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`value`  
Struktur nilai yang berisi salah satu bidang nilai berikut, tergantung pada tipe data properti aset:    
`booleanValue`  
(Opsional) Sebuah string yang berisi nilai Boolean dari entri nilai.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`doubleValue`  
(Opsional) String yang berisi nilai ganda dari entri nilai.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`integerValue`  
(Opsional) Sebuah string yang berisi nilai integer dari entri nilai.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya  
`stringValue`  
(Opsional) Nilai string dari entri nilai.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
ARN dari peran IAM yang memberikan AWS IoT izin untuk mengirim nilai properti aset ke. AWS IoT SiteWise Untuk informasi selengkapnya, lihat [Persyaratan](#iotsitewise-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan SiteWise tindakan IoT dasar dalam sebuah aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan SiteWise tindakan IoT dalam sebuah aturan. AWS IoT Contoh ini menggunakan topik sebagai alias properti dan `timestamp()` fungsi. Misalnya, jika Anda mempublikasikan data ke`/company/windfarm/3/turbine/7/rpm`, tindakan ini mengirimkan data ke properti aset dengan alias properti yang sama dengan topik yang Anda tentukan.

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="iotsitewise-rule-action-see-also"></a>
+ [Apa itu AWS IoT SiteWise?](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) dalam *AWS IoT SiteWise Panduan Penggguna*
+ [Menelan data menggunakan AWS IoT Core aturan](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/iot-rules.html) di *AWS IoT SiteWise Panduan Pengguna*
+ [Menelan data AWS IoT SiteWise dari AWS IoT hal-hal](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/ingest-data-from-iot-things.html) di *AWS IoT SiteWise Panduan Pengguna*
+ [Memecahkan masalah tindakan AWS IoT SiteWise aturan](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/troubleshoot-rule.html) *di Panduan Pengguna AWS IoT SiteWise *

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

Tindakan Firehose (`firehose`) mengirimkan data dari pesan MQTT ke aliran Amazon Data Firehose. 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `firehose:PutRecord` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan Firehose untuk mengirim data ke bucket Amazon S3, dan Anda menggunakan pelanggan AWS KMS yang AWS KMS key berhasil mengenkripsi data saat istirahat di Amazon S3, Firehose harus memiliki akses ke bucket Anda dan izin untuk menggunakan atas nama pemanggil. AWS KMS key Untuk informasi selengkapnya, lihat [Memberikan akses Firehose ke tujuan Amazon S3](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3) di Panduan Pengembang *Amazon Data Firehose*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`batchMode`  
(Opsional) Apakah akan mengirimkan aliran Firehose sebagai batch dengan menggunakan. [https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html) Nilai default-nya adalah `false`.  
`batchMode`Kapan `true` dan pernyataan SQL aturan mengevaluasi ke Array, setiap elemen Array membentuk satu catatan dalam permintaan. `PutRecordBatch` Array yang dihasilkan tidak dapat memiliki lebih dari 500 record.   
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`deliveryStreamName`  
Aliran Firehose untuk menulis data pesan.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`separator`  
(Opsional) Pemisah karakter yang digunakan untuk memisahkan catatan yang ditulis ke aliran Firehose. Jika Anda menghilangkan parameter ini, aliran tidak menggunakan pemisah. Nilai yang valid: `,` (koma), `\t` (tab), `\n` (baris baru), `\r\n` (baris baru Windows).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`roleArn`  
Peran IAM yang memungkinkan akses ke aliran Firehose. Untuk informasi selengkapnya, lihat [Persyaratan](#kinesis-firehose-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan Firehose dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ] 
    }
}
```

Contoh JSON berikut mendefinisikan tindakan Firehose dengan template substitusi dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="kinesis-firehose-rule-action-see-also"></a>
+ [Apa itu Amazon Data Firehose?](https://docs.aws.amazon.com/firehose/latest/dev/) di Panduan *Pengembang Firehose Data Amazon*

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

Tindakan Kinesis Data `kinesis` Streams () menulis data dari pesan MQTT ke Amazon Kinesis Data Streams. 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `kinesis:PutRecord` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan kunci AWS KMS key KMS yang AWS KMS dikelola pelanggan untuk mengenkripsi data saat istirahat di Kinesis Data Streams, layanan harus memiliki izin untuk menggunakan atas nama pemanggil. AWS KMS key Untuk informasi selengkapnya, lihat [Izin untuk menggunakan buatan pengguna AWS KMS keys di Panduan Pengembang](https://docs.aws.amazon.com/streams/latest/dev/permissions-user-key-KMS.html) *Amazon Kinesis Data Streams*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`stream`  
Aliran data Kinesis untuk menulis data.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`partitionKey`  
Kunci partisi yang digunakan untuk menentukan pecahan data mana yang ditulis. Kunci partisi biasanya terdiri dari ekspresi (misalnya, `${topic()}` atau`${timestamp()}`).  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
ARN dari peran IAM yang memberikan AWS IoT izin untuk mengakses aliran data Kinesis. Untuk informasi selengkapnya, lihat [Persyaratan](#kinesis-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan Kinesis Data Streams dalam sebuah aturan. AWS IoT 

```
{
    "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"
                }
            }
        ] 
    }
}
```

Contoh JSON berikut mendefinisikan tindakan Kinesis dengan template substitusi dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="kinesis-rule-action-see-also"></a>
+ [Apa itu Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/) di Panduan Pengembang *Amazon Kinesis Data Streams*

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

Tindakan Lambda (`lambda`) memanggil AWS Lambda fungsi, meneruskan pesan MQTT. AWS IoT memanggil fungsi Lambda secara asinkron.

Anda dapat mengikuti tutorial yang menunjukkan cara membuat dan menguji aturan dengan tindakan Lambda. Untuk informasi selengkapnya, lihat [Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda](iot-lambda-rule.md).

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+  AWS IoT Untuk menjalankan fungsi Lambda, Anda harus mengonfigurasi kebijakan yang memberikan izin`lambda:InvokeFunction`. AWS IoT Anda hanya dapat menjalankan fungsi Lambda yang ditentukan Wilayah AWS sama di mana kebijakan Lambda Anda ada. Fungsi Lambda menggunakan kebijakan berbasis sumber daya, jadi Anda harus melampirkan kebijakan ke fungsi Lambda itu sendiri. 

  Gunakan AWS CLI perintah berikut untuk melampirkan kebijakan yang memberikan `lambda:InvokeFunction` izin. Dalam perintah ini, ganti:
  + *function\$1name*dengan nama fungsi Lambda. Anda menambahkan izin baru untuk memperbarui kebijakan sumber daya fungsi.
  + *region*dengan Wilayah AWS fungsi tersebut.
  + *account-id*dengan Akun AWS nomor di mana aturan didefinisikan.
  + *rule-name*dengan nama AWS IoT aturan yang Anda definisikan tindakan Lambda.
  + *unique\$1id*dengan pengidentifikasi pernyataan unik.
**penting**  
Jika Anda menambahkan izin untuk AWS IoT prinsipal tanpa memberikan `source-arn` atau`source-account`, apa pun Akun AWS yang membuat aturan dengan tindakan Lambda Anda dapat mengaktifkan aturan untuk menjalankan fungsi Lambda Anda. AWS IoT

  Untuk informasi selengkapnya, lihat [izin AWS Lambda](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"
  ```
+ Jika Anda menggunakan AWS IoT konsol untuk membuat aturan untuk tindakan aturan Lambda, fungsi Lambda dipicu secara otomatis. Jika Anda menggunakan AWS CloudFormation sebagai gantinya dengan [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), Anda harus menambahkan [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)sumber daya. Sumber daya kemudian memberi Anda izin untuk memicu fungsi Lambda.

  Kode berikut menunjukkan contoh cara menambahkan sumber daya ini. Dalam contoh ini, ganti:
  + *function\$1name*dengan nama fungsi Lambda.
  + *region*dengan Wilayah AWS fungsi tersebut.
  + *account-id*dengan Akun AWS nomor di mana aturan didefinisikan.
  + *rule-name*dengan nama AWS IoT aturan yang Anda definisikan tindakan Lambda.

  ```
  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
  ```
+ Jika Anda menggunakan AWS KMS pelanggan yang AWS KMS key berhasil mengenkripsi data saat istirahat di Lambda, layanan harus memiliki izin untuk menggunakan atas AWS KMS key nama penelepon. Untuk informasi lebih lanjut, lihat [Enkripsi saat diam](https://docs.aws.amazon.com/lambda/latest/dg/security-dataprotection.html#security-privacy-atrest) di *Panduan Developer AWS Lambda *.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`functionArn`  
ARN dari fungsi Lambda untuk memanggil. AWS IoT harus memiliki izin untuk menjalankan fungsi. Untuk informasi selengkapnya, lihat [Persyaratan](#lambda-rule-action-requirements).  
Jika Anda tidak menentukan versi atau alias untuk fungsi Lambda Anda, versi terbaru dari fungsi tersebut dimatikan. Anda dapat menentukan versi atau alias jika Anda ingin mematikan versi tertentu dari fungsi Lambda Anda. Untuk menentukan versi atau alias, tambahkan versi atau alias ke ARN dari fungsi Lambda.  

```
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias
```
Untuk informasi selengkapnya tentang pembuatan versi dan alias, dan lihat [versi AWS Lambda fungsi](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html) dan alias.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

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

Contoh JSON berikut mendefinisikan tindakan Lambda dalam aturan. AWS IoT 

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

Contoh JSON berikut mendefinisikan tindakan Lambda dengan template substitusi dalam aturan. AWS IoT 

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

## Lihat juga
<a name="lambda-rule-action-see-also"></a>
+ [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/) di *Panduan AWS Lambda Pengembang*
+ [Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda](iot-lambda-rule.md)

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

Tindakan Location (`location`) mengirimkan data lokasi geografis Anda ke [Amazon Location Service](https://docs.aws.amazon.com//location/latest/developerguide/welcome.html).

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `geo:BatchUpdateDevicePosition` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`deviceId`  
ID unik perangkat yang menyediakan data lokasi. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com//location/latest/APIReference/API_DevicePositionUpdate.html](https://docs.aws.amazon.com//location/latest/APIReference/API_DevicePositionUpdate.html)dari *Referensi API Amazon Location Service*.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`latitude`  
String yang mengevaluasi nilai ganda yang mewakili garis lintang lokasi perangkat.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`longitude`  
String yang mengevaluasi nilai ganda yang mewakili bujur lokasi perangkat.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Peran IAM yang memungkinkan akses ke domain Amazon Location Service. Untuk informasi selengkapnya, lihat [Persyaratan](#location-rule-action-requirements). 

`timestamp`  
Waktu data lokasi diambil sampelnya. Nilai default adalah waktu pesan MQTT diproses.  
`timestamp`Nilai terdiri dari dua nilai berikut:  
+ `value`: Ekspresi yang mengembalikan nilai waktu epoch yang panjang. Anda dapat menggunakan [time\$1to\$1epoch (String, String)](iot-sql-functions.md#iot-sql-function-time-to-epoch) fungsi ini untuk membuat stempel waktu yang valid dari nilai tanggal atau waktu yang diteruskan dalam payload pesan. Mendukung [template substitusi](iot-substitution-templates.md): Ya.
+ `unit`: (Opsional) Ketepatan nilai stempel waktu yang dihasilkan dari ekspresi yang dijelaskan dalam. `value` Nilai yang valid: `SECONDS` \$1 `MILLISECONDS` \$1 `MICROSECONDS` \$1`NANOSECONDS`. Nilai default-nya `MILLISECONDS`. Mendukung [template substitusi](iot-substitution-templates.md): API dan AWS CLI hanya.

`trackerName`  
Nama sumber daya pelacak di Amazon Lokasi di mana lokasi diperbarui. Untuk informasi selengkapnya, lihat [Tracker](https://docs.aws.amazon.com//location/latest/developerguide/geofence-tracker-concepts.html#tracking-overview) dari *Amazon Location Service Developer Guide*.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

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

Contoh JSON berikut mendefinisikan tindakan Lokasi dalam aturan. AWS IoT 

```
{
	"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"
				}
			}
		]
	}
}
```

Contoh JSON berikut mendefinisikan tindakan Lokasi dengan template substitusi dalam aturan. AWS IoT 

```
{
	"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)}"
				}
			}
		]
	}
}
```

Contoh payload MQTT berikut menunjukkan bagaimana template substitusi dalam contoh sebelumnya mengakses data. Anda dapat menggunakan perintah [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 untuk memverifikasi bahwa data payload MQTT dikirimkan di pelacak lokasi Anda.

```
{
	"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"
		}
	]
}
```

## Lihat juga
<a name="location-rule-action-see-also"></a>
+ [Apa itu Amazon Location Service?](https://docs.aws.amazon.com//location/latest/developerguide/welcome.html) di *Panduan Pengembang Layanan Lokasi Amazon*.

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

Tindakan OpenSearch (`openSearch`) menulis data dari pesan MQTT ke domain Layanan Amazon OpenSearch . Anda kemudian dapat menggunakan alat seperti OpenSearch Dasbor untuk menanyakan dan memvisualisasikan data di OpenSearch Layanan.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `es:ESHttpPut` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan pelanggan yang AWS KMS key berhasil mengenkripsi data saat istirahat di OpenSearch Layanan, layanan harus memiliki izin untuk menggunakan kunci KMS atas nama pemanggil. Untuk informasi selengkapnya, lihat [Enkripsi data saat istirahat untuk OpenSearch Layanan Amazon](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) *di Panduan Pengembang OpenSearch Layanan Amazon*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`endpoint`  
Titik akhir domain OpenSearch Layanan Amazon Anda.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`index`  
 OpenSearch Indeks tempat Anda ingin menyimpan data Anda.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`type`  
Jenis dokumen yang Anda simpan.   
Untuk OpenSearch versi yang lebih lambat dari 1.0, nilai `type` parameter harus`_doc`. Lihat informasi yang lebih lengkap dalam [dokumentasi OpenSearch ](https://opensearch.org/docs/1.0/opensearch/rest-api/document-apis/index-document/#response-body-fields).
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`id`  
Pengidentifikasi unik untuk setiap dokumen.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleARN`  
Peran IAM yang memungkinkan akses ke domain OpenSearch Layanan. Untuk informasi selengkapnya, lihat [Persyaratan](#opensearch-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Tindakan OpenSearch (`openSearch`) tidak dapat digunakan untuk mengirimkan data ke klaster VPC Elasticsearch.

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

Contoh JSON berikut mendefinisikan OpenSearch tindakan dalam AWS IoT aturan dan bagaimana Anda dapat menentukan bidang untuk tindakan. `OpenSearch` Untuk informasi selengkapnya, lihat [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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan OpenSearch tindakan dengan template substitusi dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

**catatan**  
`type`Bidang yang diganti berfungsi untuk OpenSearch versi 1.0. Untuk versi apa pun yang lebih lambat dari 1.0, nilai `type` harus`_doc`.

## Lihat juga
<a name="opensearch-rule-action-see-also"></a>

[Apa itu OpenSearch Layanan Amazon?](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/) di *Panduan Pengembang OpenSearch Layanan Amazon*

# Publikasikan ulang
<a name="republish-rule-action"></a>

Tindakan republish (`republish`) menerbitkan kembali pesan MQTT ke topik MQTT lainnya.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `iot:Publish` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`headers`  
Informasi header MQTT Versi 5.0.  
Untuk informasi selengkapnya, lihat [RepublishAction](https://docs.aws.amazon.com//iot/latest/apireference/API_RepublishAction.html)dan [MqttHeaders](https://docs.aws.amazon.com//iot/latest/apireference/API_MqttHeaders.html)di *Referensi AWS API*.

`topic`  
Topik MQTT untuk menerbitkan ulang pesan.  
Untuk menerbitkan ulang ke topik yang dicadangkan, yang dimulai dengan`$`, gunakan `$$` sebagai gantinya. Misalnya, untuk menerbitkan ulang ke topik bayangan perangkat`$aws/things/MyThing/shadow/update`, tentukan topik sebagai`$$aws/things/MyThing/shadow/update`.  
Penerbitan ulang ke [topik pekerjaan yang dicadangkan](reserved-topics.md#reserved-topics-job) tidak didukung.   
AWS IoT Device Defender topik cadangan tidak mendukung publikasi HTTP.
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`qos`  
(Opsional) Tingkat Kualitas Layanan (QoS) yang akan digunakan saat menerbitkan ulang pesan. Nilai-nilai yang valid: `0`, `1`. Nilai default-nya adalah `0`. Untuk informasi selengkapnya tentang QoS MQTT, lihat. [MQTT](mqtt.md)  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`roleArn`  
Peran IAM yang memungkinkan AWS IoT untuk mempublikasikan ke topik MQTT. Untuk informasi selengkapnya, lihat [Persyaratan](#republish-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan republish dalam aturan. 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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan republish dengan template substitusi dalam aturan. 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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan republish dengan `headers` dalam aturan. 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"
                            }
                        ]
                    }
                }
            }
        ]
    }
}
```

**catatan**  
IP sumber asli tidak akan diteruskan melalui [tindakan Republish](#republish-rule-action).

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

Tindakan S3 (`s3`) menulis data dari pesan MQTT ke bucket Amazon Simple Storage Service (Amazon S3). 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `s3:PutObject` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan AWS KMS customermanaged AWS KMS key untuk mengenkripsi data saat istirahat di Amazon S3, layanan harus memiliki izin untuk menggunakan AWS KMS key atas nama pemanggil. Untuk informasi selengkapnya, lihat [AWS dikelola AWS KMS keys dan dikelola pelanggan AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-cmks) di *Panduan Pengembang Layanan Penyimpanan Sederhana Amazon*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`bucket`  
Bucket Amazon S3 untuk menulis data.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`cannedacl`  
(Opsional) Amazon S3 memasukkan ACL yang mengontrol akses ke objek yang diidentifikasi oleh kunci objek. Untuk informasi selengkapnya, termasuk nilai yang diizinkan, lihat [ACL Kalengan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).   
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`key`  
Jalur ke file tempat data ditulis.  
Pertimbangkan contoh di mana parameter ini berada `${topic()}/${timestamp()}` dan aturan menerima pesan di mana topiknya berada`some/topic`. Jika stempel waktu saat ini`1460685389`, maka tindakan ini menulis data ke file yang dipanggil `1460685389` di `some/topic` folder bucket S3.  
Jika Anda menggunakan kunci statis, AWS IoT timpa satu file setiap kali aturan dipanggil. Kami menyarankan Anda menggunakan stempel waktu pesan atau pengenal pesan unik lainnya sehingga file baru disimpan di Amazon S3 untuk setiap pesan yang diterima.
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Peran IAM yang memungkinkan akses ke bucket Amazon S3. Untuk informasi selengkapnya, lihat [Persyaratan](#s3-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan S3 dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="s3-rule-action-see-also"></a>
+ [Apa itu Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*

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

Tindakan Salesforce IoT (`salesforce`) mengirimkan data dari pesan MQTT yang memicu aturan ke aliran input IoT Salesforce. 

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`url`  
URL yang diekspos oleh aliran input IoT Salesforce. URL tersedia dari platform IoT Salesforce saat Anda membuat aliran input. Untuk informasi selengkapnya, lihat dokumentasi IoT Salesforce.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`token`  
Token yang digunakan untuk mengautentikasi akses ke aliran input IoT Salesforce yang ditentukan. Token tersedia dari platform IoT Salesforce saat Anda membuat aliran input. Untuk informasi selengkapnya, lihat dokumentasi IoT Salesforce.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan IoT Salesforce dalam sebuah aturan. AWS IoT 

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

Tindakan SNS (`sns`) mengirimkan data dari pesan MQTT sebagai notifikasi push Amazon Simple Notification Service (Amazon SNS).

Anda dapat mengikuti tutorial yang menunjukkan cara membuat dan menguji aturan dengan tindakan SNS. Untuk informasi selengkapnya, lihat [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md).

**catatan**  
Tindakan SNS tidak mendukung topik [Amazon SNS FIFO (First-In-First-Out)](https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html). Karena mesin aturan adalah layanan terdistribusi penuh, tidak ada jaminan pesanan pesan ketika tindakan SNS dipanggil.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `sns:Publish` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan pengelolaan-dikelola AWS KMS pelanggan AWS KMS key untuk mengenkripsi data saat istirahat di Amazon SNS, layanan harus memiliki izin untuk menggunakan AWS KMS key atas nama pemanggil. Untuk informasi selengkapnya, lihat [Manajemen kunci](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) di *Panduan Pengembang Layanan Pemberitahuan Sederhana Amazon*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`targetArn`  
Topik SNS atau perangkat individual tempat notifikasi push dikirim.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`messageFormat`  
(Opsional) Format pesan. Amazon SNS menggunakan pengaturan ini untuk menentukan apakah payload harus diuraikan dan apakah bagian khusus platform yang relevan dari payload harus diekstraksi. Nilai-nilai yang valid: `JSON`, `RAW`. Default ke `RAW`.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`roleArn`  
Peran IAM yang memungkinkan akses ke SNS. Untuk informasi selengkapnya, lihat [Persyaratan](#sns-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan SNS dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan SNS dengan template substitusi dalam aturan. 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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="sns-rule-action-see-also"></a>
+ [Apakah Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/) dalam *Panduan Developer Amazon Simple Notification Service*
+ [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)

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

Tindakan SQS (`sqs`) mengirimkan data dari pesan MQTT ke antrian Amazon Simple Queue Service (Amazon SQS).

**catatan**  
Tindakan SQS tidak mendukung antrian [Amazon SQS FIFO (First-In-First-Out)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html). Karena mesin aturan adalah layanan terdistribusi penuh, tidak ada jaminan urutan pesan ketika tindakan SQS dipicu.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `sqs:SendMessage` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.
+ Jika Anda menggunakan AWS KMS pelanggan yang AWS KMS key berhasil mengenkripsi data saat istirahat di Amazon SQS, layanan harus memiliki izin untuk menggunakan atas AWS KMS key nama pemanggil. Untuk informasi selengkapnya, lihat [Manajemen kunci](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) di *Panduan Pengembang Layanan Antrian Sederhana Amazon*.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`queueUrl`  
URL antrian Amazon SQS untuk menulis data. Wilayah di URL ini tidak harus Wilayah AWS sama dengan [AWS IoT aturan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) Anda.  
Mungkin ada biaya tambahan untuk transfer data silang Wilayah AWS menggunakan tindakan aturan SQS. Untuk informasi selengkapnya, lihat [harga Amazon SQS.](https://aws.amazon.com/sqs/pricing/)
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`useBase64`  
Setel parameter ini `true` untuk mengonfigurasi tindakan aturan ke base64-menyandikan data pesan sebelum menulis data ke antrean Amazon SQS. Default ke `false`.  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`roleArn`  
Peran IAM yang memungkinkan akses ke antrian Amazon SQS. Untuk informasi selengkapnya, lihat [Persyaratan](#sqs-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan SQS dalam aturan. 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/my_sqs_queue", 
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs"
                }
            }
        ]
    }
}
```

Contoh JSON berikut mendefinisikan tindakan SQS dengan template substitusi dalam aturan. 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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="sqs-rule-action-see-also"></a>
+ [Apa itu Layanan Antrian Sederhana Amazon?](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/) di Panduan *Pengembang Layanan Antrian Sederhana Amazon*

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

Tindakan Step Functions (`stepFunctions`) memulai mesin AWS Step Functions status.

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `states:StartExecution` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih atau membuat peran untuk memungkinkan AWS IoT untuk melakukan tindakan aturan ini.

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`stateMachineName`  
Nama mesin status Step Functions untuk memulai.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`executionNamePrefix`  
(Opsional) Nama yang diberikan untuk eksekusi mesin negara terdiri dari awalan ini diikuti oleh UUID. Step Functions membuat nama unik untuk setiap eksekusi mesin negara jika tidak disediakan.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
ARN dari peran yang memberikan AWS IoT izin untuk memulai mesin negara. Untuk informasi selengkapnya, lihat [Persyaratan](#stepfunctions-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

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

Contoh JSON berikut mendefinisikan tindakan Step Functions dalam aturan. AWS IoT 

```
{
    "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"
                }
            }
        ]
    }
}
```

## Lihat juga
<a name="stepfunctions-rule-action-see-also"></a>
+ [Apa itu AWS Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/) di *Panduan AWS Step Functions Pengembang*

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

Tindakan aturan Timestream menulis atribut (ukuran) dari pesan MQTT ke dalam tabel Amazon Timestream. Untuk informasi selengkapnya tentang Amazon Timestream, lihat [Apa itu Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) .

**catatan**  
Amazon Timestream tidak tersedia di semua Wilayah AWS s. Jika Amazon Timestream tidak tersedia di Wilayah Anda, Amazon Timestream tidak akan muncul dalam daftar tindakan aturan.

Atribut yang disimpan aturan ini dalam database Timestream adalah atribut yang dihasilkan dari pernyataan kueri aturan. Nilai setiap atribut dalam hasil pernyataan query diuraikan untuk menyimpulkan tipe datanya (seperti dalam [Dinamo DBv2](dynamodb-v2-rule-action.md) tindakan). Setiap nilai atribut ditulis ke catatannya sendiri di tabel Timestream. Untuk menentukan atau mengubah tipe data atribut, gunakan [`cast()`](iot-sql-functions.md#iot-sql-function-cast)fungsi dalam pernyataan query. Untuk informasi selengkapnya tentang isi setiap catatan Timestream, lihat[Konten rekaman Timestream](#timestream-rule-action-data).

**catatan**  
Dengan SQL V2 (2016-03-23), nilai numerik yang merupakan bilangan bulat, seperti`10.0`, dikonversi representasi Integer mereka (). `10` Secara eksplisit mentransmisikan mereka ke `Decimal` nilai, seperti dengan menggunakan fungsi [cast ()](iot-sql-functions.md#iot-sql-function-cast), tidak mencegah perilaku ini—hasilnya masih merupakan nilai. `Integer` Hal ini dapat menyebabkan kesalahan jenis ketidakcocokan yang mencegah data direkam dalam database Timestream. Untuk memproses nilai numerik bilangan bulat sebagai `Decimal` nilai, gunakan SQL V1 (2015-10-08) untuk pernyataan kueri aturan.

**catatan**  
Jumlah maksimum nilai yang dapat ditulis oleh tindakan aturan Timestream ke dalam tabel Amazon Timestream adalah 100. Untuk informasi selengkapnya, lihat Referensi [Kuota Amazon Timestream](https://docs.aws.amazon.com//timestream/latest/developerguide/ts-limits.html#limits.default). 

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

Tindakan aturan ini memiliki persyaratan sebagai berikut:
+ Peran IAM yang AWS IoT dapat diasumsikan untuk melakukan `timestream:DescribeEndpoints` dan `timestream:WriteRecords` operasi. Untuk informasi selengkapnya, lihat [Memberikan AWS IoT aturan akses yang dibutuhkannya](iot-create-role.md).

  Di AWS IoT konsol, Anda dapat memilih, memperbarui, atau membuat peran AWS IoT untuk memungkinkan melakukan tindakan aturan ini.
+ Jika Anda menggunakan pelanggan- AWS KMS untuk mengenkripsi data saat istirahat di Timestream, layanan harus memiliki izin untuk menggunakan AWS KMS key atas nama pemanggil. Untuk informasi selengkapnya, lihat [Cara AWS layanan menggunakan AWS KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html)

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

Saat Anda membuat AWS IoT aturan dengan tindakan ini, Anda harus menentukan informasi berikut:

`databaseName`  
Nama database Amazon Timestream yang memiliki tabel untuk menerima catatan yang dibuat tindakan ini. Lihat juga `tableName`.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`dimensions`  
Atribut metadata dari deret waktu yang ditulis dalam setiap catatan ukuran. Misalnya, nama dan Availability Zone dari instans EC2 atau nama produsen turbin angin adalah dimensi.    
`name`  
Nama dimensi metadata. Ini adalah nama kolom dalam catatan tabel database.  
Dimensi tidak dapat diberi nama:`measure_name`,`measure_value`, atau`time`. Nama-nama ini dicadangkan. Nama dimensi tidak dapat dimulai dengan `ts_` atau `measure_value` dan mereka tidak dapat berisi karakter titik dua (`:`).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak  
`value`  
Nilai untuk ditulis dalam kolom ini dari catatan basis data.  
Mendukung [template substitusi](iot-substitution-templates.md): Ya

`roleArn`  
Amazon Resource Name (ARN) peran yang memberikan AWS IoT izin untuk menulis ke tabel basis data Timestream. Untuk informasi selengkapnya, lihat [Persyaratan](#timestream-rule-action-requirements).  
Mendukung [template substitusi](iot-substitution-templates.md): Tidak

`tableName`  
Nama tabel database untuk menulis catatan ukuran. Lihat juga `databaseName`.  
Mendukung [template substitusi](iot-substitution-templates.md): API dan hanya AWS CLI 

`timestamp`  
 Nilai yang akan digunakan untuk stempel waktu entri. Jika kosong, waktu untuk memproses entri yang akan digunakan.     
`unit`  
Ketepatan nilai stempel waktu yang dihasilkan dari ekspresi yang dijelaskan dalam `value`.  
Nilai yang valid: `SECONDS` \$1 `MILLISECONDS` \$1 `MICROSECONDS` \$1`NANOSECONDS`. Nilai default-nya `MILLISECONDS`.  
`value`  
Ekspresi yang mengembalikan nilai waktu jangka waktu panjang.  
Anda dapat menggunakan [time\$1to\$1epoch (String, String)](iot-sql-functions.md#iot-sql-function-time-to-epoch) fungsi ini untuk membuat stempel waktu yang valid dari nilai tanggal atau waktu yang diteruskan dalam payload pesan. 

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

Data yang ditulis ke tabel Amazon Timestream oleh tindakan ini mencakup stempel waktu, metadata dari tindakan aturan Timestream, dan hasil dari pernyataan kueri aturan.

Untuk setiap atribut (ukuran) dalam hasil pernyataan kueri, tindakan aturan ini menulis catatan ke tabel Timestream yang ditentukan dengan kolom ini.


|  Nama kolom  |  Jenis Atribut  |  Nilai  |  Komentar  | 
| --- | --- | --- | --- | 
|  *dimension-name*  |  UKURAN  |  Nilai yang ditentukan dalam entri tindakan aturan Timestream.  |  Setiap **Dimensi** yang ditentukan dalam entri tindakan aturan membuat kolom dalam database Timestream dengan nama dimensi.  | 
|  ukuran\$1nama  |  UKURAN\$1NAMA  |  Nama atribut  |  Nama atribut dalam hasil pernyataan query yang nilainya ditentukan dalam `measure_value::data-type` kolom.  | 
|  ukuran\$1nilai:: *data-type*  |  UKURAN\$1NILAI  |  Nilai atribut dalam hasil pernyataan query. Nama atribut ada di `measure_name` kolom.  |  Nilai ditafsirkan\$1 dan dilemparkan sebagai kecocokan yang paling cocok dari:`bigint`,,`boolean`, `double` atau. `varchar` Amazon Timestream membuat kolom terpisah untuk setiap tipe data. Nilai dalam pesan dapat ditransmisikan ke tipe data lain dengan menggunakan [`cast()`](iot-sql-functions.md#iot-sql-function-cast)fungsi dalam pernyataan kueri aturan.  | 
|  Waktu  |  TIMESTAMP  |  Tanggal dan waktu catatan dalam database.  |  Nilai ini ditetapkan oleh mesin aturan atau `timestamp` properti, jika didefinisikan.  | 

\$1 Nilai atribut yang dibaca dari payload pesan ditafsirkan sebagai berikut. Lihat [Contoh](#timestream-rule-action-examples) untuk ilustrasi dari masing-masing kasus ini.
+ Nilai yang tidak dikutip dari `true` atau `false` ditafsirkan sebagai tipe. `boolean`
+ Numerik desimal ditafsirkan sebagai tipe. `double`
+ Nilai numerik tanpa titik desimal ditafsirkan sebagai tipe. `bigint`
+ String yang dikutip ditafsirkan sebagai `varchar` tipe.
+ Objek dan nilai array dikonversi ke string JSON dan disimpan sebagai `varchar` tipe.

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

Contoh JSON berikut mendefinisikan tindakan aturan Timestream dengan template substitusi dalam aturan. 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"
        }
      }
    ]
  }
}
```

Menggunakan tindakan aturan topik Timestream yang ditentukan dalam contoh sebelumnya dengan payload pesan berikut menghasilkan catatan Amazon Timestream yang ditulis dalam tabel berikut.

```
{
  "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"]
  }
}
```

Tabel berikut menampilkan kolom database dan catatan yang menggunakan tindakan aturan topik tertentu untuk memproses payload pesan sebelumnya dibuat. `device_id`Kolom `device_firmware_sku` dan adalah DIMENSI yang didefinisikan dalam tindakan aturan topik. Tindakan aturan topik Timestream membuat `time` kolom dan `measure_value::*` kolom `measure_name` dan kolom, yang diisi dengan nilai dari hasil pernyataan kueri tindakan aturan topik. 


| device\$1firmware\$1sku | device\$1id | ukuran\$1nama | ukuran\$1nilai: :bigint | ukuran\$1nilai: :varchar | ukuran\$1nilai: :ganda | ukuran\$1nilai: :boolean | Waktu | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | complex\$1value | - | \$1"simple\$1element” :42, "array\$1of\$1integers”: [23,36,56,72], "array string”: ["red”, "green”, "blue "]\$1 | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | integer\$1value\$1as\$1string | - | 123456789012 | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | boolean\$1nilai | - | - | - | BETUL | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | integer\$1nilai | 123456789012 | - | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | string\$1nilai | - | Nilai string | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | array\$1of\$1integer | - | [23,36,56,72] | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | array string | - | ["merah”, “hijau”, “biru"] | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | boolean\$1value\$1as\$1string | - | BETUL | - | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | nilai ganda | - | - | 123.456789012 | - | 2020-08-26 22:42:16.423 000000 | 
| Metadata Statis Saya | iotconsole-159 EXAMPLE738 -0 | double\$1value\$1as\$1string | - | 123.45679 | - | - | 2020-08-26 22:42:16.423 000000 | 

## Memecahkan masalah aturan
<a name="iot-troubleshoot-rule"></a>

Jika Anda memiliki masalah dengan aturan Anda, kami sarankan Anda mengaktifkan CloudWatch Log. Anda dapat menganalisis log untuk menentukan apakah masalahnya adalah otorisasi atau apakah, misalnya, kondisi klausa WHERE tidak cocok. Untuk informasi selengkapnya, lihat [Menyiapkan CloudWatch Log](https://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html).

# Mengakses sumber daya lintas akun menggunakan aturan AWS IoT
<a name="accessing-cross-account-resources-using-rules"></a>

Anda dapat mengonfigurasi AWS IoT aturan untuk akses lintas akun sehingga data yang dicerna pada topik MQTT dari satu akun dapat dialihkan ke layanan, AWS seperti Amazon SQS dan Lambda, dari akun lain. Berikut ini menjelaskan cara mengatur AWS IoT aturan untuk konsumsi data lintas akun, dari topik MQTT di satu akun, hingga tujuan di akun lain. 

Aturan lintas akun dapat dikonfigurasi menggunakan [izin berbasis sumber daya](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#TypesPermissions) pada sumber daya tujuan. Oleh karena itu, hanya tujuan yang mendukung izin berbasis sumber daya yang dapat diaktifkan untuk akses lintas akun dengan aturan. AWS IoT Tujuan yang didukung termasuk Amazon SQS, Amazon SNS, Amazon S3, dan. AWS Lambda

**catatan**  
Untuk tujuan yang didukung, kecuali Amazon SQS, Anda harus menentukan aturan yang Wilayah AWS sama dengan sumber daya layanan lain sehingga tindakan aturan dapat berinteraksi dengan sumber daya tersebut. Untuk informasi selengkapnya tentang tindakan AWS IoT aturan, lihat [tindakan AWS IoT aturan](iot-rule-actions.md). Untuk informasi selengkapnya tentang tindakan SQS aturan, lihat[SQS](sqs-rule-action.md).

## Prasyarat
<a name="cross-account-prerequisites"></a>
+ [Keakraban dengan AWS IoT aturan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)
+ Pemahaman tentang [pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html), [peran](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), dan izin berbasis sumber [daya](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html#TypesPermissions)
+ Setelah [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)menginstal

## Penyiapan lintas akun untuk Amazon SQS
<a name="cross-account-sqs"></a>

Skenario: Akun A mengirimkan data dari pesan MQTT ke antrian Amazon SQS akun B.


| Akun AWS | Akun disebut sebagai  | Deskripsi | 
| --- | --- | --- | 
| 1111-1111-1111 | Akun A | Tindakan aturan: sqs:SendMessage | 
| 2222-2222-2222 | Akun B | Antrean Amazon SQS [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/accessing-cross-account-resources-using-rules.html)  | 

**catatan**  
[Antrian Amazon SQS tujuan Anda tidak harus Wilayah AWS sama dengan aturan Anda.AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) Untuk informasi selengkapnya tentang tindakan SQS aturan, lihat[SQS](sqs-rule-action.md).

**Lakukan tugas Akun A**
**Catatan**  
Untuk menjalankan perintah berikut, pengguna IAM Anda harus memiliki izin untuk `iot:CreateTopicRule` menggunakan Amazon Resource Name (ARN) aturan sebagai sumber daya, dan izin untuk `iam:PassRole` bertindak dengan sumber daya sebagai ARN peran.

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun A. 

1. Buat peran IAM yang mempercayai mesin AWS IoT aturan, dan lampirkan kebijakan yang memungkinkan akses ke antrean Amazon SQS akun B. Lihat contoh perintah dan dokumen kebijakan di [Pemberian akses AWS IoT yang diperlukan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. Untuk membuat aturan yang dilampirkan ke topik, jalankan [create-topic-rule perintah](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
   ```

   Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke dalam antrean Amazon SQS yang ditentukan. Pernyataan SQL memfilter pesan dan peran ARN AWS IoT memberikan izin untuk menambahkan pesan ke antrian Amazon SQS.

   ```
   {
   	"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
   			}
   		}
   	]
   }
   ```

   Untuk informasi selengkapnya tentang cara menentukan tindakan Amazon SQS dalam AWS IoT aturan, lihat [tindakan AWS IoT aturan - Amazon SQS.](https://docs.aws.amazon.com/iot/latest/developerguide/sqs-rule-action.html)

**Lakukan tugas Akun B**

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun B. 

1. [Untuk memberikan izin sumber daya antrian Amazon SQS ke akun A, jalankan perintah add-permission.](https://docs.aws.amazon.com/cli/latest/reference/sqs/add-permission.html)

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

## Penyiapan lintas akun untuk Amazon SNS
<a name="cross-account-sns"></a>

Skenario: Akun A mengirim data dari pesan MQTT ke topik akun Amazon SNS B.


| Akun AWS | Akun disebut sebagai  | Deskripsi | 
| --- | --- | --- | 
| 1111-1111-1111 | Akun A | Tindakan aturan: sns:Publish | 
| 2222-2222-2222 | Akun B | Topik Amazon SNS ARN: arn:aws:sns:region:2222-2222-2222:ExampleTopic  | 

**Lakukan tugas Akun A**
**Catatan**  
 Untuk menjalankan perintah berikut, pengguna IAM Anda harus memiliki izin `iot:CreateTopicRule` dengan aturan ARN sebagai sumber daya dan izin untuk `iam:PassRole` tindakan dengan sumber daya sebagai peran ARN.

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun A. 

1. Buat peran IAM yang mempercayai mesin AWS IoT aturan, dan lampirkan kebijakan yang memungkinkan akses ke topik Amazon SNS akun B. Misalnya perintah dan dokumen kebijakan, lihat [Memberikan akses AWS IoT yang diperlukan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. Untuk membuat aturan yang dilampirkan ke topik, jalankan [create-topic-rule perintah](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
   ```

   Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke topik Amazon SNS yang ditentukan. Pernyataan SQL memfilter pesan, dan peran ARN AWS IoT memberikan izin untuk mengirim pesan ke topik Amazon SNS.

   ```
   {
   	"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"
   			}
   		}
   	]
   }
   ```

   Untuk informasi selengkapnya tentang cara menentukan tindakan Amazon SNS dalam AWS IoT aturan, lihat [tindakan AWS IoT aturan - Amazon SNS](https://docs.aws.amazon.com/iot/latest/developerguide/sns-rule-action.html).

**Lakukan tugas Akun B**

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun B. 

1. Untuk memberikan izin pada sumber daya topik Amazon SNS ke akun A, jalankan perintah [add-permission](https://docs.aws.amazon.com/cli/latest/reference/sns/add-permission.html).

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

## Penyiapan lintas akun untuk Amazon S3
<a name="cross-account-s3"></a>

Skenario: Akun A mengirimkan data dari pesan MQTT ke ember akun Amazon S3 B.


| Akun AWS | Akun disebut sebagai  | Deskripsi | 
| --- | --- | --- | 
| 1111-1111-1111 | Akun A | Tindakan aturan: s3:PutObject | 
| 2222-2222-2222 | Akun B | Ember Amazon S3 ARN: arn:aws:s3:::amzn-s3-demo-bucket  | 

**Lakukan tugas Akun A**
**Catatan**  
Untuk menjalankan perintah berikut, pengguna IAM Anda harus memiliki izin `iot:CreateTopicRule` dengan aturan ARN sebagai sumber daya dan izin untuk `iam:PassRole` bertindak dengan sumber daya sebagai peran ARN.

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun A. 

1. Buat peran IAM yang mempercayai mesin AWS IoT aturan dan melampirkan kebijakan yang memungkinkan akses ke bucket Amazon S3 akun B. Misalnya perintah dan dokumen kebijakan, lihat [Memberikan akses AWS IoT yang diperlukan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html).

1. Untuk membuat aturan yang dilampirkan ke bucket S3 target Anda, jalankan [create-topic-rule perintah](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html).

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

   Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke dalam bucket Amazon S3 yang ditentukan. Pernyataan SQL memfilter pesan, dan peran ARN AWS IoT memberikan izin untuk menambahkan pesan ke bucket Amazon S3.

   ```
   {
   	"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"
   			}
   		}
   	]
   }
   ```

   Untuk informasi selengkapnya tentang cara menentukan tindakan Amazon S3 dalam AWS IoT aturan, lihat [tindakan AWS IoT aturan - Amazon S3](https://docs.aws.amazon.com/iot/latest/developerguide/s3-rule-action.html).

**Lakukan tugas Akun B**

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun B. 

1. Buat kebijakan bucket yang mempercayai prinsipal akun A.

   Berikut ini adalah contoh file payload yang mendefinisikan kebijakan bucket yang mempercayai prinsipal akun lain.  
****  

   ```
   {
       "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/*"
           }
       ]
   }
   ```

   Untuk informasi selengkapnya, lihat [contoh kebijakan bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-1).

1. Untuk melampirkan kebijakan bucket ke bucket yang ditentukan, jalankan [put-bucket-policy perintah](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. Untuk membuat akses lintas akun berfungsi, pastikan Anda memiliki pengaturan **Blokir semua akses publik** yang benar. Untuk informasi selengkapnya, lihat [Praktik Terbaik Keamanan untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Penyiapan lintas akun untuk AWS Lambda
<a name="cross-account-lambda"></a>

Skenario: Akun A memanggil AWS Lambda fungsi akun B, meneruskan pesan MQTT.


| Akun AWS | Akun disebut sebagai  | Deskripsi | 
| --- | --- | --- | 
| 1111-1111-1111 | Akun A | Tindakan aturan: lambda:InvokeFunction | 
| 2222-2222-2222 | Akun B | Fungsi Lambda ARN:  arn:aws:lambda:region:2222-2222-2222:function:example-function  | 

**Lakukan tugas Akun A**
**Catatan**  
 Untuk menjalankan perintah berikut, pengguna IAM Anda harus memiliki izin `iot:CreateTopicRule` dengan aturan ARN sebagai sumber daya, dan izin untuk `iam:PassRole` bertindak dengan sumber daya sebagai peran ARN.

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun A. 

1. Jalankan [create-topic-rule perintah](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html) untuk membuat aturan yang mendefinisikan akses lintas akun ke fungsi Lambda akun B.

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

   Berikut ini adalah contoh file payload dengan aturan yang menyisipkan semua pesan yang dikirim ke `iot/test` topik ke dalam fungsi Lambda yang ditentukan. Pernyataan SQL memfilter pesan dan peran ARN AWS IoT memberikan izin untuk meneruskan data ke fungsi Lambda.

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

   Untuk informasi lebih lanjut tentang cara mendefinisikan AWS Lambda tindakan dalam AWS IoT aturan, baca [tindakan AWS IoT aturan - Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html).

**Lakukan tugas Akun B**

1. [Konfigurasikan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) menggunakan pengguna IAM akun B. 

1. Jalankan [perintah add-permission Lambda](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) untuk memberikan izin AWS IoT aturan untuk mengaktifkan fungsi Lambda. Untuk menjalankan perintah berikut, pengguna IAM Anda harus memiliki izin untuk `lambda:AddPermission` bertindak.

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

   **Pilihan:**

   **--kepala sekolah**

    Bidang ini memberikan izin untuk AWS IoT (diwakili oleh`iot.amazonaws.com`) untuk memanggil fungsi Lambda.

   **--sumber-arn**

   Bidang ini mengonfirmasi bahwa hanya `arn:aws:iot:region:1111-1111-1111:rule/example-rule` dalam AWS IoT memicu fungsi Lambda ini dan tidak ada aturan lain di akun yang sama atau berbeda yang dapat mengaktifkan fungsi Lambda ini.

   **--source-akun**

   Bidang ini mengonfirmasi bahwa AWS IoT mengaktifkan fungsi Lambda ini hanya atas nama akun. `1111-1111-1111`
**Catatan**  
Jika Anda melihat pesan kesalahan “Aturan tidak dapat ditemukan” dari konsol AWS Lambda fungsi Anda di bawah **Konfigurasi**, abaikan pesan kesalahan dan lanjutkan untuk menguji koneksi.

# Penanganan kesalahan (tindakan kesalahan)
<a name="rule-error-handling"></a>

Saat AWS IoT menerima pesan dari perangkat, mesin aturan memeriksa untuk melihat apakah pesan tersebut cocok dengan aturan. Jika demikian, pernyataan kueri aturan dievaluasi dan tindakan aturan diaktifkan, meneruskan hasil pernyataan kueri. 

Jika masalah terjadi saat mengaktifkan suatu tindakan, mesin aturan mengaktifkan tindakan kesalahan, jika ada yang ditentukan untuk aturan tersebut. Ini mungkin terjadi ketika:
+ Aturan tidak memiliki izin untuk mengakses bucket Amazon S3.
+ Kesalahan pengguna menyebabkan throughput yang disediakan DynamoDB terlampaui.

**catatan**  
Penanganan kesalahan yang dibahas dalam topik ini adalah untuk [tindakan aturan](iot-rule-actions.md). Untuk men-debug masalah SQL, termasuk fungsi eksternal, Anda dapat mengatur AWS IoT logging. Untuk informasi selengkapnya, lihat [Konfigurasikan AWS IoT logging](configure-logging.md). 

## Format pesan tindakan kesalahan
<a name="rule-error-message-format"></a>

Satu pesan dihasilkan per aturan dan pesan. Misalnya, jika dua tindakan aturan dalam aturan yang sama gagal, tindakan kesalahan menerima satu pesan yang berisi kedua kesalahan.

Pesan tindakan kesalahan terlihat seperti contoh berikut.

```
{
  "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  
Nama aturan yang memicu tindakan kesalahan.

topik  
Topik di mana pesan asli diterima.

cloudwatchTraceId  
Identitas unik yang mengacu pada log kesalahan CloudWatch.

clientId  
ID klien dari penerbit pesan.

base64 OriginalPayload  
Pesan asli payload Base64-dikodekan.

kegagalan    
failedAction  
Nama tindakan yang gagal diselesaikan (misalnya, “S3Action”).  
failedResource  
Nama sumber daya (misalnya, nama ember S3).  
errorMessage  
Deskripsi dan penjelasan kesalahan.

## Contoh tindakan kesalahan
<a name="rule-error-example"></a>

Berikut adalah contoh aturan dengan tindakan kesalahan tambahan. Aturan berikut memiliki tindakan yang menulis data pesan ke tabel DynamoDB dan tindakan kesalahan yang menulis data ke bucket Amazon S3:

```
{
    "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()}"
        }
    }
}
```

Anda dapat menggunakan [fungsi](iot-sql-functions.md) atau [templat substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) apa pun dalam pernyataan SQL tindakan kesalahan termasuk fungsi eksternal: [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), dan. [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) Jika tindakan kesalahan mengharuskan untuk memanggil fungsi eksternal, maka menjalankan tindakan kesalahan dapat mengakibatkan tagihan tambahan untuk fungsi eksternal.

Untuk informasi selengkapnya tentang aturan dan cara menentukan tindakan kesalahan, lihat [Membuat AWS IoT Aturan](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-rule.html).

Untuk informasi lebih lanjut tentang penggunaan CloudWatch untuk memantau keberhasilan atau kegagalan aturan, lihat[AWS IoT metrik dan dimensi](metrics_dimensions.md).

# Mengurangi biaya pengiriman pesan dengan Basic Ingest
<a name="iot-basic-ingest"></a>

[Anda dapat menggunakan Basic Ingest, untuk mengirim data perangkat dengan aman ke perangkat yang Layanan AWS didukung oleh[AWS IoT tindakan aturan](iot-rule-actions.md), tanpa menimbulkan biaya pengiriman pesan.](https://aws.amazon.com/iot-core/pricing/) Basic Ingest mengoptimalkan aliran data dengan menghapus broker pesan terbitkan/berlangganan dari jalur konsumsi.

Basic Ingest dapat mengirim pesan dari perangkat atau aplikasi Anda. Pesan memiliki nama topik yang dimulai dengan `$aws/rules/rule_name` untuk tiga level pertama mereka, di mana `rule_name` adalah nama AWS IoT aturan yang ingin Anda panggil.

Anda dapat menggunakan aturan yang ada dengan Basic Ingest dengan menambahkan awalan Basic Ingest (`$aws/rules/rule_name`) ke topik pesan yang akan Anda gunakan untuk memanggil aturan. Misalnya, jika Anda memiliki aturan bernama `BuildingManager` yang dipanggil oleh pesan dengan topik seperti `Buildings/Building5/Floor2/Room201/Lights` (`"sql": "SELECT * FROM 'Buildings/#'"`), Anda dapat memanggil aturan yang sama dengan Basic Ingest dengan mengirimkan pesan dengan topik. `$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights`

**catatan**  
Perangkat dan aturan Anda tidak dapat berlangganan topik yang dicadangkan Basic Ingest. Misalnya, AWS IoT Device Defender `num-messages-received` metrik metrik tidak dipancarkan karena tidak mendukung berlangganan topik. Untuk informasi selengkapnya, lihat [Topik cadangan](reserved-topics.md).
Jika Anda memerlukan broker terbitkan/berlangganan untuk mendistribusikan pesan ke beberapa pelanggan (misalnya, untuk mengirimkan pesan ke perangkat lain dan mesin aturan), Anda harus terus menggunakan broker AWS IoT pesan untuk menangani distribusi pesan. Namun, pastikan Anda mempublikasikan pesan Anda tentang topik selain topik Basic Ingest.

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

Sebelum Anda menggunakan Basic Ingest, verifikasi bahwa perangkat atau aplikasi Anda menggunakan [kebijakan](iot-policies.md) yang memiliki izin publikasi. `$aws/rules/*` Atau, Anda dapat menentukan izin untuk aturan individu dengan `$aws/rules/rule_name/*` dalam kebijakan. Jika tidak, perangkat dan aplikasi Anda dapat terus menggunakan koneksi yang ada dengannya AWS IoT Core.

Ketika pesan mencapai mesin aturan, tidak ada perbedaan dalam implementasi atau penanganan kesalahan antara aturan yang dipanggil dari Basic Ingest dan yang dipanggil melalui langganan broker pesan.

Anda dapat membuat aturan untuk digunakan dengan Basic Ingest. Ingatlah hal berikut:
+ Awalan awal topik Basic Ingest (`$aws/rules/rule_name`) tidak tersedia untuk fungsi tersebut. [topik (Desimal)](iot-sql-functions.md#iot-function-topic)
+ Jika Anda mendefinisikan aturan yang dipanggil hanya dengan Basic Ingest, `FROM` klausa tersebut bersifat opsional di `sql` bidang definisi. `rule` Ini masih diperlukan jika aturan juga dipanggil oleh pesan lain yang harus dikirim melalui broker pesan (misalnya, karena pesan lain tersebut harus didistribusikan ke beberapa pelanggan). Untuk informasi selengkapnya, lihat [AWS IoT Referensi SQL](iot-sql-reference.md).
+ Tiga level pertama dari topik Ingest Dasar (`$aws/rules/rule_name`) tidak dihitung terhadap batas panjang 8 segmen atau menuju batas karakter 256 total untuk suatu topik. Jika tidak, pembatasan yang sama berlaku seperti yang didokumentasikan dalam [AWS IoT Batas](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#limits_iot).
+ Jika pesan diterima dengan topik Ingest Dasar yang menentukan aturan tidak aktif atau aturan yang tidak ada, log kesalahan dibuat di CloudWatch log Amazon untuk membantu Anda melakukan debug. Untuk informasi selengkapnya, lihat [Aturan entri log mesin](cwl-format.md#rule-engine-logs). `RuleNotFound`Metrik ditunjukkan dan Anda dapat membuat alarm pada metrik ini. Untuk informasi selengkapnya, lihat Metrik Aturan di[Metrik aturan](metrics_dimensions.md#rulemetrics).
+ Anda masih dapat mempublikasikan dengan QoS 1 tentang topik Basic Ingest. Anda menerima PUBACK setelah pesan berhasil dikirim ke mesin aturan. Menerima a tidak PUBACK berarti bahwa tindakan aturan Anda berhasil diselesaikan. Anda dapat mengonfigurasi tindakan kesalahan untuk menangani kesalahan saat tindakan dijalankan. Untuk informasi selengkapnya, lihat [Penanganan kesalahan (tindakan kesalahan)](rule-error-handling.md).

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

Dalam AWS IoT, aturan didefinisikan menggunakan sintaks seperti SQL. Pernyataan SQL terdiri dari tiga jenis klausa:

**SET**  
(Opsional) Mendefinisikan variabel yang dapat Anda gunakan kembali di seluruh pernyataan SQL dan template substitusi. Tetapkan nilai ke variabel menggunakan ekspresi. Referensi variabel-variabel ini dalam klausa SELECT dan WHERE, dan dalam template substitusi tindakan.  
Klausa SET mendukung[Jenis Data](iot-sql-data-types.md),[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md), [Literal](iot-sql-literals.md)[Pernyataan kasus](iot-sql-case.md), [Variabel [Ekstensi JSON](iot-sql-json.md)](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

**SELECT**  
(Wajib) Mengekstrak informasi dari muatan pesan yang masuk dan melakukan transformasi pada informasi. Pesan yang akan digunakan diidentifikasi oleh [filter topik](topics.md#topicfilters) yang ditentukan dalam klausa FROM.  
Klausa SELECT mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md),[Pernyataan kasus](iot-sql-case.md), [Ekstensi JSON](iot-sql-json.md)[Templat substitusi](iot-substitution-templates.md), [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), dan[Muatan biner](binary-payloads.md).

**FROM**  
[Filter topik](topics.md#topicfilters) pesan MQTT yang mengidentifikasi pesan untuk mengekstrak data. Aturan diaktifkan untuk setiap pesan yang dikirim ke topik MQTT yang cocok dengan filter topik yang ditentukan di sini. Diperlukan untuk aturan yang diaktifkan oleh pesan yang melewati broker pesan. Opsional untuk aturan yang hanya diaktifkan menggunakan fitur [Basic Ingest](iot-basic-ingest.md). 

**WHERE**  
(Opsional) Menambahkan logika bersyarat yang menentukan apakah tindakan yang ditentukan oleh aturan dilakukan.   
Klausa WHERE mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

Contoh pernyataan SQL terlihat seperti ini:

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

Contoh pesan MQTT (juga disebut payload masuk) terlihat seperti ini:

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

Jika pesan ini diterbitkan pada `'topic/subtopic'` topik, aturan dipicu dan pernyataan SQL dievaluasi. Pernyataan SQL mengekstrak nilai `color` properti jika `"temperature"` properti lebih besar dari 50. Klausa WHERE menentukan kondisi. `temperature > 50` `AS`Kata kunci mengganti nama `"color"` properti menjadi. `"rgb"` Hasilnya (juga disebut *payload keluar*) terlihat seperti ini:

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

Data ini kemudian diteruskan ke tindakan aturan, yang mengirimkan data untuk diproses lebih lanjut. Untuk informasi selengkapnya tentang tindakan aturan, lihat[AWS IoT tindakan aturan](iot-rule-actions.md).

**catatan**  
Komentar saat ini tidak didukung dalam sintaks AWS IoT SQL.  
Nama atribut dengan spasi di dalamnya tidak dapat digunakan sebagai nama bidang dalam pernyataan SQL. Meskipun payload yang masuk dapat memiliki nama atribut dengan spasi di dalamnya, nama tersebut tidak dapat digunakan dalam pernyataan SQL. Namun, mereka akan diteruskan ke payload keluar jika Anda menggunakan spesifikasi nama bidang wildcard (\$1).

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

Klausa AWS IoT SELECT pada dasarnya sama dengan klausa ANSI SQL SELECT, dengan beberapa perbedaan kecil.

Klausa SELECT mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), dan[Muatan biner](binary-payloads.md).

Anda dapat menggunakan klausa SELECT untuk mengekstrak informasi dari pesan MQTT yang masuk. Anda juga dapat menggunakan `SELECT *` untuk mengambil seluruh payload pesan masuk. Contoh:

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

Jika payload adalah objek JSON, Anda dapat referensi kunci dalam objek. Payload keluar Anda berisi pasangan kunci-nilai. Contoh:

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

Anda dapat menggunakan kata kunci AS untuk mengganti nama kunci. Contoh:

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

Anda dapat memilih beberapa item dengan memisahkannya dengan koma. Contoh:

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

Anda dapat memilih beberapa item termasuk '\$1' untuk menambahkan item ke muatan yang masuk. Contoh:

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

Anda dapat menggunakan `"VALUE"` kata kunci untuk menghasilkan payload keluar yang bukan objek JSON. Dengan versi SQL`2015-10-08`, Anda hanya dapat memilih satu item. Dengan versi SQL `2016-03-23` atau yang lebih baru, Anda juga dapat memilih array untuk output sebagai objek tingkat atas.

**Example**  

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

Anda dapat menggunakan `'.'` sintaks untuk menelusuri objek JSON bersarang di payload yang masuk. Contoh:

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

Untuk informasi tentang cara menggunakan objek JSON dan nama properti yang menyertakan karakter cadangan, seperti angka atau karakter tanda hubung (minus), lihat [Ekstensi JSON](iot-sql-json.md)

Anda dapat menggunakan fungsi (lihat[Fungsi](iot-sql-functions.md)) untuk mengubah payload yang masuk. Anda dapat menggunakan tanda kurung untuk pengelompokan. Contoh:

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

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

Klausa FROM berlangganan aturan Anda ke filter [topik](topics.md#topicnames) atau [topik](topics.md#topicfilters). Lampirkan topik atau filter topik dalam tanda kutip tunggal ('). Aturan dipicu untuk setiap pesan yang dikirim ke topik MQTT yang cocok dengan filter topik yang ditentukan di sini. Anda dapat berlangganan sekelompok topik serupa menggunakan filter topik. 

**Contoh:**

Payload masuk dipublikasikan pada topik: `'topic/subtopic'` `{temperature: 50}`

Payload masuk dipublikasikan pada topik: `'topic/subtopic-2'` `{temperature: 50}`

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

Aturan berlangganan`'topic/subtopic'`, sehingga muatan yang masuk diteruskan ke aturan. Muatan keluar, diteruskan ke tindakan aturan, adalah:. `{t: 50}` Aturannya tidak berlangganan`'topic/subtopic-2'`, jadi aturan tidak dipicu untuk pesan yang dipublikasikan`'topic/subtopic-2'`.

**\$1 Wildcard Contoh:**

Anda dapat menggunakan karakter wildcard '\$1' (multi-level) untuk mencocokkan satu atau lebih elemen jalur tertentu:

Muatan masuk diterbitkan dengan topik`'topic/subtopic'`:. `{temperature: 50}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-2'`:. `{temperature: 60}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-3/details'`:. `{temperature: 70}`

Muatan masuk diterbitkan dengan topik`'topic-2/subtopic-x'`:. `{temperature: 80}`

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

Aturan berlangganan topik apa pun yang dimulai`'topic'`, jadi dieksekusi tiga kali, mengirimkan muatan keluar `{t: 50}` (untuk topik/subtopik), (untuk topik/subtopik-2), dan `{t: 60}` (untuk) tindakannya. `{t: 70}` topic/subtopic-3/details Itu tidak berlangganan`'topic-2/subtopic-x'`, jadi aturan tidak dipicu untuk `{temperature: 80}` pesan.

**\$1 Contoh Wildcard:**

Anda dapat menggunakan karakter wildcard '\$1' (tingkat tunggal) untuk mencocokkan salah satu elemen jalur tertentu:

Muatan masuk diterbitkan dengan topik`'topic/subtopic'`:. `{temperature: 50}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-2'`:. `{temperature: 60}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-3/details'`:. `{temperature: 70}`

Muatan masuk diterbitkan dengan topik`'topic-2/subtopic-x'`:. `{temperature: 80}`

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

Aturan berlangganan semua topik dengan dua elemen jalur di mana elemen pertama berada`'topic'`. Aturan dijalankan untuk pesan yang dikirim ke `'topic/subtopic'` dan`'topic/subtopic-2'`, tetapi tidak `'topic/subtopic-3/details'` (memiliki level lebih dari filter topik) atau `'topic-2/subtopic-x'` (tidak dimulai dengan`topic`).

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

Gunakan klausa SET untuk menentukan variabel yang menyimpan hasil ekspresi. Anda dapat menggunakan kembali variabel-variabel ini dalam klausa SELECT dan WHERE, dan dalam template substitusi. Ini membantu Anda menghindari duplikasi ekspresi kompleks dan mengurangi jumlah panggilan fungsi dalam pernyataan SQL Anda.

Klausa SET mendukung[Jenis Data](iot-sql-data-types.md),[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md), [Literal](iot-sql-literals.md)[Pernyataan kasus](iot-sql-case.md), [Variabel [Ekstensi JSON](iot-sql-json.md)](#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

## SET sintaks klausa
<a name="iot-sql-set-syntax"></a>

Klausa SET harus muncul sebelum klausa SELECT dalam pernyataan SQL Anda. Gunakan sintaks berikut:

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

Aturan sintaks:
+ Mulai nama variabel dengan `@`
+ Nama variabel dapat berisi huruf, angka, dan garis bawah
+ Nama variabel bisa mencapai 64 karakter
+ Beberapa variabel dapat diatur dalam satu klausa SET, dipisahkan dengan koma
+ Setiap variabel hanya dapat ditetapkan sekali (variabel tidak dapat diubah)
+ Kata kunci SET hanya dapat digunakan sekali per pernyataan SQL

## Menggunakan variabel
<a name="iot-sql-set-usage"></a>

Setelah Anda menentukan variabel, Anda dapat menggunakannya di:
+ Klausul SELECT
+ Klausul WHERE
+ Penugasan variabel SET lainnya
+ Templat substitusi tindakan
+ Templat substitusi tindakan kesalahan
+ Kueri SELECT bersarang
+ Parameter fungsi (parameter tertentu seperti parameter RoLearn dan parameter yang mengubah mode fungsi yang mirip dengan `transform("enrichArray", attributes, values)` tidak mendukung variabel)

Variabel direferensikan menggunakan `@variable_name` sintaks yang sama yang digunakan dalam klausa SET. Anda juga dapat menggunakan sintaks ekstensi JSON untuk mengakses properti variabel yang berisi objek, seperti. `@variable_name.property`

## Contoh klausa SET
<a name="iot-sql-set-examples"></a>

**Penggunaan variabel dasar**

Contoh berikut menunjukkan payload yang dipublikasikan pada topik`device/data`: `{"temp_fahrenheit": 75, "humidity": 60}`

Pernyataan SQL:

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

Muatan keluar: `{"celsius": 23.89, "humidity": 60}`

**Akses anggota dalam objek JSON yang disematkan**

Contoh berikut menunjukkan payload yang dipublikasikan pada topik`device/data`: `{"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}`

Pernyataan SQL:

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

Muatan keluar: `{"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}`

 untuk informasi lebih lanjut tentang cara bekerja dengan ekstensi JSON, referensi [Ekstensi JSON](iot-sql-json.md) 

**Menghindari panggilan fungsi duplikat**

Variabel SET membantu menghindari duplikasi operasi decode yang kompleks:

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

Tanpa variabel SET, Anda perlu mengulang fungsi decode tiga kali, yang melebihi batas panggilan fungsi.

**Beberapa variabel**

Anda dapat menentukan beberapa variabel dalam satu klausa SET dengan memisahkannya dengan koma:

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

**Menggunakan variabel dalam template substitusi**

Variabel juga dapat digunakan dalam template substitusi tindakan, memungkinkan Anda untuk menggunakan kembali nilai yang dihitung di kedua pernyataan SQL dan tindakan aturan.

Pernyataan SQL:

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

Konfigurasi tindakan:

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

Dalam contoh ini, variabel SET `@temp_celsius` digunakan dalam template substitusi untuk membangun bidang kunci dari tindakan S3.

**Penggunaan muatan non-JSON**

Variabel SET tidak mendukung muatan non-JSON secara langsung, jadi payload harus dikodekan atau didekodekan terlebih dahulu:

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

 untuk informasi lebih lanjut tentang cara bekerja dengan muatan non-JSON, referensi [Bekerja dengan muatan biner](binary-payloads.md) 

## Batas klausa SET
<a name="iot-sql-set-limits"></a>

Batasan berikut berlaku untuk variabel SET:
+ Maksimum 10 variabel unik per pernyataan SQL
+ Ukuran nilai variabel maksimum 128 KiB (diperkecil UTF-8 JSON string)
+ Ukuran nilai total maksimum 128 KiB untuk semua variabel
+ Nama variabel terbatas pada 64 karakter
+ Variabel dapat menerima muatan JSON secara langsung apa adanya (muatan non-JSON harus terlebih dahulu dikodekan/diterjemahkan)

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

Klausa WHERE menentukan apakah tindakan yang ditentukan oleh aturan dilakukan. Jika klausa WHERE mengevaluasi ke true, tindakan aturan dilakukan. Kalau tidak, tindakan aturan tidak dilakukan. 

Klausa WHERE mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

**Contoh:**

Muatan masuk dipublikasikan pada`topic/subtopic`:. `{"color":"red", "temperature":40}`

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

Dalam hal ini, aturan akan dipicu, tetapi tindakan yang ditentukan oleh aturan tidak akan dilakukan. Tidak akan ada muatan keluar.

Anda dapat menggunakan fungsi dan operator dalam klausa WHERE. Namun, Anda tidak dapat mereferensikan alias apa pun yang dibuat dengan kata kunci AS di SELECT. Klausa WHERE dievaluasi terlebih dahulu, untuk menentukan apakah SELECT dievaluasi. 

**Contoh dengan muatan non-JSON:**

Payload non-JSON yang masuk diterbitkan pada `topik/subtopik`: `80`

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

Dalam hal ini, aturan akan dipicu, dan tindakan yang ditentukan oleh aturan akan dilakukan. Payload keluar akan diubah oleh klausa SELECT sebagai payload JSON. `{"value":80}`

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

Mesin AWS IoT aturan mendukung semua tipe data JSON.


**Jenis data yang didukung**  

| Tipe | Arti | 
| --- | --- | 
| Int | Sebuah diskritInt. Maksimum 34 digit. | 
| Decimal |  A `Decimal` dengan presisi 34 digit, dengan magnitudo bukan nol minimum 1E-999 dan magnitudo maksimum 9, 999... E999.  Beberapa fungsi mengembalikan `Decimal` nilai dengan presisi ganda daripada presisi 34 digit.  Dengan SQL V2 (2016-03-23), nilai numerik yang merupakan bilangan bulat, seperti`10.0`, diproses sebagai nilai (), bukan `Int` nilai yang diharapkan (`10`). `Decimal` `10.0` Untuk memproses nilai numerik bilangan bulat secara andal sebagai `Decimal` nilai, gunakan SQL V1 (2015-10-08) untuk pernyataan kueri aturan.   | 
| Boolean | True atau False. | 
| String | Rangkaian UTF-8. | 
| Array | Serangkaian nilai yang tidak harus memiliki tipe yang sama. | 
| Object | Nilai JSON yang terdiri dari kunci dan nilai. Kunci harus berupa string. Nilai dapat berupa jenis apa saja. | 
| Null | NullSeperti yang didefinisikan oleh JSON. Ini adalah nilai aktual yang mewakili tidak adanya nilai. Anda dapat secara eksplisit membuat Null nilai dengan menggunakan Null kata kunci dalam pernyataan SQL Anda. Misalnya: "SELECT NULL AS n FROM 'topic/subtopic'"  | 
| Undefined |  Bukan nilai. Ini tidak dapat direpresentasikan secara eksplisit di JSON kecuali dengan menghilangkan nilainya. Misalnya, dalam objek`{"foo": null}`, kunci “foo” mengembalikan NULL, tetapi kunci “bar” kembali. `Undefined` Secara internal, bahasa SQL memperlakukan `Undefined` sebagai nilai, tetapi tidak dapat direpresentasikan dalam JSON, jadi ketika diserialkan ke JSON, hasilnya adalah. `Undefined` <pre> {"foo":null, "bar":undefined} </pre> diserialisasikan ke JSON sebagai: <pre> {"foo":null}</pre> Demikian pula, `Undefined` dikonversi ke string kosong ketika diserialisasikan dengan sendirinya. Fungsi yang dipanggil dengan argumen yang tidak valid (misalnya, jenis yang salah, jumlah argumen yang salah, dan sebagainya) kembali. `Undefined`   | 

## Konversi
<a name="iot-sql-conversions"></a>

Tabel berikut mencantumkan hasil ketika nilai dari satu jenis dikonversi ke jenis lain (ketika nilai dari jenis yang salah diberikan ke fungsi). Misalnya, jika fungsi nilai absolut “abs” (yang mengharapkan `Int` atau`Decimal`) diberikan a`String`, ia mencoba mengonversi `String` ke a`Decimal`, mengikuti aturan ini. Dalam hal ini, 'abs (“-5.123") 'diperlakukan sebagai 'abs (-5.123)'.

**catatan**  
Tidak ada upaya konversi ke`Array`,, `Object``Null`, atau. `Undefined`


**Untuk desimal**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | A Decimal tanpa titik desimal. | 
| Decimal | Nilai sumbernya. | 
| Boolean | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah true = 1.0, false = 0.0.) | 
| String | Mesin SQL mencoba mengurai string sebagai file. Decimal AWS IoT mencoba mengurai string yang cocok dengan ekspresi reguler:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis ke s. Decimal | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Null. | 
| Tidak terdefinisi | Undefined. | 


**Untuk int**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Nilai sumbernya. | 
| Decimal | Nilai sumber dibulatkan ke yang terdekatInt. | 
| Boolean | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah true = 1.0, false = 0.0.) | 
| String |  Mesin SQL mencoba mengurai string sebagai file. Decimal AWS IoT mencoba mengurai string yang cocok dengan ekspresi reguler:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi Decimal s. AWS IoT mencoba mengonversi String ke aDecimal, dan kemudian memotong tempat desimal untuk membuat. Decimal Int | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Null. | 
| Tidak terdefinisi | Undefined. | 


**Untuk Boolean**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Undefined. (Anda dapat secara eksplisit menggunakan cast fungsi untuk mengubah 0 = False, any\$1nonzero\$1value = True.) | 
| Decimal | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah 0 = False, any\$1nonzero\$1value = True.) | 
| Boolean | Nilai aslinya. | 
| String | “True"=true dan “false"=false (case insensitive). Nilai string lainnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Untuk string**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Sebuah representasi string dari Int dalam notasi standar. | 
| Decimal | String yang mewakili Decimal nilai, mungkin dalam notasi ilmiah.  | 
| Boolean | “benar” atau “salah”. Semua huruf kecil. | 
| String | Nilai aslinya. | 
| Array | ArraySerial ke JSON. String yang dihasilkan adalah daftar yang dipisahkan koma, terlampir dalam tanda kurung siku. A String dikutip. ADecimal,Int,Boolean, dan Null tidak. | 
| Objek | Objek diserialisasikan ke JSON. String yang dihasilkan adalah daftar pasangan kunci-nilai yang dipisahkan koma dan dimulai dan diakhiri dengan kurawal kurawal. A String dikutip. ADecimal,Int,Boolean, dan Null tidak. | 
| Null | Undefined. | 
| Tidak terdefinisi | Tidak terdefinisi. | 

# Operator
<a name="iot-sql-operators"></a>

Operator berikut dapat digunakan dalam klausa SELECT dan WHERE. 

## DAN operator
<a name="iot-sql-operators-and"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi dan logis. Mengembalikan nilai true jika operan kiri dan kanan benar. Jika tidak, mengembalikan false. `Boolean`diperlukan operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*` expression AND expression`.


**DAN operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. Benar jika kedua operan benar. Kalau tidak, salah. | 
| String/Boolean | String/Boolean | Jika semua string “benar” atau “salah” (case insensitive), mereka dikonversi ke Boolean dan diproses secara normal sebagai. boolean AND boolean | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## ATAU operator
<a name="iot-sql-operators-or"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi OR logis. Mengembalikan nilai true jika operan kiri atau kanan benar. Jika tidak, mengembalikan false. `Boolean`diperlukan operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*` expression OR expression`.


**ATAU operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. Benar jika salah satu operan benar. Kalau tidak, salah. | 
| String/Boolean | String/Boolean | Jika semua string “benar” atau “salah” (case insensitive), mereka dikonversi ke Boolean dan diproses secara normal sebagai. boolean OR boolean | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## BUKAN operator
<a name="iot-sql-operators-not"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi NOT logis. Mengembalikan nilai true jika operan palsu. Jika tidak, mengembalikan true. Diperlukan `Boolean` operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*`NOT expression`.


**BUKAN operator**  

| operan | Output | 
| --- | --- | 
| Boolean | Boolean. Benar jika operan salah. Kalau tidak, benar. | 
| String | Jika string adalah “true” atau “false” (case insensitive), itu dikonversi ke nilai Boolean yang sesuai, dan nilai sebaliknya dikembalikan. | 
| Nilai lainnya | Undefined. | 

## Di operator
<a name="iot-sql-operators-in"></a>

Mengembalikan `Boolean` hasil. Anda dapat menggunakan operator IN dalam klausa WHERE untuk memeriksa apakah nilai cocok dengan nilai apa pun dalam array. Ia mengembalikan true jika kecocokan ditemukan, dan false sebaliknya.

*Sintaks:*` expression IN expression`.


**Di operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal/String/Array/Object | Array | Benar jika Object elemen IntegerDecimal/String/Array//ditemukan dalam array. Kalau tidak, salah. | 

*Contoh:*

```
SQL: "select * from 'a/b' where 3 in arr"

JSON: {"arr":[1, 2, 3, "three", 5.7, null]}
```

Dalam contoh ini, klausa kondisi `where 3 in arr` akan mengevaluasi ke true karena 3 hadir dalam array bernama`arr`. Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi. Contoh ini juga menunjukkan bahwa array bisa heterogen.

## Operator EXISTS
<a name="iot-sql-operators-exists"></a>

Mengembalikan `Boolean` hasil. Anda dapat menggunakan operator EXISTS dalam klausa bersyarat untuk menguji keberadaan elemen dalam subquery. Ia mengembalikan true jika subquery mengembalikan satu atau lebih elemen dan false jika subquery mengembalikan tidak ada elemen. 

*Sintaks:*` expression`.

*Contoh:*

```
SQL: "select * from 'a/b' where exists (select * from arr as a where a = 3)"

JSON: {"arr":[1, 2, 3]}
```

Dalam contoh ini, klausa kondisi `where exists (select * from arr as a where a = 3)` akan mengevaluasi ke true karena 3 hadir dalam array bernama`arr`. Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi.

*Contoh:*

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

Dalam contoh ini, klausa kondisi `where exists (select * from e as e where foo = 2)` akan mengevaluasi ke true karena array `e` dalam objek JSON berisi objek. `{"foo":2}` Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi.

## > operator
<a name="iot-sql-operators-greater"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri lebih besar dari operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression > expression`.


**> operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri lebih besar dari operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri lebih besar dari operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined. | Undefined. | 

## >= operator
<a name="iot-sql-operators-greater-equal"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri lebih besar dari atau sama dengan operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression >= expression`.


**>= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri lebih besar dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri lebih besar dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined. | Undefined. | 

## < operator
<a name="iot-sql-operators-less"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri kurang dari operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression < expression`.


**< operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri kurang dari operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri kurang dari operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined | Undefined | 

## <= operator
<a name="iot-sql-operators-less-equal"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri kurang dari atau sama dengan operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression <= expression`.


**<= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri kurang dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri kurang dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined | Undefined | 

## <> operator
<a name="iot-sql-operators-not-eq"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri dan kanan tidak sama. Jika tidak, mengembalikan false. 

*Sintaks:*` expression <> expression`.


**<> operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. | 
| Decimal | Decimal | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. Intdiubah menjadi Decimal sebelum dibandingkan. | 
| String | String | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. | 
| Array | Array | Benar jika item di setiap operan tidak sama dan tidak dalam urutan yang sama. Jika tidak, salah | 
| Objek | Objek | Benar jika kunci dan nilai masing-masing operan tidak sama. Kalau tidak, salah. Urutan tidak keys/values penting. | 
| Null | Null | Salah. | 
| Nilai apa pun | Undefined | Tidak terdefinisi. | 
| Undefined | Nilai apa pun | Tidak terdefinisi. | 
| Tipe tidak cocok | Tipe tidak cocok | Benar. | 

## = operator
<a name="iot-sql-operators-eq"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika kedua operan kiri dan kanan sama. Jika tidak, mengembalikan false. 

*Sintaks:*` expression = expression`.


**= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. | 
| Decimal | Decimal | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. Intdiubah menjadi Decimal sebelum dibandingkan. | 
| String | String | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. | 
| Array | Array | Benar jika item di setiap operan sama dan dalam urutan yang sama. Kalau tidak, salah. | 
| Objek | Objek | Benar jika kunci dan nilai masing-masing operan sama. Kalau tidak, salah. Urutan tidak keys/values penting. | 
| Nilai apa pun | Undefined | Undefined. | 
| Undefined | Nilai apa pun | Undefined. | 
| Tipe tidak cocok | Tipe tidak cocok | Salah. | 

## \$1 operator
<a name="iot-sql-operators-plus"></a>

“\$1” adalah operator yang kelebihan beban. Ini dapat digunakan untuk penggabungan string atau penambahan. 

*Sintaks:*` expression + expression`.


**\$1 operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| String | Nilai apa pun | Mengkonversi operan kanan ke string dan menggabungkan itu ke akhir operan kiri. | 
| Nilai apa pun | String | Mengkonversi operan kiri ke string dan menggabungkan operan kanan ke akhir operan kiri dikonversi. | 
| Int | Int | Intnilai. Menambahkan operan bersama-sama. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Menambahkan operan bersama-sama. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## - operator
<a name="iot-sql-operators-sub"></a>

Mengurangi operan kanan dari operan kiri. 

*Sintaks:*` expression - expression`.


**- operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengurangi operan kanan dari operan kiri. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Mengurangi operan kanan dari operan kiri. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengurangi operan kanan dari operan kiri. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## \$1 operator
<a name="iot-sql-operators-mult"></a>

Mengalikan operan kiri dengan operan kanan. 

*Sintaks:*` expression * expression`.


**\$1 operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengalikan operan kiri dengan operan kanan. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Mengalikan operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengalikan operan kiri dengan operan kanan. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## /operator
<a name="iot-sql-operators-div"></a>

Membagi operan kiri dengan operan kanan. 

*Sintaks:*` expression / expression`.


**/operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Membagi operan kiri dengan operan kanan. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Membagi operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Membagi operan kiri dengan operan kanan. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## % operator
<a name="iot-sql-operators-mod"></a>

Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. 

*Sintaks:*` expression % expression`.


**% operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

# Fungsi
<a name="iot-sql-functions"></a>

Anda dapat menggunakan fungsi bawaan berikut dalam klausa SELECT atau WHERE dari ekspresi SQL Anda.

Fungsi eksternal berikut ditagih setara dengan tindakan aturan: [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), dan [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). Anda juga ditagih untuk [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)fungsi hanya ketika Anda [mendekode pesan Protobuf ke](https://docs.aws.amazon.com//iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf) JSON. Untuk detail selengkapnya, lihat [halaman AWS IoT Core harga](https://aws.amazon.com/iot-core/pricing/).

## abs (Desimal)
<a name="iot-func-abs"></a>

Mengembalikan nilai absolut dari sebuah angka. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `abs(-5)` mengembalikan 5.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai absolut dari argumen. | 
| Decimal | Decimal, nilai absolut dari argumen. | 
| Boolean | Undefined. | 
| String | Decimal. Hasilnya adalah nilai absolut dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## akuntid ()
<a name="iot-sql-function-accountid"></a>

Mengembalikan ID akun yang memiliki aturan ini sebagai`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`accountid() `= “123456789012"

## acos (Desimal)
<a name="iot-func-acos"></a>

Mengembalikan cosinus terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `acos(0)` = 1,5707963267948966 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal, kosinus terbalik dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## asin (Desimal)
<a name="iot-func-asin"></a>

Mengembalikan sinus terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `asin(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## atan (Desimal)
<a name="iot-func-atan"></a>

Mengembalikan tangen terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `atan(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), singgung terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), singgung terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal, singgung kebalikan dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## atan2 (Desimal, Desimal)
<a name="iot-func-atan2"></a>

Mengembalikan sudut, dalam radian, antara sumbu x positif dan titik (x, y) yang didefinisikan dalam dua argumen.  Sudutnya positif untuk sudut berlawanan arah jarum jam (setengah bidang atas, y > 0), dan negatif untuk sudut searah jarum jam (setengah bidang bawah, y < 0). `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `atan2(1, 0)` = 1,5707963267948966


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Decimal(dengan presisi ganda), sudut antara sumbu x dan titik (x, y) yang ditentukan. | 
| Int/Decimal/String | Int/Decimal/String | Decimal, singgung terbalik dari titik yang dijelaskan. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## aws\$1lambda (FunctionARN, InputJson)
<a name="iot-func-aws-lambda"></a>

 Memanggil fungsi Lambda yang ditentukan lewat `inputJson` ke fungsi Lambda dan mengembalikan JSON yang dihasilkan oleh fungsi Lambda.


**Pendapat**  

| Pendapat | Deskripsi | 
| --- | --- | 
| functionArn |  ARN dari fungsi Lambda untuk memanggil. Fungsi Lambda harus mengembalikan data JSON.  | 
| inputJson |  Input JSON diteruskan ke fungsi Lambda. Untuk meneruskan query objek bersarang dan literal, Anda harus menggunakan SQL versi 2016-03-23.  | 

Anda harus memberikan AWS IoT `lambda:InvokeFunction` izin untuk menjalankan fungsi Lambda yang ditentukan. Contoh berikut menunjukkan cara memberikan `lambda:InvokeFunction` izin menggunakan AWS CLI:

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

Berikut ini adalah argumen untuk **add-permission** perintah:

--fungsi-nama   
Nama fungsi Lambda. Anda menambahkan izin baru untuk memperbarui kebijakan sumber daya fungsi.

--wilayah  
 Wilayah AWS Dari akun Anda.

--kepala sekolah  
Kepala sekolah yang mendapatkan izin. Ini harus `iot.amazonaws.com` untuk mengizinkan AWS IoT izin memanggil fungsi Lambda.

--sumber-arn  
ARN dari aturan tersebut. Anda dapat menggunakan **get-topic-rule** AWS CLI perintah untuk mendapatkan ARN aturan.

--source-akun  
Di Akun AWS mana aturan didefinisikan.

--pernyataan-id  
Pengidentifikasi pernyataan unik.

--tindakan  
Tindakan Lambda yang ingin Anda izinkan dalam pernyataan ini. AWS IoT Untuk memungkinkan menjalankan fungsi Lambda, tentukan. `lambda:InvokeFunction`

**penting**  
Jika Anda menambahkan izin untuk AWS IoT prinsipal tanpa memberikan `source-arn` atau`source-account`, aturan apa pun Akun AWS yang membuat aturan dengan tindakan Lambda Anda dapat memicu aturan untuk menjalankan fungsi Lambda Anda. AWS IoT Untuk informasi selengkapnya, lihat Model [Izin Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html).

Diberikan muatan pesan JSON seperti:

```
{
    "attribute1": 21,
    "attribute2": "value"
}
```

`aws_lambda`Fungsi tersebut dapat digunakan untuk memanggil fungsi Lambda sebagai berikut.

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", {"payload":attribute1}) as output FROM 'topic-filter'
```

Jika Anda ingin meneruskan muatan pesan MQTT lengkap, Anda dapat menentukan payload JSON menggunakan '\$1', seperti contoh berikut.

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", *) as output FROM 'topic-filter'
```

`payload.inner.element`memilih data dari pesan yang dipublikasikan pada topik 'topik/subtopik'.

`some.value`memilih data dari output yang dihasilkan oleh fungsi Lambda.

**catatan**  
 Mesin aturan membatasi durasi eksekusi fungsi Lambda. Panggilan fungsi Lambda dari aturan harus diselesaikan dalam 2000 milidetik. 

## bit (Int, Int)
<a name="iot-func-bitand"></a>

Melakukan bitwise AND pada representasi bit dari dua argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `bitand(13, 5)` = 5


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, bitwise DAN dari dua argumen. | 
| Int/Decimal | Int/Decimal | Int, bitwise DAN dari dua argumen. Semua non- Int angka dibulatkan ke bawah ke yang terdekatInt. Jika salah satu argumen tidak dapat dikonversi menjadiInt, hasilnya adalahUndefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, bitwise DAN dari dua argumen. Semua string dikonversi ke desimal dan dibulatkan ke bawah ke terdekat. Int Jika konversi gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## bitor (Int, Int)
<a name="iot-func-bitor"></a>

Melakukan bitwise OR dari representasi bit dari dua argumen. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `bitor(8, 5)` = 13


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, bitwise OR dari dua argumen. | 
| Int/Decimal | Int/Decimal | Int, bitwise OR dari dua argumen. Semua non- Int angka dibulatkan ke bawah ke yang terdekatInt. Jika konversi gagal, hasilnya adalahUndefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, bitwise OR pada dua argumen. Semua string dikonversi ke desimal dan dibulatkan ke bawah ke terdekat. Int Jika konversi gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## bitxor (Int, Int)
<a name="iot-func-xbitor"></a>

Melakukan XOR bitwise pada representasi bit dari dua argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `bitor(13, 5)` = 8


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, XOR bitwise pada dua argumen. | 
| Int/Decimal | Int/Decimal | Int, XOR bitwise pada dua argumen. Non- Int angka dibulatkan ke bawah ke yang terdekatInt. | 
| Int/Decimal/String | Int/Decimal/String | Int, XOR bitwise pada dua argumen. string diubah menjadi desimal dan dibulatkan ke bawah ke terdekat. Int Jika ada konversi yang gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## bitnot (Int)
<a name="iot-func-bitnot"></a>

Melakukan bitwise NOT pada representasi bit dari argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `bitnot(13)` = 2


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, sedikit demi sedikit dari argumen. | 
| Decimal | Int, sedikit demi sedikit dari argumen. DecimalNilai dibulatkan ke bawah ke yang terdekatInt. | 
| String | Int, sedikit demi sedikit dari argumen. String dikonversi menjadi desimal dan dibulatkan ke bawah ke yang terdekat. Int Jika ada konversi yang gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya. | 

## pemeran ()
<a name="iot-sql-function-cast"></a>

Mengkonversi nilai dari satu tipe data ke yang lain. Pemeran berperilaku sebagian besar seperti konversi standar, dengan penambahan kemampuan untuk mentransmisikan angka ke atau dari Booleans. Jika AWS IoT tidak dapat menentukan cara melemparkan satu jenis ke jenis lainnya, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Format: pemeran (*value*as*type*).

Contoh:

`cast(true as Int) `= 1

Kata kunci berikut mungkin muncul setelah “as” saat menelepon`cast`:


**Untuk versi SQL 2015-10-08 dan 2016-03-23**  

| Kata Kunci | Hasil | 
| --- | --- | 
| String | Memberikan nilai keString. | 
| Nvarchar | Memberikan nilai keString. | 
| Teks | Memberikan nilai keString. | 
| Nteks | Memberikan nilai keString. | 
| varchar | Memberikan nilai keString. | 
| Int | Memberikan nilai keInt. | 
| Bilangan Bulat | Memberikan nilai keInt. | 
| Ganda | Memberikan nilai ke Decimal (dengan presisi ganda). | 


**Selain itu, untuk versi SQL 2016-03-23**  

| Kata Kunci | Hasil | 
| --- | --- | 
| Decimal | Memberikan nilai keDecimal. | 
| Bool | Memberikan nilai keBoolean. | 
| Boolean | Memberikan nilai keBoolean. | 

Aturan casting:


**Cast ke desimal**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | A Decimal tanpa titik desimal. | 
| Decimal |  Nilai sumbernya.  Dengan SQL V2 (2016-03-23), nilai numerik yang merupakan bilangan bulat, seperti`10.0`, mengembalikan `Int` nilai (`10`) alih-alih nilai yang diharapkan (). `Decimal` `10.0` Untuk secara andal melemparkan nilai numerik bilangan bulat sebagai `Decimal` nilai, gunakan SQL V1 (2015-10-08) untuk pernyataan kueri aturan.   | 
| Boolean | benar = 1,0, salah = 0,0. | 
| String | Mencoba mengurai string sebagai. Decimal AWS IoT mencoba mengurai string yang cocok dengan regex: ^-? \$1 d\$1 (\$1. \$1 d\$1)? ((? i) E-? \$1 d\$1)? \$1. “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi desimal. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Cast ke int**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Nilai sumbernya. | 
| Decimal | Nilai sumber, dibulatkan ke bawah ke yang terdekatInt. | 
| Boolean | benar = 1,0, salah = 0,0. | 
| String | Mencoba mengurai string sebagai. Decimal AWS IoT mencoba mengurai string yang cocok dengan regex: ^-? \$1 d\$1 (\$1. \$1 d\$1)? ((? i) E-? \$1 d\$1)? \$1. “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi desimal. AWS IoT mencoba untuk mengubah string ke a Decimal dan membulatkan ke bawah ke terdekatInt. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Melempar ke `Boolean`**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | 0 = Salah, any\$1nonzero\$1value = Benar. | 
| Decimal | 0 = Salah, any\$1nonzero\$1value = Benar. | 
| Boolean | Nilai sumbernya. | 
| String | “true” = True dan “false” = False (case insensitive). Nilai string lainnya =Undefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Cast ke string**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Sebuah representasi string dariInt, dalam notasi standar. | 
| Decimal | String yang mewakili Decimal nilai, mungkin dalam notasi ilmiah. | 
| Boolean | “benar” atau “salah”, semua huruf kecil. | 
| String | Nilai sumbernya. | 
| Array | Array diserialisasikan ke JSON. String hasil adalah daftar dipisahkan koma yang diapit tanda kurung siku. Stringdikutip. Decimal,Int, dan Boolean tidak. | 
| Objek | Objek diserialisasikan ke JSON. String JSON adalah daftar pasangan kunci-nilai yang dipisahkan koma dan dimulai dan diakhiri dengan kurawal kurawal. Stringdikutip. Decimal,Int,Boolean, dan Null tidak. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## ceil (Desimal)
<a name="iot-func-ceil"></a>

Membulatkan yang diberikan `Decimal` ke yang terdekat`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`ceil(1.2)`= 2

`ceil(-1.2)`= 1


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai argumen. | 
| Decimal | Int, Decimal nilainya dibulatkan ke yang terdekatInt. | 
| String | Int. String dikonversi ke Decimal dan dibulatkan ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

## chr (Tali)
<a name="iot-func-chr"></a>

Mengembalikan karakter ASCII yang sesuai dengan argumen yang diberikan`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`chr(65)`= “A”.

`chr(49)`= “1".


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Karakter yang sesuai dengan nilai ASCII yang ditentukan. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Decimal | Karakter yang sesuai dengan nilai ASCII yang ditentukan. DecimalArgumen dibulatkan ke bawah ke yang terdekatInt. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Boolean | Undefined. | 
| String | Jika String dapat dikonversi ke aDecimal, itu dibulatkan ke bawah ke terdekatInt. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Nilai lainnya | Undefined. | 

## klien ()
<a name="iot-sql-function-clientid"></a>

Mengembalikan ID klien MQTT yang mengirim pesan, atau `n/a` jika pesan tidak dikirim melalui MQTT. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`clientid() `= “123456789012"

## concat ()
<a name="iot-func-concat"></a>

Menghubungkan array atau string. Fungsi ini menerima sejumlah argumen dan mengembalikan a `String` atau. `Array` Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`concat() ` = `Undefined`.

`concat(1) `= “1".

`concat([1, 2, 3], 4)`= [1, 2, 3, 4].

`concat([1, 2, 3], "hello")`= [1, 2, 3, “halo"]

`concat("con", "cat")`= “concat” 

`concat(1, "hello")`= “1halo”

`concat("he","is","man")`= “heisman”

`concat([1, 2, 3], "hello", [4, 5, 6])`= [1, 2, 3, “halo”, 4, 5, 6]


****  

| Jumlah argumen | Hasil | 
| --- | --- | 
| 0 | Undefined. | 
| 1 | Argumen dikembalikan tanpa dimodifikasi. | 
| 2\$1 |  Jika ada argumen`Array`, hasilnya adalah array tunggal yang berisi semua argumen. Jika tidak ada argumen yang merupakan array, dan setidaknya satu argumen adalah a`String`, hasilnya adalah gabungan dari `String` representasi semua argumen. Argumen dikonversi ke string menggunakan konversi standar yang sebelumnya terdaftar.  | 

## cos (Desimal)
<a name="iot-func-cos"></a>

Mengembalikan cosinus dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`cos(0)`= 1.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), kosinus argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## cosh (Desimal)
<a name="iot-func-cosh"></a>

Mengembalikan kosinus hiperbolik dari suatu angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `cosh(2.3)` = 5.037220649268761. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## decode (nilai, decodingScheme)
<a name="iot-sql-decode-base64"></a>

Gunakan `decode` fungsi untuk memecahkan kode nilai yang dikodekan. Jika string yang diterjemahkan adalah dokumen JSON, objek yang dapat dialamatkan dikembalikan. Jika tidak, string yang diterjemahkan dikembalikan sebagai string. Fungsi mengembalikan NULL jika string tidak dapat diterjemahkan. Fungsi ini mendukung decoding string yang dikodekan base64 dan format pesan Protocol Buffer (protobuf).

Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

nilai  
Nilai string atau salah satu ekspresi yang valid, seperti yang didefinisikan dalam[AWS IoT Referensi SQL](iot-sql-reference.md), yang mengembalikan string.

DecodingScheme  
String literal yang mewakili skema yang digunakan untuk memecahkan kode nilai. Saat ini, hanya `'base64'` dan `'proto'` didukung.

### Decoding string yang dikodekan base64
<a name="iot-sql-decode-example"></a>

Dalam contoh ini, payload pesan menyertakan nilai yang dikodekan.

```
{
    encoded_temp: "eyAidGVtcGVyYXR1cmUiOiAzMyB9Cg=="
}
```

`decode`Fungsi dalam pernyataan SQL ini menerjemahkan nilai dalam payload pesan.

```
SELECT decode(encoded_temp,"base64").temperature AS temp from 'topic/subtopic'
```

Decoding `encoded_temp` nilai menghasilkan dokumen JSON valid berikut, yang memungkinkan pernyataan SELECT membaca nilai suhu.

```
{ "temperature": 33 }
```

Hasil dari pernyataan SELECT dalam contoh ini ditampilkan di sini.

```
{ "temp": 33 }
```

Jika nilai decoded bukan dokumen JSON yang valid, nilai decoded akan dikembalikan sebagai string.

### Decoding payload pesan protobuf
<a name="iot-sql-decode-protobuf"></a>

Anda dapat menggunakan fungsi decode SQL untuk mengkonfigurasi Aturan yang dapat memecahkan kode payload pesan protobuf Anda. Untuk informasi selengkapnya, lihat [Menguraikan muatan pesan protobuf](binary-payloads.md#binary-payloads-protobuf).

**penting**  
Jika Anda menghilangkan `source‐arn` atau `source‐account` saat menyetel izin untuk AWS IoT prinsipal, apa pun Akun AWS dapat memanggil fungsi Decode Anda melalui aturan lain. AWS IoT Untuk mengamankan fungsi Anda, lihat [Kebijakan Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.

Tanda tangan fungsi terlihat seperti berikut:

```
decode(<ENCODED DATA>, 'proto', '<S3 BUCKET NAME>', '<S3 OBJECT KEY>', '<PROTO NAME>', '<MESSAGE TYPE>')            
```

`ENCODED DATA`  
Menentukan data protobuf-dikodekan yang akan diterjemahkan. Jika seluruh pesan yang dikirim ke Aturan adalah data yang disandikan protobuf, Anda dapat mereferensikan payload masuk biner mentah menggunakan. `*` Jika tidak, bidang ini harus berupa string JSON yang dikodekan basis-64 dan referensi ke string dapat diteruskan secara langsung.  
1) Untuk memecahkan kode muatan masuk protobuf biner mentah:  

```
decode(*, 'proto', ...)
```
2) Untuk memecahkan kode pesan yang disandikan protobuf yang diwakili oleh string berkode base64 'a.b':   

```
decode(a.b, 'proto', ...)
```

`proto`  
Menentukan data yang akan diterjemahkan dalam format pesan protobuf. Jika Anda menentukan `base64` alih-alih`proto`, fungsi ini akan memecahkan kode string yang dikodekan base64 sebagai JSON.

`S3 BUCKET NAME`  
Nama bucket Amazon S3 tempat Anda mengunggah file Anda. `FileDescriptorSet`

`S3 OBJECT KEY`  
Kunci objek yang menentukan `FileDescriptorSet` file dalam bucket Amazon S3.

`PROTO NAME`  
Nama `.proto` file (tidak termasuk ekstensi) dari mana `FileDescriptorSet` file itu dihasilkan.

`MESSAGE TYPE`  
Nama struktur pesan protobuf dalam `FileDescriptorSet` file, yang data yang akan didekodekan harus sesuai.

Contoh ekspresi SQL menggunakan fungsi decode SQL dapat terlihat seperti berikut:

```
SELECT VALUE decode(*, 'proto', 's3-bucket', 'messageformat.desc', 'myproto', 'messagetype') FROM 'some/topic'
```
+ `*`

  Merupakan payload masuk biner, yang sesuai dengan jenis pesan protobuf yang disebut. `mymessagetype`
+ `messageformat.desc`

  `FileDescriptorSet`File yang disimpan dalam ember Amazon S3 bernama. `s3-bucket` 
+ `myproto`

  `.proto`File asli yang digunakan untuk menghasilkan `FileDescriptorSet` file bernama`myproto.proto`.
+ `messagetype`

  Jenis pesan yang disebut `messagetype` (bersama dengan dependensi yang diimpor) seperti yang didefinisikan dalam. `myproto.proto`

## encode (nilai, EncodingScheme)
<a name="iot-sql-encode-payload"></a>

Gunakan `encode` fungsi untuk menyandikan payload, yang berpotensi menjadi data non-JSON, ke dalam representasi string berdasarkan skema pengkodean. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

nilai  
Salah satu ekspresi yang valid, sebagaimana didefinisikan dalam[AWS IoT Referensi SQL](iot-sql-reference.md). Anda dapat menentukan \$1 untuk menyandikan seluruh muatan, terlepas dari apakah itu dalam format JSON. Jika Anda memberikan ekspresi, hasil evaluasi dikonversi ke string sebelum dikodekan.

encodingScheme  
String literal yang mewakili skema pengkodean yang ingin Anda gunakan. Saat ini, hanya `'base64'` didukung.

## endswith (String, String)
<a name="iot-func-endswith"></a>

Mengembalikan `Boolean` menunjukkan apakah `String` argumen pertama berakhir dengan `String` argumen kedua. Jika salah satu argumen adalah `Null` atau`Undefined`, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `endswith("cat","at")` = benar.


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | String | Benar jika argumen pertama berakhir pada argumen kedua. Kalau tidak, salah. | 
| Nilai lainnya | Nilai lainnya | Kedua argumen dikonversi ke string menggunakan aturan konversi standar. Benar jika argumen pertama berakhir pada argumen kedua. Kalau tidak, salah. Jika salah satu argumen adalah Null atauUndefined, hasilnya adalahUndefined. | 

## exp (Desimal)
<a name="iot-func-exp"></a>

Mengembalikan e diangkat ke `Decimal` argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `exp(1)` = e. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), e ^ argumen. | 
| Decimal | Decimal(dengan presisi ganda), e ^ argumen. | 
| String | Decimal(dengan presisi ganda), e ^ argumen. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Nilai lainnya | Undefined. | 

## lantai (Desimal)
<a name="iot-func-floor"></a>

Membulatkan yang diberikan `Decimal` ke bawah ke yang terdekat`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`floor(1.2)`= 1

`floor(-1.2)`= 2


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai argumen. | 
| Decimal | Int, Decimal nilai dibulatkan ke bawah ke yang terdekatInt. | 
| String | Int. String dikonversi ke Decimal dan dibulatkan ke bawah ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

## memperoleh
<a name="iot-sql-function-get"></a>

Mengekstrak nilai dari tipe seperti koleksi (Array, String, Object). Tidak ada konversi yang diterapkan pada argumen pertama. Konversi berlaku seperti yang didokumentasikan dalam tabel ke argumen kedua. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`get(["a", "b", "c"], 1) `= “b”

`get({"a":"b"}, "a")`= “b”

`get("abc", 0)`= “a”


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| Array | Tipe apa pun (dikonversi keInt) | Item pada indeks berbasis 0 dari yang Array disediakan oleh argumen kedua (dikonversi keInt). Jika konversi tidak berhasil, hasilnya adalahUndefined. Jika indeks berada di luar batas Array (negatif atau >= array.length), hasilnya adalah. Undefined | 
| String | Tipe apa pun (dikonversi keInt) | Karakter pada indeks 0 berbasis string yang disediakan oleh argumen kedua (dikonversi keInt). Jika konversi tidak berhasil, hasilnya adalahUndefined. Jika indeks berada di luar batas string (negatif atau >= string.length), hasilnya adalah. Undefined | 
| Objek | String(tidak ada konversi yang diterapkan) | Nilai yang disimpan dalam objek argumen pertama yang sesuai dengan kunci string disediakan sebagai argumen kedua. | 
| Nilai lainnya | Nilai apa pun | Undefined. | 

## get\$1dynamodb (TableName,,,,, roLearn partitionKeyName) partitionKeyValue sortKeyName sortKeyValue
<a name="iot-sql-function-get-dynamodb"></a>

Mengambil data dari tabel DynamoDB. `get_dynamodb()`memungkinkan Anda untuk query tabel DynamoDB sementara aturan dievaluasi. Anda dapat memfilter atau menambah muatan pesan menggunakan data yang diambil dari DynamoDB. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

`get_dynamodb()`mengambil parameter berikut:

tableName  
Nama tabel DynamoDB untuk query.

partitionKeyName  
Nama kunci partisi. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

partitionKeyValue  
Nilai kunci partisi yang digunakan untuk mengidentifikasi catatan. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

sortKeyName  
(Opsional) Nama kunci sortir. Parameter ini diperlukan hanya jika tabel DynamoDB query menggunakan kunci komposit. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

sortKeyValue  
(Opsional) Nilai kunci sortir. Parameter ini diperlukan hanya jika tabel DynamoDB query menggunakan kunci komposit. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

roleArn  
ARN dari peran IAM yang memberikan akses ke tabel DynamoDB. Mesin aturan mengasumsikan peran ini untuk mengakses tabel DynamoDB atas nama Anda. Hindari menggunakan peran yang terlalu permisif. Berikan peran hanya izin yang diperlukan oleh aturan. Berikut ini adalah contoh kebijakan yang memberikan akses ke satu tabel DynamoDB.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dynamodb:GetItem",
            "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/table-name"
        }
    ]
}
```

Sebagai contoh cara menggunakan`get_dynamodb()`, katakanlah Anda memiliki tabel DynamoDB yang berisi ID perangkat dan informasi lokasi untuk semua perangkat yang terhubung. AWS IoT Pernyataan SELECT berikut menggunakan `get_dynamodb()` fungsi untuk mengambil lokasi untuk ID perangkat yang ditentukan:

`SELECT *, get_dynamodb("InServiceDevices", "deviceId", id, "arn:aws:iam::12345678910:role/getdynamo").location AS location FROM 'some/topic' `

**catatan**  
Anda dapat memanggil maksimum `get_dynamodb()` satu kali per pernyataan SQL. Memanggil `get_dynamodb()` beberapa kali dalam satu pernyataan SQL menyebabkan aturan berakhir tanpa menjalankan tindakan apa pun.

## get\$1mqtt\$1property (nama)
<a name="iot-sql-function-get-mqtt-property"></a>

Referensi salah satu MQTT5 header berikut:`contentType`,, `payLoadFormatIndicator``responseTopic`, dan`correlationData`. Fungsi ini mengambil salah satu string literal berikut sebagai argumen:`content_type`,, `format_indicator``response_topic`, dan`correlation_data`. Untuk informasi selengkapnya, lihat tabel **Argumen fungsi** berikut.

ContentType  
String: String yang dikodekan UTF-8 yang menjelaskan isi pesan penerbitan.

payLoadFormatIndikator  
String: Nilai string Enum yang menunjukkan apakah payload diformat sebagai UTF-8. Nilai yang valid adalah `UNSPECIFIED_BYTES` dan `UTF8_DATA`.

ResponseTopik  
String: String yang dikodekan UTF-8 yang digunakan sebagai nama topik untuk pesan respons. Topik respons digunakan untuk menggambarkan topik yang harus dipublikasikan oleh penerima sebagai bagian dari aliran permintaan-respons. Topik tidak boleh mengandung karakter wildcard.

KorelasiData  
String: Data biner berenkode base64 yang digunakan oleh pengirim Pesan Permintaan untuk mengidentifikasi permintaan Pesan Respons saat diterima.

Tabel berikut menunjukkan argumen fungsi yang dapat diterima dan jenis pengembalian terkait untuk `get_mqtt_property` fungsi:


**Argumen fungsi**  

| SQL | Tipe data yang dikembalikan (jika ada) | Tipe data yang dikembalikan (jika tidak ada) | 
| --- | --- | --- | 
| get\$1mqtt\$1property("format\$1indicator") | String (UNSPECIFIED\$1BYTES atau \$1DATA) UTF8 | String (UNSPECIFIED\$1BYTES) | 
| get\$1mqtt\$1property("content\$1type") | String | Tidak terdefinisi | 
| get\$1mqtt\$1property("response\$1topic") | String | Tidak terdefinisi | 
| get\$1mqtt\$1property("correlation\$1data") | base64 dikodekan String | Tidak terdefinisi | 
| get\$1mqtt\$1property("some\$1invalid\$1name") | Tidak terdefinisi | Tidak terdefinisi | 

Contoh berikut Aturan SQL referensi salah satu MQTT5 header berikut:`contentType`,, `payLoadFormatIndicator``responseTopic`, dan. `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 (ekspresi, defaultValue)
<a name="iot-sql-function-get-or-default"></a>

Mengembalikan nilai default dalam parameter kedua jika ditentukan atau lain mengembalikan undefined, ketika ekspresi dalam parameter pertama mengembalikan null, undefined, atau gagal. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

**penting**  
`get_or_default`tidak mendukung muatan non-JSON secara langsung apa adanya. Jika Anda menggunakan payload non-JSON, gunakan fungsi or. `encode` `decode`

`get_or_default()`mengambil parameter berikut:

ekspresi  
Setiap ekspresi valid yang berisi[Jenis Data](iot-sql-data-types.md),[Fungsi](#iot-sql-functions),[Literal](iot-sql-literals.md), [Variabel](iot-sql-set.md#iot-sql-set-usage),[Kueri objek bersarang](iot-sql-nested-queries.md), atau[Ekstensi JSON](iot-sql-json.md). 

defaultValue  
(Opsional) Setiap ekspresi valid yang berisi [Jenis Data](iot-sql-data-types.md)[Fungsi](#iot-sql-functions),[Literal](iot-sql-literals.md),, [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), atau[Ekstensi JSON](iot-sql-json.md). Ini adalah nilai yang akan dikembalikan setiap kali argumen pertama mengembalikan null, undefined, atau gagal.   
Fungsi yang mengambil data dari sumber daya milik pelanggan, seperti get\$1secret, get\$1dynamodb, aws\$1lambda, get\$1thing\$1shadow, decode-protobuf, dan machinelearning\$1predict, tidak diperbolehkan untuk parameter defaultValue.

Tabel berikut menunjukkan argumen fungsi yang dapat diterima untuk setiap argumen dan output yang terkait:


| Argumen pertama | Argumen kedua | Output | 
| --- | --- | --- | 
| Evaluasi yang berhasil | Nilai apa pun atau tidak ditentukan | Nilai argumen pertama. | 
| Tidak terdefinisi, Null, atau kegagalan | Nilai apa pun termasuk Undefined atau Null | Nilai argumen kedua. | 
| Tidak terdefinisi, Null, atau kegagalan | tidak ditentukan | Undefined | 

**Contoh:**

Contoh 1:

Contoh berikut memberikan nilai defaultValue jika tabel DynamoDB atau query gagal:

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

Contoh 2:

Contoh berikut memberikan nilai default aman “UNKNOWN” jika status tidak terdefinisi:

```
SELECT 
  get_or_default( CASE status
    WHEN 'active' THEN 'GOOD'
    WHEN 'inactive' THEN 'BAD'/
    ELSE 'UNKNOWN'
  END, 'UNKNOWN') as status_category
FROM 'topic/subtopic'
```

Contoh 3:

Contoh berikut menunjukkan bagaimana Anda juga dapat menggunakan get\$1or\$1default dengan parameter tunggal. Ini berguna dalam skenario di mana Anda mungkin tidak memiliki nilai default yang jelas, tetapi Anda tidak ingin eksekusi aturan Anda gagal.

```
SELECT 
  get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME") as config
FROM 'device/telemetry'
```

Jika pencarian DynamoDB gagal, eksekusi aturan akan gagal, dan tidak ada tindakan yang akan dieksekusi. Jika SQL berikut digunakan sebagai gantinya:

```
SELECT 
  get_or_default(get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME")) as config
FROM 'device/telemetry'
```

Pernyataan get\$1or\$1default akan dievaluasi`Undefined`, jadi dalam contoh ini pernyataan SELECT secara keseluruhan akan mengevaluasi `{}` dan tindakan aturan apa pun akan dicoba.

**penting**  
Sebaiknya ikuti praktik terbaik ini untuk menjaga keamanan saat menggunakan fungsi ini:  
Hindari menggunakan rahasia hardcode dalam definisi aturan termasuk nilai default
Gunakan AWS Secrets Manager untuk mengelola informasi sensitif

## get\$1registry\$1data (RegistryAPI, ThingName, roLearn)
<a name="iot-sql-function-get-registry-data"></a>

Mengambil data AWS IoT registri dalam AWS IoT aturan. Anda dapat membaca data registri (seperti atribut, tipe benda, dan grup benda milik perangkat) dan menggunakan informasi ini untuk memfilter, memperkaya, atau merutekan pesan secara dinamis. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

`get_registry_data()`mengambil parameter berikut:

RegistryAPI  
API registri dipanggil. Nilai yang valid adalah `DescribeThing` dan `ListThingGroupsForThing`. Nilai-nilai ini harus berupa string konstan.

thingName  
String: Nama benda yang data registrinya ingin Anda ambil.

roleArn  
String: Arn peran dengan `iot:DescribeThing` izin and/or `iot:ListThingGroupsForThing` izin berdasarkan API yang dipanggil.

Format respons `get_registry_data` fungsi ini sama dengan API registri yang disebut. Untuk informasi lebih lanjut, lihat [DescribeThing](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeThing.html)dan [ListThingGroupsForThing](https://docs.aws.amazon.com//iot/latest/apireference/API_ListThingGroupsForThing.html) APIs.

Contoh:

Anda dapat mengambil informasi tipe benda untuk memungkinkan pemfilteran pesan peristiwa AWS IoT Core siklus hidup untuk berbagai hal (dengan nama benda yang cocok dengan id klien MQTT) di mana tipe benda berada. `testenv`

```
SELECT * 
FROM '$aws/events/lifecycle/+' 
WHERE 
    get_registry_data("DescribeThing",clientId,[roleArn]).thingTypeName='testenv'
```

Contoh:

Anda dapat mengambil atribut benda untuk perangkat dengan nama benda `sensor1` untuk semua pesan yang dikirim oleh perangkat `gateway1` gateway.

```
SELECT *, get_registry_data("DescribeThing","sensor1",[roleArn]).attributes.temperature_threhold AS device1_tempthreshold 
FROM home1/gateway1/sensor1/#
```

**catatan**  
Anda dapat memanggil maksimum `get_registry_data()` satu kali per pernyataan SQL dan template substitusi untuk tindakan dan tindakan kesalahan.

## get\$1secret (secretID, secretType, kunci, roLearn)
<a name="iot-sql-function-get-secret"></a>

Mengambil nilai terenkripsi `SecretString` atau `SecretBinary` bidang versi rahasia saat ini di. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) Untuk informasi lebih lanjut tentang membuat dan memelihara rahasia, lihat [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html), [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html), dan [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html).

`get_secret()`mengambil parameter berikut:

secretId  
String: Nama Sumber Daya Amazon (ARN) atau nama ramah rahasia untuk diambil. 

SecretType  
String: Tipe rahasia. Nilai yang valid: `SecretString` \$1 `SecretBinary`.    
SecretString  
+ Untuk rahasia yang Anda buat sebagai objek JSON dengan menggunakan APIs, AWS CLI, atau AWS Secrets Manager konsol:
  + Jika Anda menentukan nilai untuk `key` parameter, fungsi ini mengembalikan nilai kunci yang ditentukan.
  + Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan seluruh objek JSON.
+ Untuk rahasia yang Anda buat sebagai objek non-JSON dengan menggunakan APIs atau: AWS CLI
  + Jika Anda menentukan nilai untuk `key` parameter, fungsi ini gagal dengan pengecualian.
  + Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan isi rahasia.  
SecretBinary  
+ Jika Anda menentukan nilai untuk `key` parameter, fungsi ini gagal dengan pengecualian.
+ Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan nilai rahasia sebagai string UTF-8 yang dikodekan base64.

kunci  
(Opsional) String: Nama kunci di dalam objek JSON yang disimpan di `SecretString` bidang rahasia. Gunakan nilai ini ketika Anda ingin mengambil hanya nilai kunci yang disimpan dalam rahasia, bukan seluruh objek JSON.  
Jika Anda menentukan nilai untuk parameter ini dan rahasia tidak berisi objek JSON di dalam `SecretString` bidangnya, fungsi ini gagal dengan pengecualian.

roleArn  
String: Peran ARN dengan `secretsmanager:GetSecretValue` dan `secretsmanager:DescribeSecret` izin.

**catatan**  
Fungsi ini selalu mengembalikan versi rahasia saat ini (versi dengan `AWSCURRENT` tag). Mesin AWS IoT aturan menyimpan setiap rahasia hingga 15 menit. Akibatnya, mesin aturan dapat memakan waktu hingga 15 menit untuk memperbarui rahasia. Ini berarti bahwa jika Anda mengambil rahasia hingga 15 menit setelah pembaruan dengan AWS Secrets Manager, fungsi ini mungkin mengembalikan versi sebelumnya.  
Fungsi ini tidak diukur, tetapi AWS Secrets Manager dikenakan biaya. Karena mekanisme caching rahasia, mesin aturan kadang-kadang memanggil AWS Secrets Manager. Karena mesin aturan adalah layanan terdistribusi penuh, Anda mungkin melihat beberapa panggilan API Secrets Manager dari mesin aturan selama jendela caching 15 menit.

Contoh:

Anda dapat menggunakan `get_secret` fungsi dalam header otentikasi dalam tindakan aturan HTTPS, seperti pada contoh otentikasi kunci API berikut.

```
"API_KEY": "${get_secret('API_KEY', 'SecretString', 'API_KEY_VALUE', 'arn:aws:iam::12345678910:role/getsecret')}"
```

Untuk informasi selengkapnya tentang tindakan aturan HTTPS, lihat[HTTP](https-rule-action.md).

## get\$1thing\$1shadow (ThingName, ShadoName, roLearn)
<a name="iot-sql-function-get-thing-shadow"></a>

Mengembalikan bayangan tertentu dari hal yang ditentukan. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

thingName  
String: Nama benda yang bayangannya ingin Anda ambil.

shadowName  
(Opsional) String: Nama bayangan. Parameter ini diperlukan hanya saat mereferensikan bayangan bernama.

roleArn  
String: Peran ARN dengan `iot:GetThingShadow` izin.

Contoh:

Saat digunakan dengan bayangan bernama, berikan `shadowName` parameternya.

```
SELECT * from 'topic/subtopic'
WHERE
    get_thing_shadow("MyThing","MyThingShadow","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
    .state.reported.alarm = 'ON'
```

Saat digunakan dengan bayangan yang tidak disebutkan namanya, hilangkan parameternya. `shadowName`

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

Referensi Properti Pengguna, yang merupakan salah satu jenis header properti yang didukung di MQTT5.

UserProperty  
String: Properti pengguna adalah pasangan kunci-nilai. Fungsi ini mengambil kunci sebagai argumen dan mengembalikan array dari semua nilai yang cocok dengan kunci terkait.

**Argumen fungsi**

Untuk Properti Pengguna berikut di header pesan:


| Key | Nilai | 
| --- | --- | 
| beberapa kunci | beberapa nilai | 
| kunci yang berbeda | nilai yang berbeda | 
| beberapa kunci | nilai dengan kunci duplikat | 

Tabel berikut menunjukkan perilaku SQL yang diharapkan:


| SQL | Tipe data yang dikembalikan | Nilai data yang dikembalikan | 
| --- | --- | --- | 
| get\$1user\$1properties ('beberapa kunci') | Array dari String | ['some value', 'value with duplicate key'] | 
| get\$1user\$1properties ('kunci lainnya') | Array dari String | ['a different value'] | 
| get\$1user\$1properties () | Array pasangan kunci-nilai Objek | [\$1'"some key": "some value"'\$1, \$1"other key": "a different value"\$1, \$1"some key": "value with duplicate key"\$1] | 
| get\$1user\$1properties ('kunci tidak ada') | Tidak terdefinisi |  | 

Contoh berikut Aturan SQL referensi Properti Pengguna (jenis header MQTT5 properti) ke payload:

```
SELECT *, get_user_properties('user defined property key') as userProperty
FROM 'some/topic'
```

## Fungsi hashing
<a name="iot-sql-function-hash"></a>

 AWS IoT menyediakan fungsi hashing berikut:
+ md2
+ md5
+ sha1
+ sha224
+ sha256
+ sha384
+ sha512

Semua fungsi hash mengharapkan satu argumen string. Hasilnya adalah nilai hash dari string itu. Konversi string standar berlaku untuk argumen non-string. Semua fungsi hash didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`md2("hello")`= “a9046c73e00331af68917d3804f70655"

`md5("hello")`= “5d41402abc4b2a76b9719d911017c592"

## indexof (String, String)
<a name="iot-sql-function-indexof"></a>

Mengembalikan indeks pertama (0-based) dari argumen kedua sebagai substring dalam argumen pertama. Kedua argumen diharapkan sebagai string. Argumen yang bukan string dikenakan aturan konversi string standar. Fungsi ini tidak berlaku untuk array, hanya untuk string. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`indexof("abcd", "bc") `= 1

## isNull ()
<a name="iot-sql-function-isNull"></a>

Mengembalikan nilai true jika argumen adalah `Null` nilai. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`isNull(5) `= salah.

`isNull(Null) `= benar.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | SALAH | 
| Null | BETUL | 
| Undefined | SALAH | 

## isUndefined ()
<a name="iot-sql-function-isUndefined"></a>

Mengembalikan nilai true jika argumennya`Undefined`. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`isUndefined(5) `= salah.

`isUndefined(floor([1,2,3]))) `= benar.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | SALAH | 
| Undefined | true | 

## panjang (String)
<a name="iot-sql-function-length"></a>

Mengembalikan jumlah karakter dalam string yang disediakan. Aturan konversi standar berlaku untuk `String` non-argumen. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`length("hi")`= 2

`length(false)`= 5

## ln (Desimal)
<a name="iot-func-nln"></a>

Mengembalikan logaritma natural dari argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `ln(e)` = 1. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), log alami argumen. | 
| Decimal | Decimal(dengan presisi ganda), log alami argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), log alami argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## log (Desimal)
<a name="iot-func-log"></a>

Mengembalikan basis 10 logaritma argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `log(100)` = 2.0. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), log dasar 10 argumen. | 
| Decimal | Decimal(dengan presisi ganda), log dasar 10 argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), log dasar 10 argumen. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## lebih rendah (String)
<a name="iot-func-lower"></a>

Mengembalikan versi huruf kecil dari yang diberikan. `String` Argumen non-string dikonversi ke string menggunakan aturan konversi standar. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`lower("HELLO")`= “halo”.

`lower(["HELLO"])`= “[\$1" halo\$1 "]”.

## lpad (Tali, Int)
<a name="iot-func-lpad"></a>

Mengembalikan `String` argumen, empuk di sisi kiri dengan jumlah spasi yang ditentukan oleh argumen kedua. `Int`Argumen harus antara 0 dan 1000. Jika nilai yang diberikan berada di luar rentang yang valid ini, argumen diatur ke nilai valid terdekat (0 atau 1000). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`lpad("hello", 2)` = "`  hello`".

`lpad(1, 3)` = "`   1`"


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | Int | String, yang disediakan String empuk di sisi kiri dengan sejumlah spasi sama dengan yang disediakanInt. | 
| String | Decimal | DecimalArgumen dibulatkan ke bawah ke terdekat Int dan empuk di sebelah kiri dengan jumlah spasi yang ditentukan. String  | 
| String | String | Argumen kedua dikonversi ke aDecimal, yang dibulatkan ke bawah ke terdekatInt, dan empuk dengan spasi nomor yang ditentukan di sebelah kiri. String Jika argumen kedua tidak dapat diubah menjadiInt, hasilnya adalahUndefined.  | 
| Nilai lainnya | Int/Decimal/String | Nilai pertama dikonversi ke a String menggunakan konversi standar, dan kemudian fungsi LPAD diterapkan pada itu. String Jika tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai apa pun | Nilai lainnya | Undefined. | 

## ltrim (Tali)
<a name="iot-func-ltrim"></a>

Menghapus semua spasi putih terkemuka (tab dan spasi) dari yang disediakan`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`Ltrim(" h i ")`= “hai”.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi Int dengan semua ruang putih terkemuka dihapus. | 
| Decimal | StringRepresentasi Decimal dengan semua ruang putih terkemuka dihapus. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”) dengan semua spasi putih terkemuka dihapus. | 
| String | Argumen dengan semua ruang putih terkemuka dihapus. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar) dengan semua spasi putih terkemuka dihapus. | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar) dengan semua spasi putih terkemuka dihapus. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## machinelearning\$1predict (modelID, roLearn, rekam)
<a name="iot-sql-function-machine-learning"></a>

Gunakan `machinelearning_predict` fungsi untuk membuat prediksi menggunakan data dari pesan MQTT berdasarkan model AI Amazon. SageMaker Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Argumen untuk `machinelearning_predict` fungsi tersebut adalah:

modelId  
ID model yang digunakan untuk menjalankan prediksi. Titik akhir real-time model harus diaktifkan.

roleArn  
Peran IAM yang memiliki kebijakan dengan `machinelearning:Predict` dan `machinelearning:GetMLModel` izin dan memungkinkan akses ke model tempat prediksi dijalankan.

catatan  
Data yang akan diteruskan ke SageMaker AI Predict API. Ini harus direpresentasikan sebagai objek JSON lapisan tunggal. Jika catatan adalah objek JSON multi-level, catatan diratakan dengan membuat serial nilai-nilainya. Misalnya, JSON berikut:  

```
{ "key1": {"innerKey1": "value1"}, "key2": 0}
```
 akan menjadi:  

```
{ "key1": "{\"innerKey1\": \"value1\"}", "key2": 0}
```

Fungsi mengembalikan objek JSON dengan bidang-bidang berikut:

predictedLabel  
Klasifikasi input berdasarkan model.

detail  
Berisi atribut berikut:    
PredictiveModelType  
Tipe model. Nilai yang valid adalah REGRESSION, BINARY, MULTICLASS.  
Algoritme  
Algoritma yang digunakan oleh SageMaker AI untuk membuat prediksi. Nilainya harus SGD.

predictedScores  
Berisi skor klasifikasi mentah yang sesuai dengan setiap label.

predictedValue  
Nilai yang diprediksi oleh SageMaker AI.

## mod (Desimal, Desimal)
<a name="iot-func-mod"></a>

Mengembalikan sisa pembagian argumen pertama dengan argumen kedua. Setara dengan[sisanya (Desimal, Desimal)](#iot-func-remainder). Anda juga dapat menggunakan “%” sebagai operator infix untuk fungsionalitas modulo yang sama. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `mod(8, 3)` = 2.


****  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Int, argumen pertama modulo argumen kedua. | 
| Int/Decimal | Int/Decimal | Decimal, argumen pertama modulo operan kedua. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal, hasilnya adalah argumen pertama modulo argumen kedua. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## nanvl (,) AnyValue AnyValue
<a name="iot-func-nanvl"></a>

Mengembalikan argumen pertama jika itu adalah valid`Decimal`. Jika tidak, argumen kedua dikembalikan. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `Nanvl(8, 3)` = 8.


****  

| Tipe argumen 1 | Argumen tipe 2 | Output | 
| --- | --- | --- | 
| Tidak terdefinisi | Nilai apa pun | Argumen kedua. | 
| Null | Nilai apa pun | Argumen kedua. | 
| Decimal(NaN) | Nilai apa pun | Argumen kedua. | 
| Decimal(bukan NaN) | Nilai apa pun | Argumen pertama. | 
| Nilai lainnya | Nilai apa pun | Argumen pertama. | 

## newuuid ()
<a name="iot-sql-function-newuuid"></a>

Mengembalikan UUID 16-byte acak. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `newuuid()` = `123a4567-b89c-12d3-e456-789012345000`

## numbytes (String)
<a name="iot-sql-function-numbytes"></a>

Mengembalikan jumlah byte dalam pengkodean UTF-8 dari string yang disediakan. Aturan konversi standar berlaku untuk `String` non-argumen. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`numbytes("hi")`= 2

`numbytes("€") `= 3

## parse\$1time (String, Panjang [, String])
<a name="iot-sql-function-parse-time"></a>

Gunakan `parse_time` fungsi untuk memformat stempel waktu ke dalam format yang dapat dibaca manusia date/time . Didukung oleh SQL versi 2016-03-23 dan yang lebih baru. Untuk mengubah string stempel waktu menjadi milidetik, lihat. [time\$1to\$1epoch (String, String)](#iot-sql-function-time-to-epoch)

`parse_time`Fungsi mengharapkan argumen berikut:

pola   
(String) date/time Pola yang mengikuti format [Joda-Time](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). 

timestamp  
(Panjang) Waktu untuk diformat dalam milidetik sejak zaman Unix. Lihat fungsi[stempel waktu ()](#iot-function-timestamp).

timezone  
(String) Zona waktu tanggal/waktu yang diformat. Defaultnya adalah “UTC”. Fungsi ini mendukung zona waktu [Joda-Time](http://joda-time.sourceforge.net/timezones.html). Argumen ini opsional.

Contoh:

Ketika pesan ini dipublikasikan ke topik 'A/B', payload `{"ts": "1970.01.01 AD at 21:46:40 CST"}` dikirim ke bucket S3:

```
{
    "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"
    }
}
```

Saat pesan ini dipublikasikan ke topik 'A/B', muatan yang mirip dengan `{"ts": "2017.06.09 AD at 17:19:46 UTC"}` (tetapi dengan tanggal/waktu saat ini) dikirim ke bucket S3:

```
{
    "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()`juga dapat digunakan sebagai template substitusi. Misalnya, ketika pesan ini dipublikasikan ke topik 'A/B', muatan dikirim ke bucket S3 dengan kunci = “2017":

```
{
    "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"
    }
}
```

## kekuatan (Desimal, Desimal)
<a name="iot-func-power"></a>

Mengembalikan argumen pertama yang diangkat ke argumen kedua. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `power(2, 5)` = 32.0.


****  

| Tipe argumen 1 | Argumen tipe 2 | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | A Decimal (dengan presisi ganda), argumen pertama diangkat ke kekuatan argumen kedua. | 
| Int/Decimal/String | Int/Decimal/String | A Decimal (dengan presisi ganda), argumen pertama diangkat ke kekuatan argumen kedua. Setiap string dikonversi ke desimal. Jika ada yang String gagal dikonversiDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## prinsipal ()
<a name="iot-sql-function-principal"></a>

Mengembalikan prinsipal yang digunakan perangkat untuk otentikasi, berdasarkan bagaimana pesan pemicu dipublikasikan. Tabel berikut menjelaskan prinsip yang dikembalikan untuk setiap metode penerbitan dan protokol.


****  

| Bagaimana pesan dipublikasikan | Protokol | Tipe kredensial | Principal | 
| --- | --- | --- | --- | 
| Klien MQTT | MQTT | Sertifikat perangkat X.509 | Sidik jari sertifikat X.509 | 
| AWS IoT konsol klien MQTT | MQTT | Pengguna atau peran IAM | iam-role-id:session-name | 
| AWS CLI | HTTP | Pengguna atau peran IAM | userid | 
| AWS IoT Perangkat SDK | MQTT | Sertifikat perangkat X.509 | Sidik jari sertifikat X.509 | 
| AWS IoT Perangkat SDK | MQTT lebih WebSocket | Pengguna atau peran IAM | userid | 

Contoh berikut menunjukkan berbagai jenis nilai yang `principal()` dapat dikembalikan:
+ Sidik jari sertifikat X.509: `ba67293af50bf2506f5f93469686da660c7c844e7b3950bfb16813e0d31e9373`
+ ID peran IAM dan nama sesi: `ABCD1EFG3HIJK2LMNOP5:my-session-name`
+ Mengembalikan ID pengguna: `ABCD1EFG3HIJK2LMNOP5`

## rand ()
<a name="iot-sql-function-rand"></a>

Mengembalikan pseudorandom, seragam didistribusikan ganda antara 0,0 dan 1,0. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`rand()`= 0.8231909191640703

## regexp\$1matches (String, String)
<a name="iot-func-regex-matches"></a>

Mengembalikan nilai true jika string (argumen pertama) berisi kecocokan untuk ekspresi reguler (argumen kedua). Jika Anda menggunakan `|` dalam ekspresi reguler, gunakan dengan`()`.

Contoh:

`regexp_matches("aaaa", "a{2,}") `= benar.

`regexp_matches("aaaa", "b")`= salah.

`regexp_matches("aaa", "(aaa|bbb)") `= benar.

`regexp_matches("bbb", "(aaa|bbb)") `= benar.

`regexp_matches("ccc", "(aaa|bbb)") `= salah.


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | ItuString. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) tidak valid regex, hasilnya adalah. `Undefined` 

## regexp\$1replace (String, String, String)
<a name="iot-func-regex-replace"></a>

Menggantikan semua kemunculan argumen kedua (ekspresi reguler) dalam argumen pertama dengan argumen ketiga. Grup tangkapan referensi dengan “\$1”. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`regexp_replace("abcd", "bc", "x")`= “kapak”.

`regexp_replace("abcd", "b(.*)d", "$1")`= “ac”.


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | Nilai sumbernya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) bukan ekspresi regex yang valid, hasilnya adalah. `Undefined` 

*Argumen ketiga:*

Harus berupa string pengganti regex yang valid. (Dapat mereferensikan grup tangkapan.) Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Jika argumen (dikonversi) bukan string pengganti regex yang valid, hasilnya adalah. `Undefined` 

## regexp\$1substr (Tali, Tali)
<a name="iot-func-regex-substr"></a>

Menemukan kecocokan pertama dari parameter kedua (regex) di parameter pertama. Grup tangkapan referensi dengan “\$1”. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`regexp_substr("hihihello", "hi")`= “hai”

`regexp_substr("hihihello", "(hi)*")`= “hihi”


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | StringArgumennya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) bukan ekspresi regex yang valid, hasilnya adalah. `Undefined` 

## sisanya (Desimal, Desimal)
<a name="iot-func-remainder"></a>

Mengembalikan sisa pembagian argumen pertama dengan argumen kedua. Setara dengan[mod (Desimal, Desimal)](#iot-func-mod). Anda juga dapat menggunakan “%” sebagai operator infix untuk fungsionalitas modulo yang sama. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `remainder(8, 3)` = 2.


****  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Int, argumen pertama modulo argumen kedua. | 
| Int/Decimal | Int/Decimal | Decimal, argumen pertama modulo operan kedua. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal, hasilnya adalah argumen pertama modulo argumen kedua. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## ganti (String, String, String)
<a name="iot-func-replace"></a>

Menggantikan semua kemunculan argumen kedua dalam argumen pertama dengan argumen ketiga. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`replace("abcd", "bc", "x")` = `"axd"`.

`replace("abcdabcd", "b", "x")` = `"axcdaxcd"`.


**Semua argumen**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | Nilai sumbernya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## rpad (String, Int)
<a name="iot-func-rpad"></a>

Mengembalikan argumen string, empuk di sisi kanan dengan jumlah spasi yang ditentukan dalam argumen kedua. `Int`Argumen harus antara 0 dan 1000. Jika nilai yang diberikan berada di luar rentang yang valid ini, argumen diatur ke nilai valid terdekat (0 atau 1000). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`rpad("hello", 2)` = "`hello  `".

`rpad(1, 3)` = "`1   `".


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | Int | Empuk di sisi kanan dengan sejumlah spasi yang sama dengan yang disediakanInt. String | 
| String | Decimal | DecimalArgumen dibulatkan ke bawah ke yang terdekat Int dan string empuk di sisi kanan dengan sejumlah spasi sama dengan yang disediakanInt. | 
| String | String | Argumen kedua diubah menjadi aDecimal, yang dibulatkan ke bawah ke yang terdekatInt. Empuk di sisi kanan dengan sejumlah spasi yang sama dengan Int nilainya. String | 
| Nilai lainnya | Int/Decimal/String | Nilai pertama dikonversi ke a String menggunakan konversi standar, dan fungsi rpad diterapkan pada itu. String Jika tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai apa pun | Nilai lainnya | Undefined. | 

## bulat (Desimal)
<a name="iot-func-round"></a>

Membulatkan yang diberikan `Decimal` ke yang terdekat`Int`. Jika `Decimal` berjarak sama dari dua `Int` nilai (misalnya, 0,5), `Decimal` dibulatkan ke atas. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `Round(1.2)` = 1.

`Round(1.5)`= 2.

`Round(1.7)`= 2.

`Round(-1.1)`= -1.

`Round(-1.5)`= -2.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Argumennya. | 
| Decimal | Decimaldibulatkan ke bawah ke yang terdekatInt. | 
| String | Decimaldibulatkan ke bawah ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

## rtrim (Tali)
<a name="iot-func-rtrim"></a>

Menghapus semua spasi putih (tab dan spasi) dari yang disediakan. `String` Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`rtrim(" h i ")`= "h i”


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined | 

## tanda (Desimal)
<a name="iot-func-sign"></a>

Mengembalikan tanda nomor yang diberikan. Ketika tanda argumen positif, 1 dikembalikan. Ketika tanda argumen negatif, -1 dikembalikan. Jika argumen adalah 0, 0 dikembalikan. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`sign(-7)`= -1.

`sign(0)`= 0.

`sign(13)`= 1.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, tanda Int nilainya. | 
| Decimal | Int, tanda Decimal nilainya. | 
| String | Int, tanda Decimal nilainya. String dikonversi ke Decimal nilai, dan tanda Decimal nilai dikembalikan. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. | 
| Nilai lainnya | Undefined. | 

## sin (Desimal)
<a name="iot-func-sin"></a>

Mengembalikan sinus dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sin(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus argumen. | 
| Decimal | Decimal(dengan presisi ganda), sinus argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## sinh (Desimal)
<a name="iot-func-sinh"></a>

Mengembalikan sinus hiperbolik dari suatu angka. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Hasilnya adalah `Decimal` nilai presisi ganda. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sinh(2.3)` = 4.936961805545957


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus hiperbolik argumen. | 
| Decimal | Decimal(dengan presisi ganda), sinus hiperbolik argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## sourceip ()
<a name="iot-function-sourceip"></a>

Mengambil alamat IP perangkat atau router yang terhubung dengannya. Jika perangkat Anda terhubung ke internet secara langsung, fungsi tersebut akan mengembalikan alamat IP sumber perangkat. Jika perangkat Anda terhubung ke router yang terhubung ke internet, fungsi tersebut akan mengembalikan alamat IP sumber router. Didukung oleh SQL versi 2016-03-23. `sourceip()`tidak mengambil parameter apa pun.

**penting**  
Alamat IP sumber publik perangkat sering kali merupakan alamat IP dari Network Address Translation (NAT) Gateway terakhir seperti router atau modem kabel penyedia layanan internet Anda.

Contoh: 

`sourceip()="192.158.1.38"`

`sourceip()="1.102.103.104"`

`sourceip()="2001:db8:ff00::12ab:34cd"`

Contoh SQL:

`SELECT *, sourceip() as deviceIp FROM 'some/topic'`

Contoh cara menggunakan fungsi sourceip () dalam AWS IoT Core tindakan aturan:

**Contoh 1**

Contoh berikut menunjukkan bagaimana memanggil fungsi () sebagai [template substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) dalam tindakan [DynamoDB](https://docs.aws.amazon.com//iot/latest/developerguide/dynamodb-rule-action.html).

```
{
	"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"
				}
			}
		]
	}
}
```

**Contoh 2**

[Contoh berikut menunjukkan cara menambahkan sourceip () fungsi sebagai properti pengguna MQTT menggunakan template substitusi.](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html)

```
{
	"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()}"
							}
						]
					}
				}
			}
		]
	}
}
```

Anda dapat mengambil alamat IP sumber dari pesan yang diteruskan ke AWS IoT Core aturan dari jalur Message Broker dan [Basic Ingest](https://docs.aws.amazon.com//iot/latest/developerguide/iot-basic-ingest.html). Anda juga dapat mengambil IP sumber untuk keduanya IPv4 dan IPv6 pesan. IP sumber akan ditampilkan seperti berikut:

IPv6: `yyyy:yyyy:yyyy::yyyy:yyyy`

IPv4: `xxx.xxx.xxx.xxx`

**catatan**  
IP sumber asli tidak akan diteruskan melalui [tindakan Republish](republish-rule-action.md).

## substring (String, Int [, Int])
<a name="iot-func-substring"></a>

Mengharapkan `String` diikuti oleh satu atau dua `Int` nilai. Untuk `Int` argumen `String` dan satu, fungsi ini mengembalikan substring yang disediakan `String` dari `Int` indeks yang disediakan (berbasis 0, inklusif) ke akhir. `String` Untuk `Int` argumen a `String` dan dua, fungsi ini mengembalikan substring yang disediakan `String` dari argumen `Int` indeks pertama (berbasis 0, inklusif) ke argumen `Int` indeks kedua (berbasis 0, eksklusif). Indeks yang kurang dari nol ditetapkan ke nol. Indeks yang lebih besar dari `String` panjang diatur ke `String` panjang. Untuk versi tiga argumen, jika indeks pertama lebih besar dari (atau sama dengan) indeks kedua, hasilnya kosong`String`.

 Jika argumen yang diberikan bukan (*String*,*Int*), atau (*String**Int*,,*Int*), konversi standar diterapkan ke argumen untuk mencoba mengubahnya menjadi tipe yang benar. Jika tipe tidak dapat dikonversi, hasil fungsinya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`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)`= “rue”.

`substring(false, -2.411E247)`= “salah”.

`substring("012345", 1, 3)`= “12".

`substring("012345", -50, 50)`= “012345".

`substring("012345", 3, 1)` = "".

## sql\$1version ()
<a name="iot-sql-function-sql-version"></a>

Mengembalikan versi SQL yang ditentukan dalam aturan ini. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`sql_version()`= “2016-03-23"

## sqrt (Desimal)
<a name="iot-func-sqrt"></a>

Mengembalikan akar kuadrat dari sebuah angka. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sqrt(9)` = 3.0.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Akar kuadrat dari argumen. | 
| Decimal | Akar kuadrat dari argumen. | 
| Boolean | Undefined. | 
| String | Akar kuadrat dari argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## startswith (String, String)
<a name="iot-func-startswith"></a>

Pengembalian`Boolean`, apakah argumen string pertama dimulai dengan argumen string kedua. Jika salah satu argumen adalah `Null` atau`Undefined`, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`startswith("ranger","ran")`= benar


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | String | Apakah string pertama dimulai dengan string kedua. | 
| Nilai lainnya | Nilai lainnya | Kedua argumen dikonversi ke string menggunakan aturan konversi standar. Mengembalikan nilai true jika string pertama dimulai dengan string kedua. Jika salah satu argumen adalah Null atauUndefined, hasilnya adalahUndefined. | 

## tan (Desimal)
<a name="iot-func-tan"></a>

Mengembalikan garis singgung angka dalam radian. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `tan(3)` = -0.1425465430742778


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), garis singgung argumen. | 
| Decimal | Decimal(dengan presisi ganda), garis singgung argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), garis singgung argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## tanh (Desimal)
<a name="iot-func-tanh"></a>

Mengembalikan tangen hiperbolik dari angka dalam radian. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `tanh(2.3)` = 0,9800963962661914


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. | 
| Decimal | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## time\$1to\$1epoch (String, String)
<a name="iot-sql-function-time-to-epoch"></a>

Gunakan `time_to_epoch` fungsi untuk mengubah string timestamp menjadi beberapa milidetik dalam waktu epoch Unix. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru. Untuk mengonversi milidetik ke string stempel waktu yang diformat, lihat. [parse\$1time (String, Panjang [, String])](#iot-sql-function-parse-time)

`time_to_epoch`Fungsi mengharapkan argumen berikut:

timestamp  
(String) String timestamp yang akan dikonversi menjadi milidetik sejak zaman Unix. Jika string stempel waktu tidak menentukan zona waktu, fungsi menggunakan zona waktu UTC.

pola   
(String) date/time Pola yang mengikuti [Format JDK11 Waktu](http://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html).

Contoh:

`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

## stempel waktu ()
<a name="iot-function-timestamp"></a>

Mengembalikan stempel waktu saat ini dalam milidetik dari 00:00:00 Coordinated Universal Time (UTC), Kamis, 1 Januari 1970, seperti yang diamati oleh mesin aturan. AWS IoT Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `timestamp()` = `1481825251155`

## topik (Desimal)
<a name="iot-function-topic"></a>

Mengembalikan topik ke mana pesan yang memicu aturan dikirim. Jika tidak ada parameter yang ditentukan, seluruh topik dikembalikan. `Decimal`Parameter ini digunakan untuk menentukan segmen topik tertentu, dengan 1 menunjuk segmen pertama. Untuk topik`foo/bar/baz`, topik (1) kembali`foo`, topik (2) kembali`bar`, dan sebagainya. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`topic()` = "things/myThings/thingOne"

`topic(1)`= “hal-hal”

Ketika [Basic Ingest](iot-basic-ingest.md) digunakan, awalan awal topic (`$aws/rules/rule-name`) tidak tersedia untuk fungsi topic (). Misalnya, mengingat topik:

`$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights`

`topic()` = "Buildings/Building5/Floor2/Room201/Lights"

`topic(3)`= “Lantai2"

## traceid ()
<a name="iot-sql-function-traceid"></a>

Mengembalikan ID jejak (UUID) pesan MQTT, atau `Undefined` jika pesan tidak dikirim melalui MQTT. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`traceid() `= “12345678-1234-1234-1234-123456789012"

## mengubah (String, Objek, Array)
<a name="iot-func-transform"></a>

Mengembalikan array objek yang berisi hasil transformasi tertentu dari `Object` parameter pada `Array` parameter.

Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

String  
Mode transformasi yang akan digunakan. Lihat tabel berikut untuk mode transformasi yang didukung dan bagaimana mereka membuat `Result` dari `Object` dan `Array` parameter.

Objek  
Objek yang berisi atribut untuk diterapkan ke setiap elemen`Array`.

Array  
Sebuah array objek ke mana atribut `Object` diterapkan.  
Setiap objek dalam Array ini sesuai dengan objek dalam respon fungsi. Setiap objek dalam respons fungsi berisi atribut yang ada di objek asli dan atribut yang disediakan oleh `Object` sebagaimana ditentukan oleh mode transformasi yang ditentukan dalam`String`.


| `String`parameter | `Object`parameter | `Array`parameter | Hasil | 
| --- | --- | --- | --- | 
| `enrichArray` | Objek | Array objek | Array objek di mana setiap objek berisi atribut elemen dari `Array` parameter dan atribut `Object` parameter. | 
| Nilai lainnya | Nilai apa pun | Nilai apa pun | Tidak terdefinisi | 

**catatan**  
Array yang dikembalikan oleh fungsi ini terbatas pada 128 KiB.

### Contoh fungsi transformasi 1
<a name="iot-func-transform-example1"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi menghasilkan array tunggal objek dari objek data dan array.

Dalam contoh ini, pesan berikut dipublikasikan ke topik MQTT. `A/B`

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

Pernyataan SQL ini untuk tindakan aturan topik menggunakan **transform()** fungsi dengan `String` nilai. `enrichArray` Dalam contoh ini, `Object` adalah `attributes` properti dari payload pesan dan `Array` `values` array, yang berisi tiga objek.

```
select value transform("enrichArray", attributes, values) from 'A/B'
```

Setelah menerima payload pesan, pernyataan SQL mengevaluasi respons berikut.

```
[
  {
    "a": 3,
    "data1": 1,
    "data2": 2
  },
  {
    "b": 4,
    "data1": 1,
    "data2": 2
  },
  {
    "c": 5,
    "data1": 1,
    "data2": 2
  }
]
```

### Contoh fungsi transformasi 2
<a name="iot-func-transform-example2"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi dapat menggunakan nilai literal untuk menyertakan dan mengganti nama atribut individual dari payload pesan.

Dalam contoh ini, pesan berikut dipublikasikan ke topik MQTT. `A/B` Ini adalah pesan yang sama yang digunakan dalam[Contoh fungsi transformasi 1](#iot-func-transform-example1).

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

Pernyataan SQL ini untuk tindakan aturan topik menggunakan **transform()** fungsi dengan `String` nilai. `enrichArray` `Object`Dalam **transform()** fungsi memiliki atribut tunggal bernama `key` dengan nilai `attributes.data1` dalam payload pesan dan `Array` `values` array, yang berisi tiga objek yang sama yang digunakan dalam contoh sebelumnya.

```
select value transform("enrichArray", {"key": attributes.data1}, values) from 'A/B'
```

Setelah menerima payload pesan, pernyataan SQL ini mengevaluasi respons berikut. Perhatikan bagaimana `data1` properti tersebut dinamai `key` dalam tanggapan.

```
[
  {
    "a": 3,
    "key": 1
  },
  {
    "b": 4,
    "key": 1
  },
  {
    "c": 5,
    "key": 1
  }
]
```

### Contoh fungsi transformasi 3
<a name="iot-func-transform-example3"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi dapat digunakan dalam klausa SELECT bersarang untuk memilih beberapa atribut dan membuat objek baru untuk pemrosesan selanjutnya.

Dalam contoh ini, pesan berikut dipublikasikan ke topik MQTT. `A/B`

```
{
  "data1": "example",
  "data2": {
    "a": "first attribute",
    "b": "second attribute",
    "c": [
      {
        "x": {
          "someInt": 5,
          "someString": "hello"
        },
        "y": true
      },
      {
        "x": {
          "someInt": 10,
          "someString": "world"
        },
        "y": false
      }
    ]
  }
}
```

Fungsi `Object` untuk transformasi ini adalah objek yang dikembalikan oleh pernyataan SELECT, yang berisi `a` dan `b` elemen `data2` objek pesan. `Array`Parameter terdiri dari dua objek dari `data2.c` array dalam pesan asli.

```
select value transform('enrichArray', (select a, b from data2), (select value c from data2)) from 'A/B'
```

Dengan pesan sebelumnya, pernyataan SQL mengevaluasi respons berikut.

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

 Array yang dikembalikan dalam respons ini dapat digunakan dengan tindakan aturan topik yang mendukung`batchMode`. 

## memangkas (Tali)
<a name="iot-func-trim"></a>

Menghapus semua spasi putih terdepan dan tertinggal dari yang disediakan`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`Trim(" hi ") `= “hai”


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dari Int dengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Decimal | StringRepresentasi dari Decimal dengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Boolean | StringRepresentasi dari Boolean (“benar” atau “salah”) dengan semua spasi putih di depan dan belakang dihapus. | 
| String | StringDengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Array | StringRepresentasi dari Array menggunakan aturan konversi standar. | 
| Objek | StringRepresentasi Object menggunakan aturan konversi standar. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## batang (Desimal, Int)
<a name="iot-func-trunc"></a>

Memotong argumen pertama ke jumlah `Decimal` tempat yang ditentukan oleh argumen kedua. Jika argumen kedua kurang dari nol, itu diatur ke nol. Jika argumen kedua lebih besar dari 34, itu diatur ke 34. Trailing zeroes dilucuti dari hasilnya. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`trunc(2.3, 0)`= 2.

`trunc(2.3123, 2)`= 2,31.

`trunc(2.888, 2)`= 2,88.

`trunc(2.00, 5)`= 2.


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| Int | Int | Nilai sumbernya. | 
| Int/Decimal | Int/Decimal | Argumen pertama dipotong dengan panjang yang dijelaskan oleh argumen kedua. Argumen kedua, jika bukanInt, dibulatkan ke bawah ke yang terdekatInt. | 
| Int/Decimal/String | Int/Decimal | Argumen pertama dipotong dengan panjang yang dijelaskan oleh argumen kedua. Argumen kedua, jika bukanInt, dibulatkan ke bawah ke yang terdekatInt. A String dikonversi menjadi Decimal nilai. Jika konversi string gagal, hasilnya adalahUndefined. | 
| Nilai lainnya |  | Undefined. | 

## atas (String)
<a name="iot-sql-function-upper"></a>

Mengembalikan versi huruf besar dari yang diberikan. `String` `String`Non-argumen dikonversi untuk `String` menggunakan aturan konversi standar. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`upper("hello")`= “HALO”

`upper(["hello"])`= “[\$1" HALO\$1 "]”

# Literal
<a name="iot-sql-literals"></a>

Anda dapat langsung menentukan objek literal dalam klausa SELECT dan WHERE dari aturan SQL Anda, yang dapat berguna untuk meneruskan informasi. 

**catatan**  
Literal hanya tersedia saat menggunakan versi SQL 2016-03-23 atau yang lebih baru.

Sintaks objek JSON digunakan (pasangan kunci-nilai, dipisahkan koma, di mana kunci adalah string dan nilai adalah nilai JSON, dibungkus dalam kurung kurawal \$1\$1). Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic` `{"lat_long": [47.606,-122.332]}`

Pernyataan SQL: `SELECT {'latitude': get(lat_long, 0),'longitude':get(lat_long, 1)} as lat_long FROM 'topic/subtopic'`

Muatan keluar yang dihasilkan adalah:. `{"lat_long":{"latitude":47.606,"longitude":-122.332}}` 

Anda juga dapat secara langsung menentukan array dalam klausa SELECT dan WHERE dari aturan SQL Anda, yang memungkinkan Anda untuk mengelompokkan informasi. Sintaks JSON digunakan (bungkus item yang dipisahkan koma dalam tanda kurung siku [] untuk membuat array literal). Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic` `{"lat": 47.696, "long": -122.332}`

Pernyataan SQL: `SELECT [lat,long] as lat_long FROM 'topic/subtopic'`

Muatan keluaran yang dihasilkan adalah:`{"lat_long": [47.606,-122.332]}`.

# Pernyataan kasus
<a name="iot-sql-case"></a>

Pernyataan kasus dapat digunakan untuk eksekusi percabangan, seperti pernyataan switch.

Sintaksis:

```
CASE v WHEN t[1] THEN r[1] 
  WHEN t[2] THEN r[2] ... 
  WHEN t[n] THEN r[n] 
  ELSE r[e] END
```

Ekspresi *`v`* dievaluasi dan dicocokkan untuk kesetaraan terhadap *`t[i]`* nilai masing-masing klausa. `WHEN` Jika kecocokan ditemukan, *`r[i]`* ekspresi yang sesuai menjadi hasil `CASE` pernyataan. `WHEN`Klausa dievaluasi secara berurutan sehingga jika ada lebih dari satu klausa yang cocok, hasil klausa pencocokan pertama menjadi hasil pernyataan. `CASE` Jika tidak ada kecocokan, *`r[e]`* dari `ELSE` klausa adalah hasilnya. Jika tidak ada kecocokan dan tidak ada `ELSE` klausa, hasilnya adalah`Undefined`.

`CASE`pernyataan membutuhkan setidaknya satu `WHEN` klausa. Sebuah `ELSE` klausa adalah opsional.

Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic`

```
{
    "color":"yellow"
}
```

Pernyataan SQL: 

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

Muatan keluaran yang dihasilkan adalah:

```
{
    "instructions":"caution"
}
```

**catatan**  
Jika *`v`* ya`Undefined`, hasil dari pernyataan kasus adalah`Undefined`.

# Ekstensi JSON
<a name="iot-sql-json"></a>

Anda dapat menggunakan ekstensi berikut untuk sintaks ANSI SQL untuk memfasilitasi pekerjaan dengan objek JSON bersarang.

“.” Operator

Operator ini mengakses anggota dalam objek JSON tertanam dan fungsi identik dengan ANSI SQL dan. JavaScript Contoh: 

```
SELECT foo.bar AS bar.baz FROM 'topic/subtopic'
```

memilih nilai `bar` properti dalam `foo` objek dari payload pesan berikut yang dikirim ke topik. `topic/subtopic`

```
{
  "foo": {
    "bar": "RED",
    "bar1": "GREEN",
    "bar2": "BLUE"
  }
}
```

Jika nama properti JSON menyertakan karakter tanda hubung atau karakter numerik, notasi 'titik' tidak akan berfungsi. Sebagai gantinya, Anda harus menggunakan [fungsi get](iot-sql-functions.md#iot-sql-function-get) untuk mengekstrak nilai properti. 

 Dalam contoh ini, pesan berikut dikirim ke `iot/rules` topik. 

```
{
  "mydata": {
    "item2": {
      "0": {
        "my-key": "myValue"
      }
    }
  }
}
```

Biasanya, nilai `my-key` akan diidentifikasi seperti dalam kueri ini.

```
SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"
```

Namun, karena nama properti `my-key` berisi tanda hubung dan `item2` berisi karakter numerik, [fungsi get](iot-sql-functions.md#iot-sql-function-get) harus digunakan sebagai query berikut menunjukkan.

```
SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"
```

`*`Operator

Ini berfungsi dengan cara yang sama seperti `*` wildcard di ANSI SQL. Ini digunakan dalam klausa SELECT saja dan membuat objek JSON baru yang berisi data pesan. Jika payload pesan tidak dalam format JSON, `*` mengembalikan seluruh payload pesan sebagai byte mentah. Contoh: 

```
SELECT * FROM 'topic/subtopic'
```

**Menerapkan Fungsi ke Nilai Atribut**  
Berikut ini adalah contoh payload JSON yang mungkin dipublikasikan oleh perangkat:

```
{
    "deviceid" : "iot123",
    "temp" : 54.98,
    "humidity" : 32.43,
    "coords" : {
        "latitude" : 47.615694,
        "longitude" : -122.3359976
    }
}
```

Contoh berikut menerapkan fungsi untuk nilai atribut dalam payload JSON:

```
SELECT temp, md5(deviceid) AS hashed_id FROM topic/#
```

Hasil dari query ini adalah objek JSON berikut:

```
{
   "temp": 54.98,
   "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1"
}
```

# Templat substitusi
<a name="iot-substitution-templates"></a>

Anda dapat menggunakan template substitusi untuk menambah data JSON yang dikembalikan saat aturan dipicu dan AWS IoT melakukan tindakan. *Sintaks untuk template substitusi adalah `${` *ekspresi`}`, di mana ekspresi* dapat berupa ekspresi apa pun yang didukung oleh AWS IoT dalam klausa SELECT, klausa WHERE, dan.* [AWS IoT tindakan aturan](iot-rule-actions.md) Ekspresi ini dapat dicolokkan ke bidang tindakan pada aturan, memungkinkan Anda mengonfigurasi tindakan secara dinamis. Akibatnya, fitur ini menggantikan sepotong informasi dalam suatu tindakan. Ini termasuk fungsi, operator, dan informasi yang ada dalam muatan pesan asli.

**penting**  
Karena ekspresi dalam template substitusi dievaluasi secara terpisah dari pernyataan “SELECT...”, Anda tidak dapat mereferensikan alias yang dibuat menggunakan klausa AS. Anda hanya dapat mereferensikan informasi yang ada di muatan, [fungsi](iot-sql-functions.md), dan [operator](iot-sql-operators.md) asli.

Untuk informasi selengkapnya tentang ekspresi yang didukung, lihat[AWS IoT Referensi SQL](iot-sql-reference.md).

Tindakan aturan berikut mendukung template substitusi. Setiap tindakan mendukung bidang yang berbeda yang dapat diganti.
+ [Apache Kafka](apache-kafka-rule-action.md)
+ [CloudWatch alarm](cloudwatch-alarms-rule-action.md)
+ [CloudWatch Log](cloudwatch-logs-rule-action.md)
+ [CloudWatch metrik](cloudwatch-metrics-rule-action.md)
+ [DynamoDB](dynamodb-rule-action.md)
+ [Dinamo 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)
+ [Firehouse](kinesis-firehose-rule-action.md)
+ [Lambda](lambda-rule-action.md)
+ [Lokasi](location-rule-action.md)
+ [OpenSearch](opensearch-rule-action.md)
+ [Publikasikan ulang](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)

Templat substitusi muncul di parameter tindakan dalam aturan: 

```
{
    "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"
        }
    }]
}
```

Jika aturan ini dipicu oleh JSON berikut yang diterbitkan ke`my/iot/topic`:

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    }
}
```

Kemudian aturan ini menerbitkan JSON berikut ke`my/iot/topic/republish`, yang AWS IoT menggantikan dari: `${topic()}/republish`

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    },
    "timestamp": 1579637878451
}
```

# Kueri objek bersarang
<a name="iot-sql-nested-queries"></a>

Anda dapat menggunakan klausa SELECT bersarang untuk menanyakan atribut dalam array dan objek JSON bagian dalam. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Pertimbangkan pesan MQTT berikut:

```
{ 
    "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**  
Anda dapat mengonversi nilai ke array baru dengan aturan berikut.  

```
SELECT (SELECT VALUE n FROM e) as sensors FROM 'my/topic'
```

Aturan menghasilkan output berikut.

```
{
    "sensors": [
        "temperature",
        "light",
        "acidity"
    ]
}
```

**Example**  
Menggunakan pesan MQTT yang sama, Anda juga dapat menanyakan nilai tertentu dalam objek bersarang dengan aturan berikut.  

```
SELECT (SELECT v FROM e WHERE n = 'temperature') as temperature FROM 'my/topic'
```

Aturan menghasilkan output berikut.

```
{
    "temperature": [
        {
            "v": 22.5
        }
    ]
}
```

**Example**  
Anda juga dapat meratakan output dengan aturan yang lebih rumit.  

```
SELECT get((SELECT v FROM e WHERE n = 'temperature'), 0).v as temperature FROM 'topic'
```

Aturan menghasilkan output berikut.

```
{
    "temperature": 22.5
}
```

# Bekerja dengan muatan biner
<a name="binary-payloads"></a>

Untuk menangani payload pesan Anda sebagai data biner mentah (bukan objek JSON), Anda dapat menggunakan operator \$1 untuk merujuknya dalam klausa SELECT. 

**Topics**
+ [Contoh muatan biner](#binary-payloads-examples)
+ [Decoding muatan pesan protobuf](#binary-payloads-protobuf)

## Contoh muatan biner
<a name="binary-payloads-examples"></a>

Saat Anda menggunakan\$1 untuk merujuk ke payload pesan sebagai data biner mentah, Anda dapat menambahkan data ke aturan. Jika Anda memiliki muatan kosong atau JSON, payload yang dihasilkan dapat memiliki data yang ditambahkan menggunakan aturan. Berikut ini menunjukkan contoh `SELECT` klausa yang didukung.
+ Anda dapat menggunakan `SELECT` klausa berikut hanya dengan\$1 untuk muatan biner.
  + 

    ```
    SELECT * FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
    ```
+ Anda juga dapat menambahkan data dan menggunakan `SELECT` klausa berikut.
  + 

    ```
    SELECT *, principal() as principal, timestamp() as time FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
    ```
+ Anda juga dapat menggunakan `SELECT` klausa ini dengan muatan biner.
  + Berikut ini mengacu `device_type` pada klausa WHERE.

    ```
    SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'
    ```
  + Berikut ini juga didukung.

    ```
    {
    	"sql": "SELECT * FROM 'topic/subtopic'",
    	"actions": [
    		{
    			"republish": {
    				"topic": "device/${device_id}"
    			}
    		}
    	]
    }
    ```

Tindakan aturan berikut tidak mendukung muatan biner sehingga Anda harus mendekodekannya.
+ Beberapa tindakan aturan tidak mendukung input payload biner, seperti tindakan [Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html#lambda-rule), jadi Anda harus memecahkan kode muatan biner. Tindakan aturan Lambda dapat menerima data biner, jika base64 dikodekan dan dalam muatan JSON. Anda dapat melakukan ini dengan mengubah aturan menjadi berikut.

  ```
  SELECT encode(*, 'base64') AS data FROM 'my_topic'
  ```
+ Pernyataan SQL tidak mendukung string sebagai input. Untuk mengonversi input string ke JSON, Anda dapat menjalankan perintah berikut.

  ```
  SELECT decode(encode(*, 'base64'), 'base64') AS payload FROM 'topic'
  ```

## Decoding muatan pesan protobuf
<a name="binary-payloads-protobuf"></a>

[Protocol Buffers (protobuf)](https://developers.google.com/protocol-buffers) adalah format data sumber terbuka yang digunakan untuk membuat serial data terstruktur dalam bentuk biner yang ringkas. Ini digunakan untuk mentransmisikan data melalui jaringan atau menyimpannya dalam file. Protobuf memungkinkan Anda untuk mengirim data dalam ukuran paket kecil dan pada tingkat yang lebih cepat daripada format pesan lainnya. AWS IoT Core Aturan mendukung protobuf dengan menyediakan fungsi SQL [decode (value, decodingScheme),](iot-sql-functions.md#iot-sql-decode-base64) yang memungkinkan Anda untuk memecahkan kode muatan pesan yang disandikan protobuf ke format JSON dan merutekkannya ke layanan hilir. Bagian ini merinci step-by-step proses untuk mengkonfigurasi decoding protobuf dalam Aturan. AWS IoT Core 

**Topics**
+ [Prasyarat](#binary-payloads-protobuf-prerequisites)
+ [Buat file deskriptor](#binary-payloads-protobuf-descriptor-steps)
+ [Unggah file deskriptor ke bucket S3](#binary-payloads-protobuf-s3-steps)
+ [Konfigurasikan decoding protobuf dalam Aturan](#binary-payloads-protobuf-steps)
+ [Batasan](#binary-payloads-protobuf-limitations)
+ [Praktik terbaik](#binary-payloads-protobuf-bestpractices)

### Prasyarat
<a name="binary-payloads-protobuf-prerequisites"></a>
+ Pemahaman dasar tentang [Protocol Buffer (protobuf](https://developers.google.com/protocol-buffers))
+ [`.proto`File](https://developers.google.com/protocol-buffers/docs/proto3) yang menentukan jenis pesan dan dependensi terkait
+ Menginstal [Protobuf Compiler (protoc](https://github.com/protocolbuffers/protobuf/releases)) pada sistem Anda

### Buat file deskriptor
<a name="binary-payloads-protobuf-descriptor-steps"></a>

Jika Anda sudah memiliki file deskriptor, Anda dapat melewati langkah ini. File deskriptor (`.desc`) adalah versi `.proto` file yang dikompilasi, yang merupakan file teks yang mendefinisikan struktur data dan tipe pesan yang akan digunakan dalam serialisasi protobuf. Untuk menghasilkan file deskriptor, Anda harus menentukan `.proto` file dan menggunakan kompiler [protoc](https://github.com/protocolbuffers/protobuf/releases) untuk mengompilasinya. 

1. Buat `.proto` file yang menentukan jenis pesan. `.proto`File contoh dapat terlihat seperti berikut:

   ```
   syntax = "proto3";
   
   message Person {
     optional string name = 1;
     optional int32 id = 2;
     optional string email = 3;
   }
   ```

   Dalam `.proto` file contoh ini, Anda menggunakan sintaks proto3 dan menentukan jenis pesan. `Person` Definisi `Person` pesan menentukan tiga bidang (nama, id, dan email). Untuk informasi selengkapnya tentang format pesan `.proto` file, lihat [Panduan Bahasa (proto3)](https://developers.google.com/protocol-buffers/docs/proto3).

1. Gunakan kompiler [protoc](https://github.com/protocolbuffers/protobuf/releases) untuk mengkompilasi `.proto` file dan menghasilkan file deskriptor. Contoh perintah untuk membuat file descriptor (`.desc`) dapat menjadi sebagai berikut:

   ```
   protoc --descriptor_set_out=<FILENAME>.desc \
       --proto_path=<PATH_TO_IMPORTS_DIRECTORY> \
       --include_imports \
       <PROTO_FILENAME>.proto
   ```

   Perintah contoh ini menghasilkan file deskriptor`<FILENAME>.desc`, yang dapat digunakan AWS IoT Core Aturan untuk memecahkan kode muatan protobuf yang sesuai dengan struktur data yang ditentukan. `<PROTO_FILENAME>.proto`
   + `--descriptor_set_out`

     Menentukan nama file deskriptor (`<FILENAME>.desc`) yang harus dihasilkan.
   + `--proto_path`

     Menentukan lokasi dari setiap `.proto` file impor yang direferensikan oleh file yang sedang dikompilasi. Anda dapat menentukan bendera beberapa kali jika Anda memiliki beberapa `.proto` file yang diimpor dengan lokasi yang berbeda.
   + `--include_imports`

     Menentukan bahwa setiap `.proto` file yang diimpor juga harus dikompilasi dan disertakan dalam file `<FILENAME>.desc` deskriptor.
   + `<PROTO_FILENAME>.proto`

     Menentukan nama `.proto` file yang ingin Anda kompilasi.

   Untuk informasi selengkapnya tentang referensi protokol, lihat [Referensi API](https://developers.google.com/protocol-buffers/docs/reference/overview).

### Unggah file deskriptor ke bucket S3
<a name="binary-payloads-protobuf-s3-steps"></a>

Setelah membuat file deskriptor`<FILENAME>.desc`, unggah file deskriptor `<FILENAME>.desc` ke bucket Amazon S3, menggunakan AWS API, SDK AWS , atau file. Konsol Manajemen AWS

**Pertimbangan penting**
+ Pastikan Anda mengunggah file deskriptor ke bucket Amazon S3 di Akun AWS tempat yang Wilayah AWS sama dengan tempat Anda ingin mengonfigurasi Aturan.
+ Pastikan Anda memberikan AWS IoT Core akses untuk membaca `FileDescriptorSet` dari S3. Jika bucket S3 Anda menonaktifkan enkripsi sisi server (SSE) atau bucket S3 Anda dienkripsi menggunakan kunci yang dikelola Amazon S3 (SSE-S3), konfigurasi kebijakan tambahan tidak diperlukan. Ini dapat dicapai dengan contoh kebijakan bucket:  
****  

  ```
  {
  	"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"
  		}
  	]
  }
  ```
+ Jika bucket S3 Anda dienkripsi menggunakan AWS Key Management Service kunci (SSE-KMS), pastikan Anda memberikan AWS IoT Core izin untuk menggunakan kunci saat mengakses bucket S3 Anda. Anda dapat melakukannya dengan menambahkan pernyataan ini ke kebijakan utama Anda:

  ```
  {
  	"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"
  	
  }
  ```

### Konfigurasikan decoding protobuf dalam Aturan
<a name="binary-payloads-protobuf-steps"></a>

[Setelah mengunggah file deskriptor ke bucket Amazon S3, konfigurasikan Aturan yang dapat memecahkan kode format payload pesan protobuf menggunakan fungsi SQL decode (value, [decodingScheme](iot-sql-functions.md#iot-sql-decode-base64)).](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-rule.html) *Tanda tangan dan contoh fungsi terperinci dapat ditemukan di fungsi SQL [decode (value, decodingScheme)](iot-sql-functions.md#iot-sql-decode-base64) dari referensi SQL.AWS IoT *

Berikut ini adalah contoh ekspresi SQL menggunakan fungsi [decode (value, decodingScheme](iot-sql-functions.md#iot-sql-decode-base64)):

```
SELECT VALUE decode(*, 'proto', '<BUCKET NAME>', '<FILENAME>.desc', '<PROTO_FILENAME>', '<PROTO_MESSAGE_TYPE>') FROM '<MY_TOPIC>'
```

Dalam contoh ekspresi ini:
+ Anda menggunakan fungsi SQL [decode (value, decodingScheme)](iot-sql-functions.md#iot-sql-decode-base64) untuk memecahkan kode payload pesan biner yang direferensikan oleh. `*` Ini bisa berupa payload berkode protobuf biner atau string JSON yang mewakili payload protobuf yang dikodekan base64.
+ Payload pesan yang disediakan dikodekan menggunakan jenis `Person` pesan yang ditentukan. `PROTO_FILENAME.proto`
+ Bucket Amazon S3 bernama `BUCKET NAME` berisi yang `FILENAME.desc` dihasilkan dari. `PROTO_FILENAME.proto`

Setelah Anda menyelesaikan konfigurasi, publikasikan pesan ke AWS IoT Core topik yang menjadi aturan berlangganan.

### Batasan
<a name="binary-payloads-protobuf-limitations"></a>

AWS IoT Core Aturan mendukung protobuf dengan batasan berikut:
+ Decoding payload pesan protobuf dalam template [substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) tidak didukung.
+ Saat mendekode muatan pesan protobuf, Anda dapat menggunakan [fungsi SQL decode dalam satu ekspresi SQL hingga](iot-sql-functions.md#iot-sql-decode-base64) dua kali.
+ Ukuran muatan masuk maksimum adalah 128 KiB (1KiB = 1024 byte), ukuran muatan keluar maksimum adalah 128 KiB, dan ukuran maksimum untuk objek yang `FileDescriptorSet` disimpan dalam ember Amazon S3 adalah 32 KiB.
+ Bucket Amazon S3 yang dienkripsi dengan enkripsi SSE-C tidak didukung.

### Praktik terbaik
<a name="binary-payloads-protobuf-bestpractices"></a>

Berikut adalah beberapa praktik terbaik dan kiat pemecahan masalah.
+ Cadangkan file proto Anda di bucket Amazon S3.

  Ini adalah praktik yang baik untuk membuat cadangan file proto Anda jika terjadi kesalahan. Misalnya, jika Anda salah memodifikasi file proto tanpa backup saat menjalankan protoc, ini dapat menyebabkan masalah pada tumpukan produksi Anda. Ada beberapa cara untuk mencadangkan file Anda di bucket Amazon S3. Misalnya, Anda dapat [menggunakan pembuatan versi di bucket S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Versioning.html). Untuk informasi selengkapnya tentang cara mencadangkan file di bucket Amazon S3, lihat Panduan Pengembang *[Amazon](https://docs.aws.amazon.com//aws-backup/latest/devguide/recovery-points.html)* S3.
+ Konfigurasikan AWS IoT logging untuk melihat entri log.

  Ini adalah praktik yang baik untuk mengonfigurasi AWS IoT logging sehingga Anda dapat memeriksa AWS IoT log untuk akun Anda CloudWatch. Ketika kueri SQL aturan memanggil fungsi eksternal, AWS IoT Core Aturan menghasilkan entri log dengan `eventType` dari`FunctionExecution`, yang berisi bidang alasan yang akan membantu Anda memecahkan masalah kegagalan. Kemungkinan kesalahan termasuk objek Amazon S3 tidak ditemukan, atau deskriptor file protobuf yang tidak valid. Untuk informasi selengkapnya tentang cara mengonfigurasi AWS IoT logging dan melihat entri log, lihat [Mengkonfigurasi entri log mesin AWS IoT logging](https://docs.aws.amazon.com//iot/latest/developerguide/configure-logging.html) [dan Aturan](https://docs.aws.amazon.com//iot/latest/developerguide/cwl-format.html#log-rules-fn-exec).
+ Perbarui `FileDescriptorSet` menggunakan kunci objek baru dan perbarui kunci objek di Aturan Anda.

  Anda dapat memperbarui `FileDescriptorSet` dengan mengunggah file deskriptor yang diperbarui ke bucket Amazon S3 Anda. Pembaruan Anda `FileDescriptorSet` dapat memakan waktu hingga 15 menit untuk tercermin. Untuk menghindari penundaan ini, adalah praktik yang baik untuk mengunggah pembaruan Anda `FileDescriptorSet` menggunakan kunci objek baru, dan memperbarui kunci objek di Aturan Anda.

# Versi SQL
<a name="iot-rule-sql-version"></a>

Mesin AWS IoT aturan menggunakan sintaks seperti SQL untuk memilih data dari pesan MQTT. Pernyataan SQL ditafsirkan berdasarkan versi SQL yang ditentukan dengan `awsIotSqlVersion` properti dalam dokumen JSON yang menjelaskan aturan. Untuk informasi selengkapnya tentang struktur dokumen aturan JSON, lihat [Membuat Aturan](iot-create-rule.md). `awsIotSqlVersion`Properti ini memungkinkan Anda menentukan versi mesin aturan AWS IoT SQL yang ingin Anda gunakan. Saat versi baru diterapkan, Anda dapat terus menggunakan versi yang lebih lama atau mengubah aturan Anda untuk menggunakan versi baru. Aturan Anda saat ini terus menggunakan versi yang dengannya mereka dibuat. 

Contoh JSON berikut menunjukkan cara menentukan versi SQL menggunakan properti. `awsIotSqlVersion`

```
{
    "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 saat ini mendukung versi SQL berikut:
+ `2016-03-23`- Versi SQL dibangun pada 2016-03-23 (disarankan).
+ `2015-10-08`- Versi SQL asli dibangun pada 2015-10-08.
+ `beta`— Versi beta SQL terbaru. Versi ini dapat memperkenalkan perubahan yang melanggar aturan Anda.

## Apa yang baru di versi mesin aturan SQL 2016-03-23
<a name="sql-2016-03-23-beta"></a>
+ Perbaikan untuk memilih objek JSON bersarang.
+ Perbaikan untuk query array.
+ Dukungan kueri intra-objek. Untuk informasi selengkapnya, lihat [Kueri objek bersarang](iot-sql-nested-queries.md).
+ Support untuk menampilkan array sebagai objek tingkat atas.
+ Penambahan `encode(value, encodingScheme)` fungsi, yang dapat diterapkan pada data format JSON dan non-JSON. Untuk informasi selengkapnya, lihat [fungsi encode](iot-sql-functions.md#iot-sql-encode-payload).

### Output `Array` sebagai objek tingkat atas
<a name="return-array-rule"></a>

Fitur ini memungkinkan aturan untuk mengembalikan array sebagai objek tingkat atas. Misalnya, diberikan pesan MQTT berikut:

```
{
    "a": {"b":"c"},
    "arr":[1,2,3,4]
}
```

Dan aturan berikut:

```
SELECT VALUE arr FROM 'topic'
```

Aturan menghasilkan output berikut.

```
[1,2,3,4]
```