Verwenden AWS Lambda mit MQTT - Amazon Location Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden AWS Lambda mit MQTT

AWS Lambda Die Verwendung ist zwar nicht mehr erforderlich, wenn Gerätestandortdaten zur Nachverfolgung an Amazon Location gesendet werden, aber in einigen Fällen möchten Sie Lambda möglicherweise trotzdem verwenden. Zum Beispiel, wenn Sie die Standortdaten Ihres Geräts selbst verarbeiten möchten, bevor Sie sie an Amazon Location senden. In den folgenden Themen wird beschrieben, wie Sie Lambda verwenden, um Nachrichten zu verarbeiten, bevor Sie sie an Ihren Tracker senden. Weitere Informationen zu diesem Muster finden Sie in der Referenzarchitektur.

Voraussetzung

Bevor Sie mit dem Tracking beginnen können, müssen Sie eine Tracker-Ressource erstellen. Um eine Tracker-Ressource zu erstellen, können Sie die Amazon Location-Konsole AWS CLI, den oder den Amazon-Standort verwendenAPIs.

Das folgende Beispiel verwendet die Amazon Location Service Service-Konsole, um die Tracker-Ressource zu erstellen:

  1. Öffnen Sie die Amazon Location Service Service-Konsole unter https://console.aws.amazon.com/location/.

  2. Wählen Sie im linken Navigationsbereich Trackers aus.

  3. Wählen Sie Tracker erstellen.

  4. Füllen Sie die folgenden Felder aus:

    • Name — Geben Sie einen eindeutigen Namen mit maximal 100 Zeichen ein. Gültige Einträge enthalten alphanumerische Zeichen, Bindestriche und Unterstriche. Zum Beispiel MyTracker.

    • Beschreibung — Geben Sie eine optionale Beschreibung ein. Zum Beispiel Tracker for storing AWS IoT Core device positions.

    • Positionsfilterung — Wählen Sie die Filterung aus, die Sie für Positionsaktualisierungen verwenden möchten. Zum Beispiel genauigkeitsbasierte Filterung.

  5. Wählen Sie Tracker erstellen.

Erstellen einer Lambda-Funktion

Um eine Verbindung zwischen AWS IoT Core und Amazon Location Service herzustellen, benötigen Sie eine AWS Lambda Funktion zur Verarbeitung von weitergeleiteten Nachrichten AWS IoT Core. Diese Funktion extrahiert alle Positionsdaten, formatiert sie für Amazon Location Service und übermittelt sie über den Amazon Location TrackerAPI. Sie können diese Funktion über die AWS Lambda Konsole erstellen, oder Sie können die AWS Command Line Interface (AWS CLI) oder die AWS Lambda APIs verwenden.

So erstellen Sie eine Lambda-Funktion, die mithilfe der Konsole Positionsaktualisierungen für Amazon Location veröffentlicht:

  1. Öffnen Sie die AWS Lambda Konsole unter. https://console.aws.amazon.com/lambda/

  2. Wählen Sie in der linken Navigationsleiste Funktionen aus.

  3. Wählen Sie „Funktion erstellen“ und stellen Sie sicher, dass „Von Grund auf neu erstellen“ ausgewählt ist.

  4. Füllen Sie die folgenden Felder aus:

    • Funktionsname — Geben Sie einen eindeutigen Namen für Ihre Funktion ein. Gültige Einträge beinhalten alphanumerische Zeichen, Bindestriche und Unterstriche ohne Leerzeichen. Zum Beispiel MyLambda.

    • Runtime — Wählen Sie Python 3.8.

  5. Wählen Sie Funktion erstellen.

  6. Wählen Sie die Registerkarte Code, um den Editor zu öffnen.

  7. Überschreiben Sie den Platzhaltercode lambda_function.py mit dem Folgenden und ersetzen Sie den TRACKER_NAME zugewiesenen Wert durch den Namen des Trackers, den Sie als Voraussetzung erstellt haben.

    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. Wählen Sie Deploy, um die aktualisierte Funktion zu speichern.

  9. Wählen Sie die Registerkarte Konfiguration aus.

  10. Wählen Sie im Abschnitt Berechtigungen den Rollennamen mit dem Hyperlink aus, um Amazon Location Service Service-Berechtigungen für Ihre Lambda-Funktion zu gewähren.

  11. Wählen Sie auf der Übersichtsseite Ihrer Rolle die Option Berechtigungen hinzufügen und dann in der Dropdownliste die Option Inline-Richtlinie erstellen aus.

  12. Wählen Sie die JSONRegisterkarte aus und überschreiben Sie die Richtlinie mit dem folgenden Dokument. Auf diese Weise kann Ihre Lambda-Funktion Gerätepositionen aktualisieren, die von allen Tracker-Ressourcen in allen Regionen verwaltet werden.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "WriteDevicePosition", "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:*:*:tracker/*" } ] }
  13. Wählen Sie Richtlinie prüfen.

  14. Geben Sie den Namen einer Richtlinie ein. Zum Beispiel AmazonLocationTrackerWriteOnly.

  15. Wählen Sie Richtlinie erstellen aus.

Sie können diesen Funktionscode nach Bedarf ändern, um ihn an Ihr eigenes Gerätenachrichtenschema anzupassen.

Erstellen Sie eine AWS IoT Core Regel

Erstellen Sie als Nächstes eine AWS IoT Core Regel, um die Positionstelemetrie Ihrer Geräte zur Umwandlung und Veröffentlichung an Amazon Location Service an die AWS Lambda Funktion weiterzuleiten. Die bereitgestellte Beispielregel geht davon aus, dass jede notwendige Transformation von Geräte-Payloads von Ihrer Lambda-Funktion übernommen wird. Sie können diese Regel über die AWS IoT Core Konsole, die AWS Command Line Interface (AWS CLI) oder die erstellen. AWS IoT Core APIs

Anmerkung

Die AWS IoT Konsole verarbeitet zwar die Berechtigungen, die AWS IoT Core zum Aufrufen Ihrer Lambda-Funktion erforderlich sind, aber wenn Sie Ihre Regel über das AWS CLI Oder erstellenSDK, müssen Sie eine Richtlinie konfigurieren, der Sie Berechtigungen erteilen. AWS IoT

Um eine zu erstellen und die Konsole zu AWS IoT Core verwenden

  1. Melden Sie sich bei der AWS IoT Core Konsole an unter https://console.aws.amazon.com/iot/.

  2. Erweitern Sie in der linken Navigationsleiste Act und wählen Sie Regeln aus.

  3. Wählen Sie Regel erstellen aus, um den Assistenten für neue Regeln zu starten.

  4. Geben Sie für Ihre Regel einen Namen und eine Beschreibung ein.

  5. Aktualisieren Sie das FROM Attribut für die Regelabfrage so, dass es auf ein Thema verweist, in dem mindestens ein Gerät Telemetriedaten veröffentlicht, die den Standort enthalten. Wenn Sie die Lösung testen, sind keine Änderungen erforderlich.

    SELECT * FROM 'iot/topic'
  6. Wählen Sie unter Eine oder mehrere Aktionen festlegen die Option Aktion hinzufügen aus.

  7. Wählen Sie Eine Nachricht an eine Lambda-Funktion senden aus.

  8. Wählen Sie Configure action.

  9. Suchen Sie Ihre Lambda-Funktion und wählen Sie sie aus der Liste aus.

  10. Wählen Sie Aktion hinzufügen aus.

  11. Wählen Sie Regel erstellen aus.

Testen Sie Ihre AWS IoT Core Regel in der Konsole

Wenn derzeit keine Geräte Telemetriedaten veröffentlichen, die den Standort enthalten, können Sie Ihre Regel und diese Lösung mithilfe der AWS IoT Core Konsole testen. Die Konsole verfügt über einen Testclient, auf dem Sie eine Beispielnachricht veröffentlichen können, um die Ergebnisse der Lösung zu überprüfen.

  1. Melden Sie sich bei der AWS IoT Core Konsole an unter https://console.aws.amazon.com/iot/.

  2. Erweitern Sie in der linken Navigationsleiste die Option Test und wählen Sie MQTTTestclient aus.

  3. Stellen Sie unter In einem Thema veröffentlichen den Namen des Themas auf ein iot/topic (oder den Namen des Themas, das Sie in Ihrer AWS IoT Core Regel eingerichtet haben, falls anders) und geben Sie Folgendes für die Nachrichten-Payload ein. Ersetzen Sie den Zeitstempel 1604940328 mit einem gültigen Zeitstempel innerhalb der letzten 30 Tage (alle Zeitstempel, die älter als 30 Tage sind, werden ignoriert).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. Wählen Sie Im Thema veröffentlichen, um die Testnachricht zu senden.

  5. Verwenden Sie den folgenden AWS CLI Befehl, um zu überprüfen, ob die Nachricht von Amazon Location Service empfangen wurde. Wenn Sie sie während der Einrichtung geändert haben, ersetzen Sie den Tracker-Namen und die Geräte-ID durch die, die Sie verwendet haben.

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