Tutorial: Memformat notifikasi dengan menggunakan fungsi AWS Lambda - 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 fungsi AWS Lambda

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

Dalam tutorial tentang bagaimana caranyaTutorial: Mengirim notifikasi Amazon SNS, 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 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 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 Anda memulai tutorial ini, pastikan Anda memiliki:
  • Siapkan Anda Akun AWS

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

  • Diulas Lihat pesan MQTT dengan klien MQTT AWS IoT

    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 melakukannya. Ini juga mengasumsikan bahwa Anda telah menyelesaikan tutorial terkait aturan lainnya di bagian ini.

  • Meninjau AWS Lambdaikhtisar

    Jika Anda belum pernah menggunakannya AWS Lambda sebelumnya, tinjau AWS Lambdadan Mulai 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 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 caranyaTutorial: Mengirim notifikasi Amazon SNS, 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 dengan yang Anda gunakan dalam tutorial tentang cara melakukannya. Tutorial: Mengirim notifikasi Amazon SNS

Untuk membuat 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. Dalam nama Fungsi, masukkan nama fungsi ini,format-high-temp-notification.

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

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

      4. Di Templat 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 format-high-temp-notificationdetail. Jika tidak, buka dari halaman Fungsi Lambda.

    2. Di halaman format-high-temp-notificationdetail, pilih tab Konfigurasi dan gulir ke panel Kode fungsi.

    3. Di jendela Function code, di panel Environment, pilih file Python,. lambda_function.py

    4. 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
    5. Pilih Deploy.

  3. Di jendela baru, cari Nama Sumber Daya Amazon (ARN) dari topik Amazon SNS Anda dari tutorial tentang cara melakukannya. Tutorial: Mengirim notifikasi 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 Fungsi Lambda konsol, pada halaman format-high-temp-notificationdetail, pilih Pilih acara pengujian di sudut kanan atas halaman (meskipun terlihat dinonaktifkan), lalu pilih Konfigurasi peristiwa pengujian.

    2. Di Configure test event, pilih Create new test event.

    3. Dalam nama acara, masukkanSampleRuleOutput.

    4. 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" }
    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 saat Anda membuat aturan. AWS IoT

    7. Pilih Buat.

  5. Uji fungsi dengan data sampel.

    1. Di halaman format-high-temp-notificationdetail, di sudut kanan atas halaman, konfirmasikan yang SampleRuleOutputmuncul di sebelah tombol Uji. Jika tidak, pilih dari daftar acara pengujian yang tersedia.

    2. 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

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 AturanAWS IoT konsol.

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

  3. Di bagian atas Buat aturan:

    1. Dalam Nama, masukkan nama aturan,wx_friendly_text.

      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.

    2. 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.

  4. Dalam pernyataan kueri Aturan Buat aturan:

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

    2. 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 konstan30,, 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:57 Example833:HIGH_TEMP_NOTICE) di editor pernyataan kueri aturan dengan ARN topik notifikasi Anda.

  5. Di Tetapkan satu atau lebih tindakan:

    1. Untuk membuka daftar tindakan aturan untuk aturan ini, pilih Tambah 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 Konfigurasi tindakan.

  6. Dalam tindakan Konfigurasi:

    1. Di Nama fungsi, pilih Pilih.

    2. Pilih format-high-temp-notification.

    3. Di bagian bawah Configure action, pilih Add action.

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

Langkah 3: Uji AWS IoT aturan dan tindakan AWS Lambda 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 Langganan, pilih Berlangganan topik.

    2. Dalam topik Langganan, masukkan topik filter topik masukan,device/+/data.

    3. Simpan sisa bidang di 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 Langganan, pilih Publikasikan 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 Publikasikan ke topik.

  3. 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.

    2. Di bawah Langganan, pilih perangkat/+/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 } }
    3. 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.

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

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

    Anda akan melihat pesan yang Anda kirim dalam device/+/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

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/+/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

      DiLangkah 1: Buat topik Amazon SNS yang mengirim 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 mempublikasikan topik baru.

      Kebijakan yang mengizinkan aturan untuk menerima data pesan dan mempublikasikannya khusus untuk topik yang digunakan. Jika mengubah topik yang digunakan untuk mempublikasikan 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

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.

  • Ubah device_id dalam 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, lihatPemantauan AWS IoT.