View a markdown version of this page

Tutorial: Memformat notifikasi dengan menggunakan AWS Lambda Fungsi - AWS IoT Core

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

Tutorial: Memformat notifikasi dengan menggunakan AWS Lambda Fungsi

Tutorial ini menunjukkan cara mengirim data pesan MQTT ke AWS Lambda tindakan untuk memformat dan mengirim ke AWS layanan lain. Dalam tutorial ini, AWS Lambda tindakan menggunakan AWS SDK untuk mengirim pesan yang diformat ke topik Amazon SNS yang Anda buat dalam tutorial tentang caranya. Tutorial: Mengirim pemberitahuan Amazon SNS

Dalam tutorial tentang car Tutorial: Mengirim pemberitahuan Amazon SNS anya, dokumen JSON yang dihasilkan dari pernyataan kueri aturan dikirim sebagai isi 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 publik asi SNS dari AWS SDK untuk membuat notifikasi.

Apa yang akan Anda pelajari dalam tutorial ini
  • Cara membuat dan menguji AWS Lambda fungsi

  • Cara menggunakan AWS SDK dalam AWS Lambda fungsi untuk menerbitkan pemberitahuan Amazon SNS

  • Cara menggunakan kueri dan fungsi SQL sederhana dalam pernyataan kueri aturan

  • Cara menggunakan klien MQTT untuk menguji aturan AWS IoT

Tutorial ini membutuhkan waktu sekitar 45 menit untuk menyelesaikannya.

Sebelum memulai tutorial ini, pastikan Anda memiliki:
  • Penyiapan Akun AWS

    Anda akan membutuhkan AWS IoT konsol Anda Akun AWS untuk menyelesaikan tutorial ini.

  • Diulas Lihat pesan MQTT dengan AWS IoT Klien MQTT

    Pastikan Anda dapat menggunakan klien MQTT untuk berlangganan dan mempublikasikan topik. Anda akan menggunakan klien MQTT untuk menguji aturan baru Anda dalam prosedur ini.

  • Menyelesaikan tutorial aturan lainnya di bagian ini

    Tutorial ini membutuhkan topik notifikasi SNS yang Anda buat dalam tutorial tentang caranya. Tutorial: Mengirim pemberitahuan Amazon SNS Ini juga mengasumsikan bahwa Anda telah menyelesaikan tutorial terkait aturan lainnya di bagian ini.

  • Meninjau AWS Lambda selayang pandang

    Jika Anda belum pernah menggunakan AWS Lambda sebelumnya, tinjau AWS Lambda dan Memulai dengan Lambda untuk mempelajari istilah dan konsepnya.

Langkah 1: Buat AWS Lambda fungsi yang mengirim pesan teks

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

Berbeda dengan tutorial tentang caraTutorial: Mengirim pemberitahuan Amazon SNS, yang menggunakan tindakan AWS IoT aturan untuk mengirim notifikasi, tutorial ini mengirimkan notifikasi dari fungsi Lambda dengan menggunakan fungsi AWS SDK. Topik notifikasi Amazon SNS yang sebenarnya digunakan dalam tutorial ini, bagaimanapun, sama dengan yang Anda gunakan dalam tutorial tentang caranya. Tutorial: Mengirim pemberitahuan Amazon SNS

Untuk membuat sebuah AWS Lambda fungsi yang mengirim pesan teks
  1. Buat AWS Lambda fungsi baru.

    1. Di AWS Lambda konsol, pilih Buat fungsi.

    2. Dalam fungsi Buat, pilih Gunakan cetak biru.

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

    3. Dalam Informasi Dasar:

      1. Di Nama fungsi, masukkan nama fungsi ini,format-high-temp-notification.

      2. Di Peran eksekusi, pilih Buat peran baru dari templ AWS at kebijakan.

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

      4. Di Tem plat Kebijakan - opsional , cari dan pilih kebijakan publikasi Amazon SNS.

      5. Pilih Buat fungsi.

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

    1. Setelah Anda membuat fungsi Anda, Anda akan melihat halaman detail notifikasi bertemp-tinggi. Jika tidak, buka dari halaman Lambda Functions.

    2. Di halaman detail notifikasi bertemp-tinggi, pilih tab Konfigurasi dan gulir ke panel kode fungsi.

    3. Di jendela Kode fungsi, di panel Lingkungan, pilih file Python,lambda_function.py.

    4. Di jendela kode fungsi, 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
    5. Pilih Deploy.

  3. Di jendela baru, cari Nama Sumber Daya Amazon (ARN) dari topik Amazon SNS Anda dari tutorial tentang caranya. Tutorial: Mengirim pemberitahuan Amazon SNS

    1. Di jendela baru, buka halaman Topik konsol Amazon SNS.

    2. Di halaman Topik, temukan topik notifikasi high_temp_notice dalam daftar topik Amazon SNS.

    3. Temukan ARN dari topik notifikasi high_temp_notice untuk digunakan pada langkah berikutnya.

  4. Buat kasus uji untuk fungsi Lambda Anda.

    1. Di halaman Lambda Functions di konsol, pada halaman detail notifikasi bertemp-tinggi, pilih Pilih acara pengujian di sudut kanan atas halaman (meskipun terlihat dinonaktifkan), lalu pilih Konfigurasikan acara pengujian.

    2. Di Konfigurasikan acara pengujian, pilih Buat acara pengujian baru.

    3. Di Nama acara, masukkanSampleRuleOutput.

    4. Di editor JSON di bawah Nama acara, tempel dokumen JSON sampel ini. Ini adalah contoh dari apa yang akan diki AWS IoT rimkan 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" }
    5. Lihat jendela yang memiliki ARN dari topik notifikasi high_temp_notice dan salin nilai ARN.

    6. 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 ketika Anda membuat AWS IoT aturan.

    7. Pilih Buat.

  5. Uji fungsi dengan data sampel.

    1. Di halaman detail notifikasi bertemp-tinggi, di sudut kanan atas halaman, konfirmasikan bahwa SampleRuleOutput itu muncul di sebelah tombol Uji. Jika tidak, pilih dari daftar acara pengujian yang tersedia.

    2. Untuk mengirim pesan keluaran aturan sampel ke fungsi Anda, pilih U ji.

Jika fungsi dan notifikasi keduanya berfungsi, Anda akan mendapatkan pesan teks di telepon 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 lanjutkan ke langkah berikutnya sampai fungsi Anda dapat mengirim notifikasi ke ponsel Anda.

Langkah 2: Buat AWS IoT aturan dengan AWS Lambda tindakan aturan

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 muatan 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 dibutuhkan fungsi Lambda untuk memformat dan mengirim pesan teks yang benar.

Untuk membuat AWS IoT aturan untuk memanggil fungsi Lambda
  1. Buka hub A turan AWS IoT konsol.

  2. Untuk mulai membuat aturan baru di A turan, pilih Buat.

  3. Di bagian atas Buat aturan:

    1. Di Nama, masukkan nama aturan,wx_friendly_text.

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

    2. Dalam Deskripsi, jelaskan aturannya.

      Deskripsi yang berarti memudahkan untuk mengingat apa yang dilakukan aturan ini dan mengapa Anda membuatnya. Deskripsinya bisa selama dibutuhkan, jadi sedetail mungkin.

  4. Dalam pernyataan kueri aturan Buat aturan:

    1. Di Menggunakan versi SQL, pilih2016-03-23.

    2. Di 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 device_id bidang.

      • Memilih nilai temperature bidang dari payload pesan dan menetapkannya ke bidang. reported_temperature

      • Membuat nilai konstan,30, untuk mewakili nilai batas dan menetapkannya ke max_temperature bidang.

      • Menciptakan nilai konstan untuk notify_topic_arn bidang.

    3. Lihat jendela yang memiliki ARN dari topik notifikasi high_temp_notice dan salin nilai ARN.

    4. Ganti nilai ARN (arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice) di editor pernyataan kueri aturan dengan ARN topik notifikasi Anda.

  5. Dalam Mengatur satu atau lebih tindakan:

    1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih Tam bah tindakan.

    2. Di Pilih tindakan, pilih Kirim pesan ke fungsi Lambda.

    3. Untuk membuka halaman konfigurasi tindakan yang dipilih, di bagian bawah daftar tindakan, pilih Konfigurasikan tindakan.

  6. Dalam tindakan Konfigurasi:

    1. Di Nama fungsi, pilih Pilih.

    2. Pilih format- tinggi-temp-notifikasi.

    3. Di bagian bawah Konfigurasi tindakan, pilih Tam bah tindakan.

    4. Untuk membuat aturan, di bagian bawah Buat aturan, pilih Buat aturan.

Langkah 3: Uji AWS IoT aturan dan AWS Lambda tindakan aturan

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 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, berlangganan topik input, dalam hal ini,device/+/data.

    1. Di klien MQTT, di bawah Lang ganan, pilih Berlangganan ke topik.

    2. Di Topik berlangganan, masukkan topik filter topik masukan,device/+/data.

    3. Simpan sisa bidang pada pengaturan defaultnya.

    4. Pilih Berlangganan topik.

      Di kolom Langganan, di bawah Publikasikan ke topik, device/+/data muncul.

  2. 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 Lang ganan, pilih Publi kasikan ke topik.

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

    3. 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 } }
    4. Untuk mempublikasikan pesan MQTT Anda, pilih Publi kasikan ke topik.

  3. Konfirmasikan bahwa pesan teks telah dikirim.

    1. Di klien MQTT, di bawah Lang ganan, 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.

    2. Di bawah Langganan, pilih perangkat/+/data untuk memeriksa apakah payload pesan cocok dengan apa yang baru saja Anda publikasikan dan terlihat seperti ini:

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Periksa telepon 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 memberikan topic(2) nilai ke nilai numerik hanya akan berfungsi jika elemen dalam topik pesan hanya berisi karakter numerik.

  4. Coba kirim pesan MQTT di mana suhu tidak melebihi batas.

    1. Di klien MQTT, di bawah Lang ganan, pilih Publi kasikan ke topik.

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

    3. 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 } }
    4. Untuk mengirim pesan MQTT Anda, pilih Publi kasikan ke topik.

    Anda akan melihat pesan yang Anda kirim dalam device/+/data langganan; namun, karena nilai suhu di bawah suhu maksimum dalam pernyataan kueri aturan, Anda tidak boleh menerima pesan teks.

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

Memecahkan masalah AWS Lambda aturan dan pemberitahuan

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

  • Anda mendapat spanduk kesalahan

    Jika kesalahan muncul saat Anda menerbitkan pesan input, perbaiki kesalahan itu terlebih dahulu. Langkah-langkah berikut dapat membantu Anda memperbaiki kesalahan itu.

  • Anda tidak melihat pesan input di klien MQTT

    Setiap kali Anda mempublikasikan pesan input 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 berlangganan

      Jika Anda berlangganan topik pesan masukan 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 berlangganan dan bandingkan dengan topik yang Anda publikasikan. Nama topik peka huruf besar/kecil dan topik yang Anda berlangganan harus identik dengan topik tempat Anda menerbitkan payload pesan.

    • Periksa fungsi penerbitan pesan

      Di klien MQTT, di bawah Lang ganan, pilih per angkat/+/data, periksa topik pesan publikasi, lalu pilih Publikasikan ke topik. Anda akan melihat payload pesan dari kotak edit di bawah topik muncul di daftar pesan.

  • Anda tidak menerima pesan SMS

    Agar aturan Anda berfungsi, aturan harus memiliki kebijakan yang benar yang mengizinkannya untuk menerima pesan dan mengirim pemberitahuan SNS, dan harus menerima pesan tersebut.

    Hal-hal yang harus diperiksa
    • Periksa Wilayah AWS dari klien MQTT Anda dan aturan yang Anda buat

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

    • Periksa apakah nilai suhu dalam payload 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 ejaan topik di klien MQTT. Nama topik peka huruf besar/kecil dan topik pesan harus cocok dengan filter topik dalam pernyataan kueri aturan.

    • Periksa isi muatan pesan input

      Agar aturan berfungsi, ia harus menemukan bidang data dalam 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 dalam payload pesan.

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

    • Periksa notifikasi Amazon SNS

      DiLangkah 1: Buat topik Amazon SNS yang mengirimkan pesan teks SMS, lihat langkah 3 yang menjelaskan cara menguji notifikasi Amazon SNS dan menguji notifikasi untuk memastikan notifikasi berfungsi.

    • Periksa fungsi Lambda

      DiLangkah 1: Buat AWS Lambda fungsi yang mengirim pesan teks, 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 menerbitkan topik baru.

      Kebijakan yang mengotorisasi aturan untuk menerima data pesan dan menerbitkannya kembali khusus untuk topik yang digunakan. Jika Anda mengubah topik yang digunakan untuk menerbitkan ulang data pesan, Anda harus memperbarui peran tindakan aturan untuk memperbarui kebijakannya agar sesuai dengan topik saat ini.

      Jika Anda menduga ini masalahnya, edit tindakan Publikasikan ulang 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

Dalam tutorial ini:
  • Anda membuat AWS IoT aturan untuk memanggil fungsi Lambda yang mengirim pemberitahuan Amazon SNS yang menggunakan payload pesan yang disesuaikan.

  • Anda menggunakan kueri SQL sederhana dan fungsi dalam pernyataan kueri aturan untuk membuat payload pesan baru untuk fungsi Lambda Anda.

  • Anda menggunakan klien MQTT untuk menguji AWS IoT aturan Anda.

Langkah selanjutnya

Setelah Anda mengirim beberapa pesan teks dengan aturan ini, cobalah bereksperimen dengannya untuk melihat bagaimana mengubah beberapa aspek tutorial memengaruhi pesan dan kapan pesan dikirim. Berikut adalah beberapa ide untuk membantu Anda memulai.

  • Ubah device_id 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 konten 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 namamax_temperature.

  • Untuk mempelajari selengkapnya tentang cara menemukan kesalahan yang mungkin terjadi saat Anda mengembangkan dan menggunakan AWS IoT aturan, lihatMemantau AWS IoT.