Utilisation AWS Lambda avec MQTT - Amazon Location Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation AWS Lambda avec MQTT

Bien que l'utilisation ne AWS Lambda soit plus obligatoire lors de l'envoi des données de localisation de l'appareil à Amazon Location à des fins de suivi, vous souhaiterez peut-être toujours utiliser Lambda dans certains cas. Par exemple, si vous souhaitez traiter vous-même les données de localisation de votre appareil avant de les envoyer à Amazon Location. Les rubriques suivantes décrivent comment utiliser Lambda pour traiter les messages avant de les envoyer à votre tracker. Pour plus d'informations sur ce modèle, consultez l'architecture de référence.

Prérequis

Avant de commencer le suivi, vous devez créer une ressource de suivi. Pour créer une ressource de suivi, vous pouvez utiliser la console Amazon Location AWS CLI, ou Amazon LocationAPIs.

L'exemple suivant utilise la console Amazon Location Service pour créer la ressource de suivi :

  1. Ouvrez la console Amazon Location Service à l'adresse https://console.aws.amazon.com/location/.

  2. Dans le volet de navigation de gauche, choisissez Trackers.

  3. Choisissez Créer un tracker.

  4. Remplissez les cases suivantes :

    • Nom — Entrez un nom unique comportant un maximum de 100 caractères. Les entrées valides incluent les caractères alphanumériques, les traits d'union et les traits de soulignement. Par exemple, MyTracker.

    • Description — Entrez une description facultative. Par exemple, Tracker for storing AWS IoT Core device positions.

    • Filtrage des positions : sélectionnez le filtrage que vous souhaitez utiliser pour les mises à jour des positions. Par exemple, le filtrage basé sur la précision.

  5. Choisissez Créer un tracker.

Création d’une fonction Lambda

Pour créer une connexion entre Amazon Location Service AWS IoT Core et Amazon, vous avez besoin d'une AWS Lambda fonction permettant de traiter les messages transférés par AWS IoT Core. Cette fonction permet d'extraire toutes les données de position, de les formater pour Amazon Location Service et de les envoyer via Amazon Location TrackerAPI. Vous pouvez créer cette fonction via la AWS Lambda console, ou vous pouvez utiliser le AWS Command Line Interface (AWS CLI) ou le AWS Lambda APIs.

Pour créer une fonction Lambda qui publie des mises à jour de position sur Amazon Location à l'aide de la console :

  1. Ouvrez la AWS Lambda console à l'adresse https://console.aws.amazon.com/lambda/.

  2. Dans le menu de navigation de gauche, choisissez Functions.

  3. Choisissez Créer une fonction et assurez-vous que l'option Auteur à partir de zéro est sélectionnée.

  4. Remplissez les cases suivantes :

    • Nom de la fonction — Entrez un nom unique pour votre fonction. Les entrées valides incluent les caractères alphanumériques, les traits d'union et les traits de soulignement sans espaces. Par exemple, MyLambda.

    • Runtime — Choisissez Python 3.8.

  5. Choisissez Créer une fonction.

  6. Cliquez sur l'onglet Code pour ouvrir l'éditeur.

  7. Remplacez le code d'espace réservé lambda_function.py par le code suivant, en remplaçant la valeur attribuée TRACKER_NAME par le nom du tracker que vous avez créé comme condition préalable.

    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. Choisissez Déployer pour enregistrer la fonction mise à jour.

  9. Cliquez sur l’onglet Configuration.

  10. Dans la section Autorisations, choisissez le nom du rôle en lien hypertexte pour accorder à Amazon Location Service des autorisations pour votre fonction Lambda.

  11. Sur la page Résumé de votre rôle, choisissez Ajouter des autorisations, puis dans la liste déroulante, sélectionnez Créer une politique intégrée.

  12. Choisissez l'JSONonglet et remplacez la politique par le document suivant. Cela permet à votre fonction Lambda de mettre à jour les positions des appareils gérées par toutes les ressources de suivi dans toutes les régions.

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

  14. Entrez un nom de stratégie. Par exemple, AmazonLocationTrackerWriteOnly.

  15. Choisissez Créer une politique.

Vous pouvez modifier ce code de fonction, si nécessaire, pour l'adapter au schéma de message de votre appareil.

Création d'une AWS IoT Core règle

Créez ensuite une AWS IoT Core règle pour transmettre la télémétrie de position de vos appareils à la AWS Lambda fonction de transformation et de publication sur Amazon Location Service. L'exemple de règle fourni suppose que toute transformation nécessaire des charges utiles des appareils est gérée par votre fonction Lambda. Vous pouvez créer cette règle via la AWS IoT Core console, le AWS Command Line Interface (AWS CLI) ou le AWS IoT Core APIs.

Note

Bien que la AWS IoT console gère les autorisations nécessaires AWS IoT Core pour appeler votre fonction Lambda, si vous créez votre règle à partir du AWS CLI ouSDK, vous devez configurer une politique à laquelle accorder l'autorisation. AWS IoT

Pour créer un à AWS IoT Core l'aide de la console

  1. Connectez-vous à la AWS IoT Core console à l'adresse https://console.aws.amazon.com/iot/.

  2. Dans le volet de navigation de gauche, développez Act, puis sélectionnez Rules.

  3. Choisissez Créer une règle pour démarrer le nouvel assistant de règles.

  4. Saisissez un nom et une description pour la règle.

  5. Pour l'instruction de requête Rule, mettez à jour l'FROMattribut pour faire référence à une rubrique dans laquelle au moins un appareil publie des données de télémétrie incluant la localisation. Si vous testez la solution, aucune modification n'est nécessaire.

    SELECT * FROM 'iot/topic'
  6. Sous Définir une ou plusieurs actions, choisissez Ajouter une action.

  7. Sélectionnez Envoyer un message à une fonction Lambda.

  8. Choisissez Configurer une action.

  9. Recherchez et sélectionnez votre fonction Lambda dans la liste.

  10. Choisissez Add action.

  11. Choisissez Créer une règle.

Testez votre AWS IoT Core règle dans la console

Si aucun appareil ne publie actuellement de télémétrie incluant la localisation, vous pouvez tester votre règle et cette solution à l'aide de la AWS IoT Core console. La console dispose d'un client de test dans lequel vous pouvez publier un exemple de message pour vérifier les résultats de la solution.

  1. Connectez-vous à la AWS IoT Core console à l'adresse https://console.aws.amazon.com/iot/.

  2. Dans le volet de navigation de gauche, développez Test, puis choisissez le client de MQTT test.

  3. Sous Publier dans un sujet, définissez le nom du sujet sur iot/topic (ou le nom du sujet que vous avez défini dans votre AWS IoT Core règle, s'il est différent), et fournissez les informations suivantes pour la charge utile du message. Remplacer l'horodatage 1604940328 avec un horodatage valide au cours des 30 derniers jours (tout horodatage datant de plus de 30 jours est ignoré).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. Choisissez Publier dans le sujet pour envoyer le message de test.

  5. Pour vérifier que le message a bien été reçu par Amazon Location Service, utilisez la AWS CLI commande suivante. Si vous les avez modifiés lors de la configuration, remplacez le nom du tracker et l'identifiant de l'appareil par ceux que vous avez utilisés.

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