

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

# Tutorial: Menyimpan data perangkat dalam tabel DynamoDB
<a name="iot-ddb-rule"></a>

Tutorial ini menunjukkan cara membuat AWS IoT aturan yang mengirimkan data pesan ke tabel DynamoDB.

Dalam tutorial ini, Anda membuat aturan yang mengirimkan data pesan dari perangkat sensor cuaca imajiner ke tabel DynamoDB. Aturan memformat data dari banyak sensor cuaca sehingga dapat ditambahkan ke tabel database tunggal.

**Apa yang akan Anda pelajari dalam tutorial ini**
+ Cara membuat tabel DynamoDB
+ Cara mengirim data pesan ke tabel DynamoDB dari aturan AWS IoT 
+ Cara menggunakan templat substitusi dalam aturan AWS IoT 
+ Cara menggunakan query SQL sederhana dan fungsi dalam pernyataan query aturan
+ Cara menggunakan klien MQTT untuk menguji aturan AWS IoT 

Tutorial ini membutuhkan waktu sekitar 30 menit untuk menyelesaikannya.

**Topics**
+ [Langkah 1: Buat tabel DynamoDB untuk tutorial ini](#iot-ddb-rule-ddb-table)
+ [Langkah 2: Buat AWS IoT aturan untuk mengirim data ke tabel DynamoDB](#iot-ddb-rule-topic-rule)
+ [Langkah 3: Uji AWS IoT aturan dan tabel DynamoDB](#iot-ddb-rule-test)
+ [Langkah 4: Tinjau hasil dan langkah selanjutnya](#iot-ddb-rule-review)

**Sebelum Anda memulai tutorial ini, pastikan Anda memiliki:**
+ 

**[Mengatur Akun AWS](setting-up.md)**  
Anda akan membutuhkan Akun AWS dan AWS IoT konsol Anda untuk menyelesaikan tutorial ini.
+ 

**Diulas [Lihat pesan MQTT dengan klien MQTT AWS IoT](view-mqtt-messages.md)**  
Pastikan Anda dapat menggunakan klien MQTT untuk berlangganan dan mempublikasikan ke suatu topik. Anda akan menggunakan klien MQTT untuk menguji aturan baru Anda dalam prosedur ini.
+ 

**Meninjau ikhtisar [Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html)**  
Jika Anda belum pernah menggunakan DynamoDB sebelumnya, [tinjau Memulai dengan DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) agar terbiasa dengan konsep dasar dan operasi DynamoDB.

## Langkah 1: Buat tabel DynamoDB untuk tutorial ini
<a name="iot-ddb-rule-ddb-table"></a>

Dalam tutorial ini, Anda akan membuat tabel DynamoDB dengan atribut ini untuk merekam data dari perangkat sensor cuaca imajiner: 
+ `sample_time`adalah kunci utama dan menjelaskan waktu sampel direkam.
+ `device_id`adalah kunci sortir dan menjelaskan perangkat yang menyediakan sampel 
+ `device_data`adalah data yang diterima dari perangkat dan diformat oleh pernyataan kueri aturan

**Untuk membuat tabel DynamoDB untuk tutorial ini**

1. **Buka konsol [DynamoDB](https://console.aws.amazon.com//dynamodb/home), lalu pilih Buat tabel.**

1. Di **Buat tabel**:

   1.  Dalam **nama Tabel**, masukkan nama tabel:**wx\$1data**.

   1. Di **kunci Partisi****sample\$1time**, masukkan, dan dalam daftar opsi di sebelah bidang, pilih**Number**.

   1. Di **Sortir kunci****device\$1id**, masukkan, dan dalam daftar opsi di sebelah bidang, pilih**Number**.

   1. Di bagian bawah halaman, pilih **Buat**.

Anda akan menentukan `device_data` nanti, ketika Anda mengkonfigurasi tindakan aturan DynamoDB.

## Langkah 2: Buat AWS IoT aturan untuk mengirim data ke tabel DynamoDB
<a name="iot-ddb-rule-topic-rule"></a>

Pada langkah ini, Anda akan menggunakan pernyataan kueri aturan untuk memformat data dari perangkat sensor cuaca imajiner untuk menulis ke tabel database.

Contoh payload pesan yang diterima dari perangkat sensor cuaca terlihat seperti ini:

```
{
  "temperature": 28,
  "humidity": 80,
  "barometer": 1013,
  "wind": {
    "velocity": 22,
    "bearing": 255
  }
}
```

Untuk entri database, Anda akan menggunakan pernyataan kueri aturan untuk meratakan struktur payload pesan agar terlihat seperti ini:

```
{
  "temperature": 28,
  "humidity": 80,
  "barometer": 1013,
  "wind_velocity": 22,
  "wind_bearing": 255
}
```

Dalam aturan ini, Anda juga akan menggunakan beberapa[Templat substitusi](iot-substitution-templates.md). Templat substitusi adalah ekspresi yang memungkinkan Anda menyisipkan nilai dinamis dari fungsi dan data pesan.

**Untuk membuat AWS IoT aturan untuk mengirim data ke tabel DynamoDB**

1. Buka [hub Aturan AWS IoT konsol](https://console.aws.amazon.com//iot/home#/rulehub). Atau, Anda dapat membuka AWS IoT beranda di dalam Konsol Manajemen AWS dan menavigasi ke **Perutean Pesan> Aturan**.

1. Untuk mulai membuat aturan baru Anda di **Aturan**, pilih **Buat aturan**.

1. Dalam **properti Aturan**:

   1. Dalam **nama Aturan**, masukkan**wx\$1data\$1ddb**.

      Ingat bahwa nama aturan harus unik di dalam Anda Akun AWS dan Wilayah, dan tidak dapat memiliki spasi apa pun. Kami telah menggunakan karakter garis bawah dalam nama ini untuk memisahkan dua kata dalam nama aturan.

   1. Dalam **Deskripsi aturan**, jelaskan aturannya.

      Deskripsi yang bermakna membuatnya lebih mudah untuk mengingat apa yang dilakukan aturan ini dan mengapa Anda membuatnya. Deskripsi bisa selama dibutuhkan, jadi sedetail mungkin. 

1. Pilih **Next** untuk melanjutkan.

1. Dalam **pernyataan SQL**:

   1. Dalam **versi SQL**, pilih**2016-03-23**.

   1. Dalam kotak edit **pernyataan SQL**, masukkan pernyataan: 

      ```
      SELECT temperature, humidity, barometer,
        wind.velocity as wind_velocity,
        wind.bearing as wind_bearing,
      FROM 'device/+/data'
      ```

      Pernyataan ini:
      + Mendengarkan pesan MQTT dengan topik yang cocok dengan filter topik. `device/+/data`
      + Memformat elemen `wind` atribut sebagai atribut individual.
      + Melewati`temperature`,`humidity`, dan `barometer` atribut tidak berubah.

1. Pilih **Next** untuk melanjutkan.

1. Dalam **tindakan Aturan**:

   1. Untuk membuka daftar tindakan aturan untuk aturan ini, di **Tindakan 1**, pilih**DynamoDB**.
**catatan**  
Pastikan Anda memilih DynamoDB dan bukan DBv2 Dynamo sebagai tindakan aturan.

   1. Dalam **nama Tabel**, pilih nama tabel DynamoDB yang Anda buat pada langkah sebelumnya:. **wx\$1data**

      **Tipe kunci Partition** dan kolom **tipe kunci Sort** diisi dengan nilai-nilai dari tabel DynamoDB Anda.

   1. Di **kunci Partisi**, masukkan**sample\$1time**.

   1. Dalam **nilai kunci partisi**, masukkan**\$1\$1timestamp()\$1**.

      Ini adalah yang pertama dari yang akan [Templat substitusi](iot-substitution-templates.md) Anda gunakan dalam aturan ini. Alih-alih menggunakan nilai dari payload pesan, itu akan menggunakan nilai yang dikembalikan dari fungsi stempel waktu. Untuk mempelajari selengkapnya, lihat [stempel waktu](iot-sql-functions.md#iot-function-timestamp) di Panduan *AWS IoT Core Pengembang*.

   1. Di **tombol Sortir**, masukkan**device\$1id**.

   1. Di **Sortir nilai kunci**, masukkan**\$1\$1cast(topic(2) AS DECIMAL)\$1**.

      Ini adalah yang kedua dari yang akan [Templat substitusi](iot-substitution-templates.md) Anda gunakan dalam aturan ini. Ini menyisipkan nilai elemen kedua dalam nama topik, yang merupakan ID perangkat, setelah itu melemparkan ke nilai DECIMAL untuk mencocokkan format numerik kunci. Untuk mempelajari lebih lanjut tentang topik, lihat [topik](iot-sql-functions.md#iot-function-topic) di *Panduan AWS IoT Core Pengembang*. Atau untuk mempelajari lebih lanjut tentang casting, lihat [pemeran](iot-sql-functions.md#iot-sql-function-cast) di *Panduan AWS IoT Core Pengembang*.

   1. Di **Tulis data pesan ke kolom ini**, masukkan**device\$1data**.

      Ini akan membuat `device_data` kolom dalam tabel DynamoDB.

   1. Biarkan **Operasi** kosong.

   1. Dalam **peran IAM**, pilih **Buat peran baru**.

   1. Dalam kotak dialog **Buat peran**, untuk **nama Peran, masukkan **wx\$1ddb\$1role****. Peran baru ini secara otomatis akan berisi kebijakan dengan awalan "aws-iot-rule" yang akan memungkinkan **wx\$1data\$1ddb** aturan untuk mengirim data ke tabel **wx\$1data** DynamoDB yang Anda buat.

   1. Dalam **peran IAM**, pilih**wx\$1ddb\$1role**.

   1. Di bagian bawah halaman, pilih **Selanjutnya**.

1. Di bagian bawah halaman **Tinjau dan buat**, pilih **Buat** untuk membuat aturan.

## Langkah 3: Uji AWS IoT aturan dan tabel DynamoDB
<a name="iot-ddb-rule-test"></a>

Untuk menguji aturan baru, Anda akan menggunakan klien MQTT untuk mempublikasikan dan berlangganan pesan MQTT yang digunakan dalam pengujian ini.

Buka [klien MQTT di AWS IoT konsol di jendela](https://console.aws.amazon.com//iot/home#/test) baru. Ini akan memungkinkan Anda mengedit aturan tanpa kehilangan konfigurasi klien MQTT Anda. Klien MQTT tidak menyimpan langganan atau log pesan apa pun jika Anda membiarkannya pergi ke halaman lain di konsol. Anda juga ingin jendela konsol terpisah terbuka ke [hub DynamoDB Tables di AWS IoT](https://console.aws.amazon.com//dynamodb/home#tables:) konsol untuk melihat entri baru yang dikirim aturan Anda.

**Untuk menggunakan klien MQTT untuk menguji aturan Anda**

1. Di [klien MQTT di AWS IoT konsol](https://console.aws.amazon.com//iot/home#/test), berlangganan topik input,. `device/+/data`

   1. Di klien MQTT, pilih **Berlangganan topik**.

   1. Untuk **filter Topik**, masukkan topik filter topik masukan,**device/\$1/data**.

   1. Pilih **Langganan**.

1. Sekarang, publikasikan pesan ke topik input dengan ID perangkat tertentu,**device/22/data**. Anda tidak dapat mempublikasikan ke topik MQTT yang berisi karakter wildcard.

   1. Di klien MQTT, pilih **Publikasikan ke topik**.

   1. Untuk **nama Topik**, masukkan nama topik masukan,**device/22/data**.

   1. Untuk **payload Pesan**, masukkan contoh data berikut.

      ```
      {
        "temperature": 28,
        "humidity": 80,
        "barometer": 1013,
        "wind": {
          "velocity": 22,
          "bearing": 255
        }
      }
      ```

   1. **Untuk mempublikasikan pesan MQTT, pilih Publish.**

   1. Sekarang, di klien MQTT, pilih **Berlangganan topik**. Di kolom **Berlangganan**, pilih **device/\$1/data** langganan. Konfirmasikan bahwa data sampel dari langkah sebelumnya muncul di sana.

1. Periksa untuk melihat baris dalam tabel DynamoDB yang aturan Anda buat.

   1. **Di [hub DynamoDB Tables di AWS IoT](https://console.aws.amazon.com//dynamodb/home#tables:) konsol, **pilih wx\$1data, lalu pilih** tab Items.**

      Jika Anda sudah berada di tab **Item**, Anda mungkin perlu menyegarkan tampilan dengan memilih ikon penyegaran di sudut kanan atas header tabel.

   1. Perhatikan bahwa nilai **sample\$1time** dalam tabel adalah link dan buka satu. Jika Anda baru saja mengirim pesan pertama Anda, itu akan menjadi satu-satunya dalam daftar.

      Tautan ini menampilkan semua data di baris tabel tersebut.

   1. Perluas entri **device\$1data** untuk melihat data yang dihasilkan dari pernyataan kueri aturan.

   1. Jelajahi berbagai representasi data yang tersedia di tampilan ini. Anda juga dapat mengedit data di tampilan ini.

   1. Setelah Anda selesai meninjau baris data ini, untuk menyimpan perubahan apa pun yang Anda buat, pilih **Simpan**, atau keluar tanpa menyimpan perubahan apa pun, pilih **Batal**.

Jika Anda tidak melihat perilaku yang benar, periksa tips pemecahan masalah.

### Memecahkan masalah aturan DynamoDB
<a name="iot-ddb-rule-trouble"></a>

Berikut adalah beberapa hal untuk diperiksa jika Anda tidak melihat hasil yang Anda harapkan.
+ 

**Anda mendapat spanduk kesalahan**  
Jika kesalahan muncul saat Anda mempublikasikan pesan input, perbaiki kesalahan itu terlebih dahulu. Langkah-langkah berikut dapat membantu Anda memperbaiki kesalahan itu.
+ 

**Anda tidak melihat pesan masukan di klien MQTT**  
Setiap kali Anda mempublikasikan pesan masukan ke `device/22/data` topik, pesan itu akan muncul di klien MQTT jika Anda berlangganan filter `device/+/data` topik seperti yang dijelaskan dalam prosedur.

**Hal-hal yang harus diperiksa**
  + 

**Periksa filter topik yang Anda langgani**  
Jika Anda berlangganan topik pesan input seperti yang dijelaskan dalam prosedur, Anda akan melihat salinan pesan input setiap kali Anda mempublikasikannya.

    Jika Anda tidak melihat pesan, periksa nama topik yang Anda langgani dan bandingkan dengan topik yang Anda terbitkan. Nama topik peka huruf besar/kecil dan topik yang Anda langgani harus identik dengan topik yang Anda publikasikan payload pesan.
  + 

**Periksa fungsi publikasi pesan**  
**Di klien MQTT, di bawah **Langganan**, pilih **perangkat/\$1/data**, periksa topik pesan terbitkan, lalu pilih Publikasikan ke topik.** Anda akan melihat payload pesan dari kotak edit di bawah topik yang muncul di daftar pesan. 
+ 

**Anda tidak melihat data Anda di tabel DynamoDB**  
Hal pertama yang harus dilakukan adalah menyegarkan tampilan dengan memilih ikon penyegaran di sudut kanan atas header tabel. Jika itu tidak menampilkan data yang Anda cari, periksa yang berikut ini.

**Hal-hal yang harus diperiksa**
  + 

**Periksa klien MQTT Anda dan aturan yang Anda buat Wilayah AWS**  
Konsol tempat Anda menjalankan klien MQTT harus berada di AWS Wilayah yang sama dengan aturan yang Anda buat. 
  + 

**Periksa topik pesan masukan dalam pernyataan kueri aturan**  
Agar aturan berfungsi, aturan harus menerima pesan dengan nama topik yang cocok dengan filter topik dalam klausa FROM dari pernyataan kueri aturan.

    Periksa ejaan filter topik dalam pernyataan kueri aturan dengan topik di klien MQTT. Nama topik peka huruf besar/kecil dan topik pesan harus cocok dengan filter topik dalam pernyataan kueri aturan.
  + 

**Periksa isi payload pesan masukan**  
Agar aturan berfungsi, ia harus menemukan bidang data di payload pesan yang dideklarasikan dalam pernyataan SELECT.

    Periksa ejaan `temperature` bidang dalam pernyataan kueri aturan dengan payload pesan di klien MQTT. Nama bidang peka huruf besar/kecil dan `temperature` bidang dalam pernyataan kueri aturan harus identik dengan `temperature` bidang di payload pesan.

    Pastikan dokumen JSON di payload pesan diformat dengan benar. Jika JSON memiliki kesalahan, seperti koma yang hilang, aturan tidak akan dapat membacanya. 
  + 

**Periksa nama kunci dan bidang yang digunakan dalam tindakan aturan**  
Nama bidang yang digunakan dalam aturan topik harus cocok dengan nama yang ditemukan di payload pesan JSON dari pesan yang dipublikasikan.

    Buka aturan yang Anda buat di konsol dan periksa nama bidang dalam konfigurasi tindakan aturan dengan yang digunakan dalam klien MQTT.
  + 

**Periksa peran yang digunakan oleh aturan**  
Tindakan aturan harus memiliki izin untuk menerima topik asli dan mempublikasikan topik baru. 

    Kebijakan yang mengotorisasi aturan untuk menerima data pesan dan memperbarui tabel DynamoDB khusus untuk topik yang digunakan. Jika mengubah topik atau nama tabel DynamoDB yang digunakan oleh aturan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai.

    Jika Anda mencurigai ini masalahnya, edit tindakan aturan dan buat peran baru. Peran baru yang dibuat oleh tindakan aturan menerima otorisasi yang diperlukan untuk melakukan tindakan ini.

## Langkah 4: Tinjau hasil dan langkah selanjutnya
<a name="iot-ddb-rule-review"></a>

Setelah Anda mengirim beberapa pesan ke tabel DynamoDB dengan aturan ini, coba bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek dari tutorial memengaruhi data yang ditulis ke tabel. Berikut adalah beberapa ide untuk Anda mulai.
+ *device\$1id*Ubah topik pesan masukan dan amati efeknya pada data. Anda dapat menggunakan ini untuk mensimulasikan penerimaan data dari beberapa sensor cuaca.
+ Ubah bidang yang dipilih dalam pernyataan kueri aturan dan amati efeknya pada data. Anda dapat menggunakan ini untuk memfilter data yang disimpan dalam tabel.
+ Tambahkan tindakan aturan penerbitan ulang untuk mengirim pesan MQTT untuk setiap baris yang ditambahkan ke tabel. Anda dapat menggunakan ini untuk debugging.

Setelah Anda menyelesaikan tutorial ini, periksa[Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda](iot-lambda-rule.md).