

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

# Membuat AWS IoT aturan untuk merutekan data perangkat ke layanan lain
<a name="iot-rules-tutorial"></a>

Tutorial ini menunjukkan cara membuat dan menguji AWS IoT aturan menggunakan beberapa tindakan aturan yang lebih umum.

AWS IoT aturan mengirim data dari perangkat Anda ke AWS layanan lain. Mereka mendengarkan pesan MQTT tertentu, memformat data dalam muatan pesan, dan mengirim hasilnya ke layanan lain. AWS 

Kami menyarankan Anda mencoba ini dalam urutan yang ditampilkan di sini, bahkan jika tujuan Anda adalah membuat aturan yang menggunakan fungsi Lambda atau sesuatu yang lebih kompleks. Tutorial disajikan secara berurutan dari dasar hingga yang kompleks. Mereka menyajikan konsep baru secara bertahap untuk membantu Anda mempelajari konsep yang dapat Anda gunakan untuk membuat tindakan aturan yang tidak memiliki tutorial khusus.

**catatan**  
AWS IoT aturan membantu Anda mengirim data dari perangkat IoT Anda ke layanan lain AWS . Namun, untuk melakukannya dengan sukses, Anda memerlukan pengetahuan tentang layanan lain tempat Anda ingin mengirim data. Meskipun tutorial ini memberikan informasi yang diperlukan untuk menyelesaikan tugas, Anda mungkin merasa terbantu untuk mempelajari lebih lanjut tentang layanan yang ingin Anda kirimi data sebelum Anda menggunakannya dalam solusi Anda. Penjelasan rinci tentang AWS layanan lain berada di luar cakupan tutorial ini.

**Ikhtisar skenario tutorial**  
Skenario untuk tutorial ini adalah perangkat sensor cuaca yang secara berkala menerbitkan datanya. Ada banyak perangkat sensor seperti itu dalam sistem imajiner ini. Tutorial di bagian ini, bagaimanapun, fokus pada satu perangkat sambil menunjukkan bagaimana Anda dapat mengakomodasi beberapa sensor.

Tutorial di bagian ini menunjukkan cara menggunakan AWS IoT aturan untuk melakukan tugas-tugas berikut dengan sistem imajiner perangkat sensor cuaca ini.
+ 

**[Tutorial: Menerbitkan ulang pesan MQTT](iot-repub-rule.md)**  
Tutorial ini menunjukkan cara mempublikasikan ulang pesan MQTT yang diterima dari sensor cuaca sebagai pesan yang hanya berisi ID sensor dan nilai suhu. Ini hanya menggunakan AWS IoT Core layanan dan menunjukkan kueri SQL sederhana dan cara menggunakan klien MQTT untuk menguji aturan Anda.
+ 

**[Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)**  
Tutorial ini menunjukkan cara mengirim pesan SNS ketika nilai dari perangkat sensor cuaca melebihi nilai tertentu. Ini dibangun di atas konsep yang disajikan dalam tutorial sebelumnya dan menambahkan cara bekerja dengan AWS layanan lain, [Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html) (Amazon SNS).

  Jika Anda baru mengenal Amazon SNS, tinjau latihan [Memulai](https://docs.aws.amazon.com//sns/latest/dg/sns-getting-started.html) sebelum memulai tutorial ini. 
+ 

**[Tutorial: Menyimpan data perangkat dalam tabel DynamoDB](iot-ddb-rule.md)**  
Tutorial ini menunjukkan cara menyimpan data dari perangkat sensor cuaca dalam tabel database. Ini menggunakan pernyataan kueri aturan dan template substitusi untuk memformat data pesan untuk layanan tujuan, [Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html).

  Jika Anda baru mengenal DynamoDB, tinjau latihan [Memulai](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) sebelum memulai tutorial ini.
+ 

**[Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda](iot-lambda-rule.md)**  
Tutorial ini menunjukkan cara memanggil fungsi Lambda untuk memformat ulang data perangkat dan kemudian mengirimkannya sebagai pesan teks. Ia menambahkan skrip Python dan fungsi AWS SDK dalam [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)fungsi untuk memformat dengan data payload pesan dari perangkat sensor cuaca dan mengirim pesan teks.

  Jika Anda baru mengenal Lambda, tinjau latihan [Memulai](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) sebelum Anda memulai tutorial ini.

**AWS IoT ikhtisar aturan**  
Semua tutorial ini membuat AWS IoT aturan. 

Untuk AWS IoT aturan untuk mengirim data dari perangkat ke AWS layanan lain, ia menggunakan: 


+ Pernyataan kueri aturan yang terdiri dari:
  + Klausa SQL SELECT yang memilih dan memformat data dari payload pesan
  + Filter topik (objek FROM dalam pernyataan kueri aturan) yang mengidentifikasi pesan yang akan digunakan
  + Pernyataan kondisional opsional (klausa SQL WHERE) yang menentukan kondisi tertentu untuk bertindak
+ Setidaknya satu tindakan aturan

Perangkat mempublikasikan pesan ke topik MQTT. Filter topik dalam pernyataan SQL SELECT mengidentifikasi topik MQTT untuk menerapkan aturan. Bidang yang ditentukan dalam pernyataan SQL SELECT memformat data dari muatan pesan MQTT yang masuk untuk digunakan oleh tindakan aturan. Untuk daftar lengkap tindakan aturan, lihat [Tindakan AWS IoT aturan](iot-rule-actions.md).

**Topics**
+ [Tutorial: Menerbitkan ulang pesan MQTT](iot-repub-rule.md)
+ [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)
+ [Tutorial: Menyimpan data perangkat dalam tabel DynamoDB](iot-ddb-rule.md)
+ [Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda](iot-lambda-rule.md)

# Tutorial: Menerbitkan ulang pesan MQTT
<a name="iot-repub-rule"></a>

Tutorial ini menunjukkan cara membuat AWS IoT aturan yang menerbitkan pesan MQTT ketika pesan MQTT tertentu diterima. Payload pesan yang masuk dapat dimodifikasi oleh aturan sebelum dipublikasikan. Ini memungkinkan untuk membuat pesan yang disesuaikan dengan aplikasi tertentu tanpa perlu mengubah perangkat Anda atau firmware-nya. Anda juga dapat menggunakan aspek pemfilteran aturan untuk mempublikasikan pesan hanya ketika kondisi tertentu terpenuhi.

Pesan yang diterbitkan ulang oleh aturan bertindak seperti pesan yang dikirim oleh AWS IoT perangkat atau klien lain. Perangkat dapat berlangganan pesan yang diterbitkan ulang dengan cara yang sama seperti mereka dapat berlangganan topik pesan MQTT lainnya.

**Apa yang akan Anda pelajari dalam tutorial ini:**
+ 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**
+ [Tinjau topik dan aturan MQTT AWS IoT](#iot-repub-rule-mqtt)
+ [Langkah 1: Buat AWS IoT aturan untuk menerbitkan ulang pesan MQTT](#iot-repub-rule-define)
+ [Langkah 2: Uji aturan baru Anda](#iot-repub-rule-test)
+ [Langkah 3: Tinjau hasil dan langkah selanjutnya](#iot-repub-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.

## Tinjau topik dan aturan MQTT AWS IoT
<a name="iot-repub-rule-mqtt"></a>

Sebelum berbicara tentang AWS IoT aturan, ada baiknya untuk memahami protokol MQTT. Dalam solusi IoT, protokol MQTT menawarkan beberapa keunggulan dibandingkan protokol komunikasi jaringan lainnya, seperti HTTP, yang menjadikannya pilihan populer untuk digunakan oleh perangkat IoT. Bagian ini mengulas aspek-aspek kunci dari MQTT karena mereka berlaku untuk tutorial ini. Untuk informasi tentang bagaimana MQTT dibandingkan dengan HTTP, lihat. [Memilih protokol aplikasi untuk komunikasi perangkat Anda](protocols.md#protocol-selection)

**Protokol MQTT**  
Protokol MQTT menggunakan model publish/subscribe komunikasi dengan hostnya. Untuk mengirim data, perangkat mempublikasikan pesan yang diidentifikasi berdasarkan topik ke broker AWS IoT pesan. Untuk menerima pesan dari broker pesan, perangkat berlangganan topik yang akan mereka terima dengan mengirimkan filter topik dalam permintaan berlangganan ke broker pesan. Mesin AWS IoT aturan menerima pesan MQTT dari broker pesan.

**AWS IoT aturan**  
AWS IoT aturan terdiri dari pernyataan kueri aturan dan satu atau lebih tindakan aturan. Ketika mesin AWS IoT aturan menerima pesan MQTT, elemen-elemen ini bertindak pada pesan sebagai berikut.
+ 

**Pernyataan kueri aturan**  
Pernyataan kueri aturan menjelaskan topik MQTT yang akan digunakan, menafsirkan data dari muatan pesan, dan memformat data seperti yang dijelaskan oleh pernyataan SQL yang mirip dengan pernyataan yang digunakan oleh database SQL populer. Hasil dari pernyataan query adalah data yang dikirim ke tindakan aturan.
+ 

**Tindakan aturan**  
Setiap tindakan aturan dalam aturan bertindak pada data yang dihasilkan dari pernyataan kueri aturan. AWS IoT mendukung [banyak tindakan aturan](iot-rule-actions.md). Namun, dalam tutorial ini, Anda akan berkonsentrasi pada tindakan [Publikasikan ulang](republish-rule-action.md) aturan, yang menerbitkan hasil pernyataan kueri sebagai pesan MQTT dengan topik tertentu.

## Langkah 1: Buat AWS IoT aturan untuk menerbitkan ulang pesan MQTT
<a name="iot-repub-rule-define"></a>

 AWS IoT Aturan yang akan Anda buat dalam tutorial ini berlangganan topik `device/device_id/data` MQTT di *device\$1id* mana ID perangkat yang mengirim pesan. Topik-topik ini dijelaskan oleh [filter topik](topics.md#topicfilters) sebagai`device/+/data`, di mana `+` adalah karakter wildcard yang cocok dengan string apa pun di antara dua karakter garis miring ke depan.

Ketika aturan menerima pesan dari topik yang cocok, aturan akan menerbitkan kembali `device_id` dan `temperature` nilai sebagai pesan MQTT baru dengan topik tersebut. `device/data/temp` 

Misalnya, muatan pesan MQTT dengan `device/22/data` topik terlihat seperti ini:

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

Aturan mengambil `temperature` nilai dari payload pesan, dan `device_id` dari topik, dan menerbitkannya kembali sebagai pesan MQTT dengan `device/data/temp` topik dan muatan pesan yang terlihat seperti ini:

```
{
  "device_id": "22",
  "temperature": 28
}
```

Dengan aturan ini, perangkat yang hanya memerlukan ID perangkat dan data suhu berlangganan `device/data/temp` topik untuk hanya menerima informasi itu.

**Untuk membuat aturan yang menerbitkan kembali pesan MQTT**

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

1. Di **Aturan**, pilih **Buat** dan mulai membuat aturan baru Anda.

1. Di bagian atas **Buat aturan**:

   1. Di **Nama**, masukkan nama aturan. Untuk tutorial ini, beri nama**republish\$1temp**.

      Ingat bahwa nama aturan harus unik dalam Akun dan Wilayah Anda, 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**, jelaskan aturannya. 

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

1. Dalam **pernyataan kueri Aturan** **Buat aturan**:

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

   1. Dalam kotak edit **pernyataan kueri aturan**, masukkan pernyataan: 

      ```
      SELECT topic(2) as device_id, temperature FROM 'device/+/data'
      ```

      Pernyataan ini:
      + Mendengarkan pesan MQTT dengan topik yang cocok dengan filter topik. `device/+/data`
      + Memilih elemen kedua dari string topik dan menugaskannya ke bidang. `device_id`
      + Memilih `temperature` bidang nilai dari payload pesan dan menetapkannya ke bidang. `temperature`

1. Di **Tetapkan satu atau lebih tindakan**:

   1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih **Tambah tindakan**.

   1. Di **Pilih tindakan**, pilih **Menerbitkan ulang pesan ke AWS IoT topik**.

   1. Di bagian bawah daftar tindakan, pilih **Konfigurasi tindakan** untuk membuka halaman konfigurasi tindakan yang dipilih.

1. Dalam **tindakan Konfigurasi**:

   1.  Di **Topik**, masukkan**device/data/temp**. Ini adalah topik MQTT dari pesan yang akan dipublikasikan oleh aturan ini. 

   1.  Di **Quality of Service**, pilih **0 - Pesan dikirim nol kali atau lebih**. 

   1.  Di **Pilih atau buat peran untuk memberikan AWS IoT akses untuk melakukan tindakan ini**:

      1.  Pilih **Buat Peran**. Kotak dialog **Buat peran baru** terbuka. 

      1. Masukkan nama yang menggambarkan peran baru. Dalam tutorial ini, gunakan**republish\$1role**. 

         Saat Anda membuat peran baru, kebijakan yang benar untuk melakukan tindakan aturan dibuat dan dilampirkan ke peran baru. Jika Anda mengubah topik tindakan aturan ini atau menggunakan peran ini dalam tindakan aturan lain, Anda harus memperbarui kebijakan untuk peran tersebut guna mengotorisasi topik atau tindakan baru. Untuk memperbarui peran yang ada, pilih **Perbarui peran** di bagian ini.

      1. Pilih **Buat Peran** untuk membuat peran dan menutup kotak dialog. 

   1. Pilih **Tambahkan tindakan** untuk menambahkan tindakan ke aturan dan kembali ke halaman **Buat aturan**. 

1. **Menerbitkan ulang pesan ke tindakan AWS IoT topik** sekarang tercantum dalam **Tetapkan satu atau beberapa tindakan**.

   Di ubin tindakan baru, di bawah **Publikasikan ulang pesan ke suatu AWS IoT topik**, Anda dapat melihat topik yang akan dipublikasikan oleh tindakan penerbitan ulang Anda.

   Ini adalah satu-satunya tindakan aturan yang akan Anda tambahkan ke aturan ini.

1. Di **Buat aturan**, gulir ke bawah ke bawah dan pilih **Buat aturan** untuk membuat aturan dan selesaikan langkah ini.

## Langkah 2: Uji aturan baru Anda
<a name="iot-repub-rule-test"></a>

Untuk menguji aturan baru Anda, Anda akan menggunakan klien MQTT untuk mempublikasikan dan berlangganan pesan MQTT yang digunakan oleh aturan 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.

**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, dalam hal ini,. `device/+/data`

   1. Di klien MQTT, di bawah **Langganan, pilih **Berlangganan**** topik.

   1. Dalam **topik Langganan**, masukkan topik filter topik masukan,**device/\$1/data**.

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **Publikasikan ke topik**, **device/\$1/data** muncul. 

1. Berlangganan topik yang akan diterbitkan oleh aturan Anda:`device/data/temp`.

   1. Di bawah **Langganan****, pilih Berlangganan topik** lagi, dan dalam **topik Langganan**, masukkan topik pesan yang diterbitkan ulang,. **device/data/temp**

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **perangkat/\$1/data, muncul**. **device/data/temp** 

1. 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, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/22/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Untuk mengirim pesan MQTT Anda, pilih **Publikasikan** ke topik.

1. Tinjau pesan yang dikirim.

   1. Di klien MQTT, di bawah **Langganan**, ada titik hijau di sebelah dua topik yang Anda berlangganan sebelumnya.

      Titik-titik hijau menunjukkan bahwa satu atau lebih pesan baru telah diterima sejak terakhir kali Anda melihatnya.

   1. Di bawah **Langganan**, pilih **perangkat/\$1/data** untuk memeriksa apakah muatan pesan cocok dengan apa yang baru saja Anda terbitkan dan terlihat seperti ini:

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

   1. Di bawah **Langganan**, pilih **device/data/temp**untuk memeriksa apakah payload pesan yang dipublikasikan ulang terlihat seperti ini:

      ```
      {
        "device_id": "22",  
        "temperature": 28
      }
      ```

      Perhatikan bahwa `device_id` nilainya adalah string yang dikutip dan `temperature` nilainya numerik. Hal ini karena [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic)fungsi mengekstrak string dari nama topik pesan masukan sementara `temperature` nilai menggunakan nilai numerik dari payload pesan masukan.

      Jika Anda ingin membuat nilai `device_id` nilai numerik, ganti `topic(2)` dalam pernyataan kueri aturan dengan:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Perhatikan bahwa `topic(2)` mentransmisikan nilai ke nilai numerik hanya akan berfungsi jika bagian topik tersebut hanya berisi karakter numerik.

1. Jika Anda melihat bahwa pesan yang benar dipublikasikan ke **device/data/temp**topik, maka aturan Anda berfungsi. Lihat apa lagi yang dapat Anda pelajari tentang tindakan aturan Publikasikan ulang di bagian berikutnya.

   Jika Anda tidak melihat bahwa pesan yang benar telah dipublikasikan ke **perangkat/\$1/data** atau **device/data/temp**topik, periksa tips pemecahan masalah.

### Memecahkan masalah aturan pesan Republish
<a name="iot-repub-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 pesan yang diterbitkan ulang di klien MQTT**  
Agar aturan Anda berfungsi, ia harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima dan menerbitkan ulang pesan dan harus menerima pesan.

**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 topik pesan yang diterbitkan ulang dalam tindakan aturan**  
Topik di mana tindakan aturan Republish menerbitkan pesan baru harus sesuai dengan topik yang Anda berlangganan di klien MQTT.

    Buka aturan yang Anda buat di konsol dan periksa topik di mana tindakan aturan akan menerbitkan ulang pesan.
  + 

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

    Kebijakan yang mengizinkan aturan untuk menerima data pesan dan mempublikasikannya khusus untuk topik yang digunakan. Jika mengubah topik yang digunakan untuk memublikasikan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

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

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

**Dalam tutorial ini**
+ Anda menggunakan query SQL sederhana dan beberapa fungsi dalam pernyataan query aturan untuk menghasilkan pesan MQTT baru.
+ Anda membuat aturan yang menerbitkan ulang pesan baru itu.
+ Anda menggunakan klien MQTT untuk menguji aturan Anda. AWS IoT 

**Langkah selanjutnya**  
Setelah Anda menerbitkan ulang beberapa pesan dengan aturan ini, cobalah bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek tutorial memengaruhi pesan yang diterbitkan ulang. Berikut adalah beberapa ide untuk Anda mulai.
+ Ubah topik pesan masukan dan amati efeknya dalam payload pesan yang diterbitkan ulang. *device\$1id*
+ Ubah bidang yang dipilih dalam pernyataan kueri aturan dan amati efeknya dalam payload pesan yang diterbitkan ulang.
+ Coba tutorial berikutnya dalam seri ini dan pelajari caranya[Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md).

Tindakan aturan Republish yang digunakan dalam tutorial ini juga dapat membantu Anda men-debug pernyataan kueri aturan. Misalnya, Anda dapat menambahkan tindakan ini ke aturan untuk melihat bagaimana pernyataan kueri aturannya memformat data yang digunakan oleh tindakan aturannya.

# Tutorial: Mengirim notifikasi Amazon SNS
<a name="iot-sns-rule"></a>

Tutorial ini menunjukkan cara membuat AWS IoT aturan yang mengirimkan data pesan MQTT ke topik Amazon SNS sehingga dapat dikirim sebagai pesan teks SMS. 

Dalam tutorial ini, Anda membuat aturan yang mengirimkan data pesan dari sensor cuaca ke semua pelanggan topik Amazon SNS, setiap kali suhu melebihi nilai yang ditetapkan dalam aturan. Aturan mendeteksi ketika suhu yang dilaporkan melebihi nilai yang ditetapkan oleh aturan, dan kemudian membuat muatan pesan baru yang hanya mencakup ID perangkat, suhu yang dilaporkan, dan batas suhu yang terlampaui. Aturan mengirimkan payload pesan baru sebagai dokumen JSON ke topik SNS, yang memberi tahu semua pelanggan ke topik SNS.

**Apa yang akan Anda pelajari dalam tutorial ini:**
+ Cara membuat dan menguji notifikasi Amazon SNS
+ Cara memanggil notifikasi Amazon SNS dari suatu 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 topik Amazon SNS yang mengirim pesan teks SMS](#iot-sns-rule-create-sns-topic)
+ [Langkah 2: Buat AWS IoT aturan untuk mengirim pesan teks](#iot-sns-rule-create-rule)
+ [Langkah 3: Uji AWS IoT aturan dan pemberitahuan Amazon SNS](#iot-sns-rule-test-rule)
+ [Langkah 4: Tinjau hasil dan langkah selanjutnya](#iot-sns-rule-review-results)

**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 [Layanan Pemberitahuan Sederhana Amazon](https://docs.aws.amazon.com//sns/latest/dg/welcome.html)**  
Jika Anda belum pernah menggunakan Amazon SNS sebelumnya, tinjau [Menyiapkan akses untuk Amazon SNS](https://docs.aws.amazon.com//sns/latest/dg/sns-setting-up.html). Jika Anda sudah menyelesaikan AWS IoT tutorial lain, Anda Akun AWS harus sudah dikonfigurasi dengan benar.

## Langkah 1: Buat topik Amazon SNS yang mengirim pesan teks SMS
<a name="iot-sns-rule-create-sns-topic"></a>

Prosedur ini menjelaskan cara membuat topik Amazon SNS yang dapat dikirimkan oleh sensor cuaca Anda. Topik Amazon SNS kemudian akan memberi tahu semua pelanggannya melalui pesan teks SMS tentang batas suhu yang terlampaui.

**Untuk membuat topik Amazon SNS yang mengirim pesan teks SMS**

1. **Buat topik Amazon SNS.**

   1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com//sns/home).

   1. Di panel navigasi kiri, pilih **Topics (Topik)**.

   1. Di halaman **Topics (Topik)**, pilih **Create topic (Buat topik)**.

   1. Di **Detail**, pilih tipe **Standar**. Secara default, konsol membuat topik FIFO.

   1. Di **Nama**, masukkan nama topik SNS. Untuk tutorial ini, masukkan **high\$1temp\$1notice**.

   1. Gulir ke akhir halaman dan pilih **Buat topik**.

      Konsol membuka halaman **Detail** topik baru.

1. **Buat langganan Amazon SNS.**
**catatan**  
Nomor telepon yang Anda gunakan dalam langganan ini mungkin dikenakan biaya pesan teks dari pesan yang akan Anda kirim dalam tutorial ini.

   1. **Di halaman detail topik **high\$1temp\$1notice**, pilih Buat langganan.**

   1. Di **Buat langganan**, di bagian **Detail**, dalam daftar **Protokol**, pilih **SMS**.

   1. Di **Endpoint**, masukkan nomor telepon yang dapat menerima pesan teks. Pastikan untuk memasukkannya sedemikian rupa sehingga dimulai dengan`+`, termasuk kode negara dan area, dan tidak menyertakan karakter tanda baca lainnya.

   1. Pilih **Buat langganan**.

1. **Uji notifikasi Amazon SNS.**

   1. **Di [konsol Amazon SNS](https://console.aws.amazon.com//sns/home), di panel navigasi kiri, pilih Topik.**

   1. Untuk membuka halaman detail topik, di **Topik, dalam daftar topik**, pilih **high\$1temp\$1notice**.

   1. **Untuk membuka halaman **Publikasikan pesan ke topik**, di halaman detail **high\$1temp\$1notice**, pilih Publikasikan pesan.**

   1. **Di **Publikasikan pesan ke topik**, di bagian Isi **pesan, di Badan pesan untuk dikirim ke titik akhir**, masukkan pesan singkat.**

   1. Gulir ke bawah ke bagian bawah halaman dan pilih **Publikasikan pesan**.

   1. Di telepon dengan nomor yang Anda gunakan sebelumnya saat membuat langganan, konfirmasikan bahwa pesan telah diterima.

   Jika Anda tidak menerima pesan tes, periksa kembali nomor telepon dan pengaturan telepon Anda.

   Pastikan Anda dapat mempublikasikan pesan pengujian dari [konsol Amazon SNS](https://console.aws.amazon.com//sns/home) sebelum melanjutkan tutorial.

## Langkah 2: Buat AWS IoT aturan untuk mengirim pesan teks
<a name="iot-sns-rule-create-rule"></a>

 AWS IoT Aturan yang akan Anda buat dalam tutorial ini berlangganan topik `device/device_id/data` MQTT di `device_id` mana ID perangkat yang mengirim pesan. Topik-topik ini dijelaskan dalam filter topik sebagai`device/+/data`, di mana `+` adalah karakter wildcard yang cocok dengan string apa pun di antara dua karakter garis miring ke depan. Aturan ini juga menguji nilai `temperature` bidang dalam payload pesan.

Saat aturan menerima pesan dari topik yang cocok, aturan akan mengambil `device_id` dari nama topik, `temperature` nilai dari payload pesan, dan menambahkan nilai konstan untuk batas pengujian, dan mengirimkan nilai ini sebagai dokumen JSON ke topik notifikasi Amazon SNS. 

 Misalnya, pesan MQTT dari perangkat sensor cuaca nomor 32 menggunakan `device/32/data` topik dan memiliki muatan pesan yang terlihat seperti ini: 

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

Pernyataan kueri aturan mengambil `temperature` nilai dari payload pesan, `device_id` dari nama topik, dan menambahkan `max_temperature` nilai konstan untuk mengirim payload pesan yang terlihat seperti ini ke topik Amazon SNS: 

```
{
  "device_id": "32",
  "reported_temperature": 38,
  "max_temperature": 30
}
```

**Untuk membuat AWS IoT aturan untuk mendeteksi nilai suhu over-limit dan membuat data untuk dikirim ke topik Amazon SNS**

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

1. Jika ini adalah aturan pertama Anda, pilih **Buat**, atau **Buat aturan**.

1. Di **Buat aturan**:

   1. Di **Nama**, masukkan **temp\$1limit\$1notify**.

      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 kata-kata dalam nama aturan. 

   1. Dalam **Deskripsi**, 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. Dalam **pernyataan kueri Aturan** **Buat aturan**:

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

   1. Dalam kotak edit **pernyataan kueri aturan**, masukkan pernyataan: 

      ```
      SELECT topic(2) as device_id, 
          temperature as reported_temperature, 
          30 as max_temperature 
        FROM 'device/+/data' 
        WHERE temperature > 30
      ```

      Pernyataan ini:
      + Mendengarkan pesan MQTT dengan topik yang cocok dengan filter `device/+/data` topik dan yang memiliki `temperature` nilai lebih besar dari 30. 
      + Memilih elemen kedua dari string topik dan menetapkannya ke bidang. `device_id`
      + Memilih `temperature` bidang nilai dari payload pesan dan menetapkannya ke bidang. `reported_temperature` 
      + Menciptakan nilai konstan `30` untuk mewakili nilai batas dan menetapkannya ke `max_temperature` bidang. 

1. Untuk membuka daftar tindakan aturan untuk aturan ini, di **Tetapkan satu atau beberapa tindakan**, pilih **Tambah tindakan**.

1. Di **Pilih tindakan**, pilih **Kirim pesan sebagai pemberitahuan push SNS**.

1. Untuk membuka halaman konfigurasi tindakan yang dipilih, di bagian bawah daftar tindakan, pilih **Konfigurasi tindakan**. 

1. Dalam **tindakan Konfigurasi**:

   1. **Di **target SNS**, **pilih Pilih**, temukan topik SNS Anda bernama **high\$1temp\$1notice**, dan pilih Select.**

   1. Dalam **format Pesan**, pilih **RAW**.

   1. Di **Pilih atau buat peran untuk memberikan AWS IoT akses untuk melakukan tindakan ini**, pilih **Buat Peran**.

   1. Di **Buat peran baru**, di **Nama**, masukkan nama unik untuk peran baru. Untuk tutorial ini, gunakan **sns\$1rule\$1role**.

   1. Pilih **Buat peran**.

   Jika Anda mengulangi tutorial ini atau menggunakan kembali peran yang ada, pilih **Perbarui peran sebelum melanjutkan**. Ini memperbarui dokumen kebijakan peran agar berfungsi dengan target SNS.

1. Pilih **Tambah tindakan** dan kembali ke halaman **Buat aturan**.

   Di ubin tindakan baru, di bawah **Kirim pesan sebagai pemberitahuan push SNS**, Anda dapat melihat topik SNS yang akan dipanggil aturan Anda. 

   Ini adalah satu-satunya tindakan aturan yang akan Anda tambahkan ke aturan ini.

1. Untuk membuat aturan dan menyelesaikan langkah ini, di **Buat aturan**, gulir ke bawah ke bawah dan pilih **Buat aturan**.

## Langkah 3: Uji AWS IoT aturan dan pemberitahuan Amazon SNS
<a name="iot-sns-rule-test-rule"></a>

Untuk menguji aturan baru Anda, Anda akan menggunakan klien MQTT untuk mempublikasikan dan berlangganan pesan MQTT yang digunakan oleh aturan 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. Jika Anda meninggalkan klien MQTT untuk membuka halaman lain di konsol, itu tidak akan menyimpan langganan atau log pesan apa pun.

**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, dalam hal ini,. `device/+/data`

   1. Di klien MQTT, di bawah **Langganan, pilih **Berlangganan**** topik.

   1. Dalam **topik Langganan**, masukkan topik filter topik masukan,**device/\$1/data**.

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **Publikasikan ke topik**, **device/\$1/data** muncul. 

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

   1. **Di klien MQTT, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/32/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Pilih **Publikasikan ke topik** untuk mempublikasikan pesan MQTT Anda.

1. Konfirmasikan bahwa pesan teks telah dikirim.

   1. Di klien MQTT, di bawah **Langganan**, ada titik hijau di sebelah topik yang Anda berlangganan sebelumnya.

      Titik hijau menunjukkan bahwa satu atau lebih pesan baru telah diterima sejak terakhir kali Anda melihatnya.

   1. Di bawah **Langganan**, pilih **perangkat/\$1/data** untuk memeriksa apakah muatan pesan cocok dengan apa yang baru saja Anda terbitkan dan terlihat seperti ini:

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

   1. Periksa ponsel yang Anda gunakan untuk berlangganan topik SNS dan konfirmasikan isi payload pesan terlihat seperti ini:

      ```
      {"device_id":"32","reported_temperature":38,"max_temperature":30}
      ```

      Perhatikan bahwa `device_id` nilainya adalah string yang dikutip dan `temperature` nilainya numerik. Hal ini karena [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic)fungsi mengekstrak string dari nama topik pesan masukan sementara `temperature` nilai menggunakan nilai numerik dari payload pesan masukan.

      Jika Anda ingin membuat nilai `device_id` nilai numerik, ganti `topic(2)` dalam pernyataan kueri aturan dengan:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Perhatikan bahwa `topic(2)` mentransmisikan nilai ke numerik, `DECIMAL` nilai hanya akan berfungsi jika bagian topik tersebut hanya berisi karakter numerik.

1. Coba kirim pesan MQTT di mana suhunya tidak melebihi batas.

   1. **Di klien MQTT, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/33/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Untuk mengirim pesan MQTT Anda, pilih **Publikasikan** ke topik.

   Anda akan melihat pesan yang Anda kirim dalam **device/\$1/data** langganan. Namun, karena nilai suhu di bawah suhu maks dalam pernyataan kueri aturan, Anda seharusnya tidak menerima pesan teks.

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

### Memecahkan masalah aturan pesan SNS Anda
<a name="iot-sns-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 Anda 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 menerima pesan SMS**  
Agar aturan Anda berfungsi, itu harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima pesan dan mengirim pemberitahuan SNS, dan itu harus menerima pesan.

**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 apakah nilai suhu dalam muatan pesan melebihi ambang uji**  
Jika nilai suhu kurang dari atau sama dengan 30, seperti yang didefinisikan dalam pernyataan kueri aturan, aturan tidak akan melakukan tindakannya.
  + 

**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 topik pesan yang diterbitkan ulang dalam tindakan aturan**  
Topik di mana tindakan aturan Republish menerbitkan pesan baru harus sesuai dengan topik yang Anda berlangganan di klien MQTT.

    Buka aturan yang Anda buat di konsol dan periksa topik di mana tindakan aturan akan menerbitkan ulang pesan.
  + 

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

    Kebijakan yang mengizinkan aturan untuk menerima data pesan dan mempublikasikannya khusus untuk topik yang digunakan. Jika mengubah topik yang digunakan untuk memublikasikan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

    Jika Anda mencurigai ini masalahnya, edit tindakan aturan Republish 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-sns-rule-review-results"></a>

**Dalam tutorial ini:**
+ Anda membuat dan menguji topik dan langganan notifikasi Amazon SNS.
+ Anda menggunakan kueri dan fungsi SQL sederhana dalam pernyataan kueri aturan untuk membuat pesan baru untuk pemberitahuan Anda.
+ Anda membuat AWS IoT aturan untuk mengirim notifikasi Amazon SNS yang menggunakan payload pesan yang disesuaikan.
+ Anda menggunakan klien MQTT untuk menguji aturan Anda. AWS IoT 

**Langkah selanjutnya**  
Setelah Anda mengirim beberapa pesan teks dengan aturan ini, coba bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek tutorial memengaruhi pesan dan kapan dikirim. Berikut adalah beberapa ide untuk Anda mulai.
+ *device\$1id*Ubah topik pesan masukan dan amati efeknya dalam isi pesan teks.
+ Ubah bidang yang dipilih dalam pernyataan kueri aturan dan amati efeknya dalam isi pesan teks.
+ Ubah pengujian dalam pernyataan kueri aturan untuk menguji suhu minimum, bukan suhu maksimum. Ingatlah untuk mengubah nama`max_temperature`\$1
+ Tambahkan tindakan aturan penerbitan ulang untuk mengirim pesan MQTT saat pemberitahuan SNS dikirim.
+ Coba tutorial berikutnya dalam seri ini dan pelajari caranya[Tutorial: Menyimpan data perangkat dalam tabel DynamoDB](iot-ddb-rule.md).

# 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).

# Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda
<a name="iot-lambda-rule"></a>

Tutorial ini menunjukkan cara mengirim data pesan MQTT ke AWS Lambda tindakan untuk memformat dan mengirim ke layanan lain. AWS Dalam tutorial ini, AWS Lambda tindakan menggunakan AWS SDK untuk mengirim pesan yang diformat ke topik Amazon SNS yang Anda buat dalam tutorial tentang cara melakukannya. [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)

Dalam tutorial tentang bagaimana caranya[Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md), dokumen JSON yang dihasilkan dari pernyataan kueri aturan dikirim sebagai badan pesan teks. Hasilnya adalah pesan teks yang terlihat seperti contoh ini:

```
{"device_id":"32","reported_temperature":38,"max_temperature":30}
```

Dalam tutorial ini, Anda akan menggunakan tindakan AWS Lambda aturan untuk memanggil AWS Lambda fungsi yang memformat data dari pernyataan kueri aturan ke dalam format yang lebih ramah, seperti contoh ini:

```
Device 32 reports a temperature of 38, which exceeds the limit of 30.
```

 AWS Lambda Fungsi yang akan Anda buat dalam tutorial ini memformat string pesan dengan menggunakan data dari pernyataan kueri aturan dan memanggil fungsi [publikasi SNS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish) AWS SDK untuk membuat notifikasi.

**Apa yang akan Anda pelajari dalam tutorial ini**
+ Cara membuat dan menguji suatu AWS Lambda fungsi
+ Cara menggunakan AWS SDK dalam AWS Lambda fungsi untuk mempublikasikan notifikasi Amazon SNS
+ 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 45 menit untuk menyelesaikannya.

**Topics**
+ [Langkah 1: Buat AWS Lambda fungsi yang mengirim pesan teks](#iot-lambda-rule-create-lambda)
+ [Langkah 2: Buat AWS IoT aturan dengan tindakan AWS Lambda aturan](#iot-lambda-rule-create-rule)
+ [Langkah 3: Uji AWS IoT aturan dan tindakan AWS Lambda aturan](#iot-lambda-rule-test-rule)
+ [Langkah 4: Tinjau hasil dan langkah selanjutnya](#iot-lambda-rule-next-steps)

**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.
+ 

**Menyelesaikan tutorial aturan lain di bagian ini**  
Tutorial ini membutuhkan topik notifikasi SNS yang Anda buat di tutorial tentang cara [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md) melakukannya. Ini juga mengasumsikan bahwa Anda telah menyelesaikan tutorial terkait aturan lainnya di bagian ini.
+ 

**Meninjau [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)ikhtisar**  
Jika Anda belum pernah menggunakannya AWS Lambda sebelumnya, tinjau [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)dan [Mulai dengan Lambda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) untuk mempelajari istilah dan konsepnya.

## Langkah 1: Buat AWS Lambda fungsi yang mengirim pesan teks
<a name="iot-lambda-rule-create-lambda"></a>

 AWS Lambda Fungsi dalam tutorial ini menerima hasil dari pernyataan kueri aturan, menyisipkan elemen ke dalam string teks, dan mengirimkan string yang dihasilkan ke Amazon SNS sebagai pesan dalam notifikasi.

Berbeda dengan tutorial tentang bagaimana caranya[Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md), yang menggunakan tindakan AWS IoT aturan untuk mengirim notifikasi, tutorial ini mengirimkan notifikasi dari fungsi Lambda dengan menggunakan fungsi SDK. AWS Topik notifikasi Amazon SNS yang sebenarnya digunakan dalam tutorial ini, bagaimanapun, adalah topik yang sama yang Anda gunakan dalam tutorial tentang cara melakukannya. [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)

**Untuk membuat AWS Lambda fungsi yang mengirim pesan teks**

1. Buat AWS Lambda fungsi baru.

   1. Di [AWS Lambda konsol](https://console.aws.amazon.com//lambda/home), pilih **Buat fungsi**.

   1. Dalam **fungsi Buat**, pilih **Gunakan cetak biru**.

      **Cari dan pilih **hello-world-python** cetak biru, lalu pilih Konfigurasi.**

   1. Dalam **informasi Dasar**:

      1. Dalam **nama Fungsi**, masukkan nama fungsi ini,**format-high-temp-notification**. 

      1. Di **Peran eksekusi**, pilih **Buat peran baru dari templat AWS kebijakan**.

      1. Di Nama peran, masukkan nama peran baru,**format-high-temp-notification-role**.

      1. Di **Templat kebijakan - *opsional***, cari dan pilih kebijakan **publikasi Amazon SNS**.

      1. Pilih **Buat fungsi**.

1. Ubah kode cetak biru untuk memformat dan mengirim pemberitahuan Amazon SNS.

   1. Setelah Anda membuat fungsi Anda, Anda akan melihat halaman **format-high-temp-notification**detail. Jika tidak, buka dari halaman [**Fungsi** Lambda](https://console.aws.amazon.com//lambda/home#/functions).

   1. Di halaman **format-high-temp-notification**detail, pilih tab **Konfigurasi** dan gulir ke panel **Kode fungsi**.

   1. Di jendela **Function code**, di panel **Environment**, pilih file Python,. `lambda_function.py`

   1. Di jendela **Function code**, hapus semua kode program asli dari cetak biru dan ganti dengan kode ini.

      ```
      import boto3
      #
      #   expects event parameter to contain:
      #   {
      #       "device_id": "32",
      #       "reported_temperature": 38,
      #       "max_temperature": 30,
      #       "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
      #   }
      # 
      #   sends a plain text string to be used in a text message
      #
      #      "Device {0} reports a temperature of {1}, which exceeds the limit of {2}."
      #   
      #   where:
      #       {0} is the device_id value
      #       {1} is the reported_temperature value
      #       {2} is the max_temperature value
      #
      def lambda_handler(event, context):
      
          # Create an SNS client to send notification
          sns = boto3.client('sns')
      
          # Format text message from data
          message_text = "Device {0} reports a temperature of {1}, which exceeds the limit of {2}.".format(
                  str(event['device_id']),
                  str(event['reported_temperature']),
                  str(event['max_temperature'])
              )
      
          # Publish the formatted message
          response = sns.publish(
                  TopicArn = event['notify_topic_arn'],
                  Message = message_text
              )
      
          return response
      ```

   1. Pilih **Deploy**.

1. Di jendela baru, cari Nama Sumber Daya Amazon (ARN) dari topik Amazon SNS Anda dari tutorial tentang cara melakukannya. [Tutorial: Mengirim notifikasi Amazon SNS](iot-sns-rule.md)

   1. Di jendela baru, buka [halaman Topik konsol Amazon SNS](https://console.aws.amazon.com//sns/v3/home#/topics). 

   1. Di halaman **Topik**, temukan topik notifikasi **high\$1temp\$1notice** dalam daftar topik Amazon SNS.

   1. Temukan **ARN** dari topik notifikasi **high\$1temp\$1notice** untuk digunakan pada langkah berikutnya.

1. Buat kasus uji untuk fungsi Lambda Anda.

   1. Di halaman [**Fungsi** Lambda](https://console.aws.amazon.com//lambda/home#/functions) konsol, pada halaman **format-high-temp-notification**detail, **pilih Pilih acara pengujian** di sudut kanan atas halaman (meskipun terlihat dinonaktifkan), lalu pilih **Konfigurasi peristiwa pengujian**.

   1. Di **Configure test event**, pilih **Create new test event**.

   1. Dalam **nama acara**, masukkan**SampleRuleOutput**.

   1. Di editor JSON di bawah **nama Acara**, tempel contoh dokumen JSON ini. Ini adalah contoh dari apa yang akan dikirim AWS IoT aturan Anda ke fungsi Lambda.

      ```
      {
        "device_id": "32",
        "reported_temperature": 38,
        "max_temperature": 30,
        "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
      }
      ```

   1. Lihat jendela yang memiliki **ARN** dari topik notifikasi **high\$1temp\$1notice** dan salin nilai ARN.

   1. Ganti `notify_topic_arn` nilai di editor JSON dengan ARN dari topik notifikasi Anda.

      Biarkan jendela ini tetap terbuka sehingga Anda dapat menggunakan nilai ARN ini lagi saat Anda membuat aturan. AWS IoT 

   1. Pilih **Buat**.

1. Uji fungsi dengan data sampel.

   1. **Di halaman **format-high-temp-notification**detail, di sudut kanan atas halaman, konfirmasikan yang **SampleRuleOutput**muncul di sebelah tombol Uji.** Jika tidak, pilih dari daftar acara pengujian yang tersedia.

   1. Untuk mengirim pesan keluaran aturan sampel ke fungsi Anda, pilih **Uji**.

Jika fungsi dan notifikasi keduanya berfungsi, Anda akan mendapatkan pesan teks di ponsel yang berlangganan notifikasi.

Jika Anda tidak mendapatkan pesan teks di telepon, periksa hasil operasi. Di panel **Kode fungsi**, di tab **Hasil eksekusi**, tinjau respons untuk menemukan kesalahan yang terjadi. Jangan melanjutkan ke langkah berikutnya sampai fungsi Anda dapat mengirim notifikasi ke ponsel Anda.

## Langkah 2: Buat AWS IoT aturan dengan tindakan AWS Lambda aturan
<a name="iot-lambda-rule-create-rule"></a>

Pada langkah ini, Anda akan menggunakan pernyataan kueri aturan untuk memformat data dari perangkat sensor cuaca imajiner untuk dikirim ke fungsi Lambda, yang akan memformat dan mengirim pesan teks.

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

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

Dalam aturan ini, Anda akan menggunakan pernyataan kueri aturan untuk membuat payload pesan untuk fungsi Lambda yang terlihat seperti ini:

```
{
  "device_id": "32",
  "reported_temperature": 38,
  "max_temperature": 30,
  "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
}
```

Ini berisi semua informasi yang diperlukan fungsi Lambda untuk memformat dan mengirim pesan teks yang benar.

**Untuk membuat AWS IoT aturan untuk memanggil fungsi Lambda**

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

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

1. Di bagian atas **Buat aturan**:

   1. Dalam **Nama**, masukkan nama aturan,**wx\$1friendly\$1text**.

      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**, 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. Dalam **pernyataan kueri Aturan** **Buat aturan**:

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

   1. Dalam kotak edit **pernyataan kueri aturan**, masukkan pernyataan: 

      ```
      SELECT 
        cast(topic(2) AS DECIMAL) as device_id, 
        temperature as reported_temperature,
        30 as max_temperature,
        'arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice' as notify_topic_arn
      FROM 'device/+/data' WHERE temperature > 30
      ```

      Pernyataan ini:
      + Mendengarkan pesan MQTT dengan topik yang cocok dengan filter `device/+/data` topik dan yang memiliki `temperature` nilai lebih besar dari 30. 
      + Memilih elemen kedua dari string topik, mengubahnya menjadi angka desimal, dan kemudian menetapkannya ke bidang. `device_id`
      + Memilih nilai `temperature` bidang dari payload pesan dan menetapkannya ke bidang. `reported_temperature` 
      + Menciptakan nilai konstan`30`,, untuk mewakili nilai batas dan menetapkannya ke `max_temperature` bidang. 
      + Menciptakan nilai konstan untuk `notify_topic_arn` bidang.

   1. Lihat jendela yang memiliki **ARN** dari topik notifikasi **high\$1temp\$1notice** dan salin nilai ARN.

   1. Ganti nilai ARN (*arn:aws:sns:us-east-1:57EXAMPLE833:high\$1temp\$1notice*) di editor pernyataan kueri aturan dengan ARN topik notifikasi Anda.

1. Di **Tetapkan satu atau lebih tindakan**:

   1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih **Tambah tindakan**.

   1. Di **Pilih tindakan**, pilih **Kirim pesan ke fungsi Lambda**.

   1. Untuk membuka halaman konfigurasi tindakan yang dipilih, di bagian bawah daftar tindakan, pilih **Konfigurasi tindakan**.

1. Dalam **tindakan Konfigurasi**:

   1. Di **Nama fungsi**, pilih **Pilih**.

   1. Pilih **format-high-temp-notification**.

   1. Di bagian bawah **Configure action**, pilih **Add action**.

   1. Untuk membuat aturan, di bagian bawah **Buat aturan**, pilih **Buat aturan**.

## Langkah 3: Uji AWS IoT aturan dan tindakan AWS Lambda aturan
<a name="iot-lambda-rule-test-rule"></a>

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

Buka [klien MQTT di AWS IoT konsol di jendela](https://console.aws.amazon.com//iot/home#/test) baru. Sekarang Anda dapat mengedit aturan tanpa kehilangan konfigurasi klien MQTT Anda. Jika Anda meninggalkan klien MQTT untuk pergi ke halaman lain di konsol, Anda akan kehilangan langganan atau log pesan 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, dalam hal ini,. `device/+/data`

   1. Di klien MQTT, di bawah **Langganan, pilih **Berlangganan**** topik.

   1. Dalam **topik Langganan**, masukkan topik filter topik masukan,**device/\$1/data**.

   1. Simpan sisa bidang di pengaturan defaultnya.

   1. Pilih **Berlangganan topik**.

      Di kolom **Langganan**, di bawah **Publikasikan ke topik**, **device/\$1/data** muncul. 

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

   1. **Di klien MQTT, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/32/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Untuk mempublikasikan pesan MQTT Anda, pilih **Publikasikan** ke topik.

1. Konfirmasikan bahwa pesan teks telah dikirim.

   1. Di klien MQTT, di bawah **Langganan**, ada titik hijau di sebelah topik yang Anda berlangganan sebelumnya.

      Titik hijau menunjukkan bahwa satu atau lebih pesan baru telah diterima sejak terakhir kali Anda melihatnya.

   1. Di bawah **Langganan**, pilih **perangkat/\$1/data** untuk memeriksa apakah muatan pesan cocok dengan apa yang baru saja Anda terbitkan dan terlihat seperti ini:

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

   1. Periksa ponsel yang Anda gunakan untuk berlangganan topik SNS dan konfirmasikan isi payload pesan terlihat seperti ini:

      ```
      Device 32 reports a temperature of 38, which exceeds the limit of 30.
      ```

      Jika Anda mengubah elemen ID topik dalam topik pesan, ingatlah bahwa `topic(2)` mentransmisikan nilai ke nilai numerik hanya akan berfungsi jika elemen dalam topik pesan hanya berisi karakter numerik.

1. Coba kirim pesan MQTT di mana suhunya tidak melebihi batas.

   1. **Di klien MQTT, di bawah **Langganan**, pilih Publikasikan ke topik.**

   1. Di bidang **Publikasikan**, masukkan nama topik masukan,**device/33/data**.

   1. Salin data sampel yang ditampilkan di sini dan, di kotak edit di bawah nama topik, tempel data sampel.

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

   1. Untuk mengirim pesan MQTT Anda, pilih **Publikasikan** ke topik.

   Anda akan melihat pesan yang Anda kirim dalam **device/\$1/data** langganan; Namun, karena nilai suhu di bawah suhu maks dalam pernyataan kueri aturan, Anda seharusnya tidak menerima pesan teks.

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

### Memecahkan masalah AWS Lambda aturan dan pemberitahuan
<a name="iot-lambda-rule-troubleshoot"></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 Anda ke `device/32/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 menerima pesan SMS**  
Agar aturan Anda berfungsi, itu harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima pesan dan mengirim pemberitahuan SNS, dan itu harus menerima pesan.

**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 apakah nilai suhu dalam muatan pesan melebihi ambang uji**  
Jika nilai suhu kurang dari atau sama dengan 30, seperti yang didefinisikan dalam pernyataan kueri aturan, aturan tidak akan melakukan tindakannya.
  + 

**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 notifikasi Amazon SNS**  
Di[Langkah 1: Buat topik Amazon SNS yang mengirim pesan teks SMS](iot-sns-rule.md#iot-sns-rule-create-sns-topic), lihat langkah 3 yang menjelaskan cara menguji notifikasi Amazon SNS dan menguji notifikasi untuk memastikan notifikasi berfungsi.
  + 

**Periksa fungsi Lambda**  
Di[Langkah 1: Buat AWS Lambda fungsi yang mengirim pesan teks](#iot-lambda-rule-create-lambda), lihat langkah 5 yang menjelaskan cara menguji fungsi Lambda menggunakan data uji dan menguji fungsi Lambda.
  + 

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

    Kebijakan yang mengizinkan aturan untuk menerima data pesan dan mempublikasikannya khusus untuk topik yang digunakan. Jika mengubah topik yang digunakan untuk memublikasikan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

    Jika Anda mencurigai ini masalahnya, edit tindakan aturan Republish 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-lambda-rule-next-steps"></a>

**Dalam tutorial ini:**
+ Anda membuat AWS IoT aturan untuk memanggil fungsi Lambda yang mengirim notifikasi Amazon SNS yang menggunakan payload pesan yang disesuaikan.
+ Anda menggunakan kueri dan fungsi SQL sederhana dalam pernyataan kueri aturan untuk membuat payload pesan baru untuk fungsi Lambda Anda.
+ Anda menggunakan klien MQTT untuk menguji aturan Anda. AWS IoT 

**Langkah selanjutnya**  
Setelah Anda mengirim beberapa pesan teks dengan aturan ini, coba bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek tutorial memengaruhi pesan dan kapan dikirim. Berikut adalah beberapa ide untuk Anda mulai.
+ *device\$1id*Ubah topik pesan masukan dan amati efeknya dalam isi pesan teks.
+ Ubah bidang yang dipilih dalam pernyataan kueri aturan, perbarui fungsi Lambda untuk menggunakannya dalam pesan baru, dan amati efeknya dalam isi pesan teks.
+ Ubah pengujian dalam pernyataan kueri aturan untuk menguji suhu minimum, bukan suhu maksimum. Perbarui fungsi Lambda untuk memformat pesan baru dan ingat untuk mengubah nama. `max_temperature`
+ Untuk mempelajari lebih lanjut tentang cara menemukan kesalahan yang mungkin terjadi saat Anda mengembangkan dan menggunakan AWS IoT aturan, lihat[Pemantauan AWS IoT](monitoring_overview.md).