Menggunakan AWS Lambda dengan MQTT - Amazon Location Service

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

Menggunakan AWS Lambda dengan MQTT

Meskipun penggunaan AWS Lambda tidak lagi diperlukan saat mengirim data lokasi perangkat ke Lokasi Amazon untuk dilacak, Anda mungkin masih ingin menggunakan Lambda dalam beberapa kasus. Misalnya, jika Anda ingin memproses sendiri data lokasi perangkat Anda, sebelum mengirimkannya ke Lokasi Amazon. Topik berikut menjelaskan cara menggunakan Lambda untuk memproses pesan sebelum mengirimnya ke pelacak Anda. Untuk informasi lebih lanjut tentang pola ini, lihat arsitektur referensi.

Prasyarat

Sebelum Anda dapat mulai melacak, Anda harus membuat sumber daya pelacak. Untuk membuat sumber daya pelacak, Anda dapat menggunakan konsol Lokasi Amazon, Lokasi Amazon AWS CLI, atau Lokasi APIs Amazon.

Contoh berikut menggunakan konsol Amazon Location Service untuk membuat resource tracker:

  1. Buka konsol Amazon Location Service di https://console.aws.amazon.com/location/.

  2. Di panel navigasi kiri, pilih Pelacak.

  3. Pilih Buat pelacak.

  4. Isi kotak-kotak berikut:

    • Nama — Masukkan nama unik yang memiliki maksimal 100 karakter. Entri yang valid termasuk karakter alfanumerik, tanda hubung, dan garis bawah. Misalnya, MyTracker.

    • Deskripsi - Masukkan deskripsi opsional. Misalnya, Tracker for storing AWS IoT Core device positions.

    • Pemfilteran posisi - Pilih pemfilteran yang ingin Anda gunakan untuk pembaruan posisi. Misalnya, pemfilteran berbasis akurasi.

  5. Pilih Buat pelacak.

Buat fungsi Lambda

Untuk membuat koneksi antara AWS IoT Core dan Amazon Location Service, Anda memerlukan AWS Lambda fungsi untuk memproses pesan yang diteruskan oleh. AWS IoT Core Fungsi ini akan mengekstrak data posisi apa pun, memformatnya untuk Amazon Location Service, dan mengirimkannya melalui Amazon Location API Tracker. Anda dapat membuat fungsi ini melalui AWS Lambda konsol, atau Anda dapat menggunakan AWS Command Line Interface (AWS CLI) atau AWS Lambda APIs.

Untuk membuat fungsi Lambda yang menerbitkan pembaruan posisi ke Lokasi Amazon menggunakan konsol:

  1. Buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Dari navigasi kiri, pilih Fungsi.

  3. Pilih Create Function, dan pastikan bahwa Author dari awal dipilih.

  4. Isi kotak-kotak berikut:

    • Nama fungsi - Masukkan nama unik untuk fungsi Anda. Entri yang valid termasuk karakter alfanumerik, tanda hubung, dan garis bawah tanpa spasi. Misalnya, MyLambda.

    • Runtime - Pilih Python 3.8.

  5. Pilih Buat fungsi.

  6. Pilih tab Kode untuk membuka editor.

  7. Timpa kode placeholder lambda_function.py dengan yang berikut ini, ganti nilai yang ditetapkan TRACKER_NAME dengan nama pelacak yang Anda buat sebagai prasyarat.

    from datetime import datetime import json import os import boto3 # Update this to match the name of your Tracker resource TRACKER_NAME = "MyTracker" """ This Lambda function receives a payload from AWS IoT Core and publishes device updates to Amazon Location Service via the BatchUpdateDevicePosition API. Parameter 'event' is the payload delivered from AWS IoT Core. In this sample, we assume that the payload has a single top-level key 'payload' and a nested key 'location' with keys 'lat' and 'long'. We also assume that the name of the device is nested in the payload as 'deviceid'. Finally, the timestamp of the payload is present as 'timestamp'. For example: >>> event { 'payload': { 'deviceid': 'thing123', 'timestamp': 1604940328, 'location': { 'lat': 49.2819, 'long': -123.1187 }, 'accuracy': {'Horizontal': 20.5 }, 'positionProperties': {'field1':'value1','field2':'value2'} } } If your data doesn't match this schema, you can either use the AWS IoT Core rules engine to format the data before delivering it to this Lambda function, or you can modify the code below to match it. """ def lambda_handler(event, context): update = { "DeviceId": event["payload"]["deviceid"], "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"), "Position": [ event["payload"]["location"]["long"], event["payload"]["location"]["lat"] ] } if "accuracy" in event["payload"]: update["Accuracy"] = event["payload"]['accuracy'] if "positionProperties" in event["payload"]: update["PositionProperties"] = event["payload"]['positionProperties'] client = boto3.client("location") response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update]) return { "statusCode": 200, "body": json.dumps(response) }
  8. Pilih Deploy untuk menyimpan fungsi yang diperbarui.

  9. Pilih tab Konfigurasi.

  10. Di bagian Izin, pilih nama Peran hyperlink untuk memberikan izin Amazon Location Service ke fungsi Lambda Anda.

  11. Dari halaman Ringkasan peran Anda, pilih Tambahkan izin, lalu dari daftar tarik-turun, pilih Buat kebijakan sebaris.

  12. Pilih JSONtab, dan timpa kebijakan dengan dokumen berikut. Ini memungkinkan fungsi Lambda Anda memperbarui posisi perangkat yang dikelola oleh semua sumber daya pelacak di semua Wilayah.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "WriteDevicePosition", "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:*:*:tracker/*" } ] }
  13. Pilih Tinjau kebijakan.

  14. Masukkan nama kebijakan. Misalnya, AmazonLocationTrackerWriteOnly.

  15. Pilih Buat kebijakan.

Anda dapat memodifikasi kode fungsi ini, jika perlu, untuk beradaptasi dengan skema pesan perangkat Anda sendiri.

Buat AWS IoT Core aturan

Selanjutnya, buat AWS IoT Core aturan untuk meneruskan telemetri posisi perangkat Anda ke AWS Lambda fungsi untuk transformasi dan publikasi ke Amazon Location Service. Aturan contoh yang diberikan mengasumsikan bahwa setiap transformasi muatan perangkat yang diperlukan ditangani oleh fungsi Lambda Anda. Anda dapat membuat aturan ini melalui AWS IoT Core konsol, AWS Command Line Interface (AWS CLI), atau AWS IoT Core APIs.

catatan

Meskipun AWS IoT konsol menangani izin yang diperlukan AWS IoT Core untuk mengizinkan menjalankan fungsi Lambda Anda, jika Anda membuat aturan dari AWS CLI SDK atau, Anda harus mengonfigurasi kebijakan untuk memberikan izin. AWS IoT

Untuk membuat AWS IoT Core menggunakan konsol

  1. Masuk ke AWS IoT Core konsol di https://console.aws.amazon.com/iot/.

  2. Di navigasi kiri, perluas Act, dan pilih Rules.

  3. Pilih Buat aturan untuk memulai panduan aturan baru.

  4. Masukkan nama dan deskripsi untuk aturan Anda.

  5. Untuk pernyataan kueri Aturan, perbarui FROM atribut untuk merujuk ke topik di mana setidaknya satu perangkat menerbitkan telemetri yang menyertakan lokasi. Jika Anda menguji solusinya, tidak diperlukan modifikasi.

    SELECT * FROM 'iot/topic'
  6. Di bawah Setel satu atau beberapa tindakan, pilih Tambah tindakan.

  7. Pilih Kirim pesan ke fungsi lambda.

  8. Pilih Konfigurasi tindakan.

  9. Temukan dan pilih fungsi Lambda Anda dari daftar.

  10. Pilih Tambahkan tindakan.

  11. Pilih Buat aturan.

Uji AWS IoT Core aturan Anda di konsol

Jika saat ini tidak ada perangkat yang menerbitkan telemetri yang menyertakan lokasi, Anda dapat menguji aturan dan solusi ini menggunakan konsol. AWS IoT Core Konsol memiliki klien pengujian tempat Anda dapat mempublikasikan pesan sampel untuk memverifikasi hasil solusi.

  1. Masuk ke AWS IoT Core konsol di https://console.aws.amazon.com/iot/.

  2. Di navigasi kiri, perluas Uji, dan pilih klien MQTT uji.

  3. Di bawah Publikasikan ke topik, atur nama Topik ke iot/topic (atau nama topik yang Anda atur dalam AWS IoT Core aturan, jika berbeda), dan berikan yang berikut untuk payload Pesan. Ganti stempel waktu 1604940328 dengan stempel waktu yang valid dalam 30 hari terakhir (stempel waktu yang lebih dari 30 hari diabaikan).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. Pilih Publikasikan ke topik untuk mengirim pesan pengujian.

  5. Untuk memvalidasi bahwa pesan diterima oleh Amazon Location Service, gunakan AWS CLI perintah berikut. Jika Anda memodifikasinya selama penyiapan, ganti nama pelacak dan id perangkat dengan yang Anda gunakan.

    aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123