Utilizzo con AWS Lambda MQTT - Servizio di posizione Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo con AWS Lambda MQTT

Sebbene l'utilizzo non AWS Lambda sia più necessario per l'invio dei dati sulla posizione del dispositivo ad Amazon Location per il tracciamento, in alcuni casi potresti comunque voler utilizzare Lambda. Ad esempio, se desideri elaborare personalmente i dati sulla posizione del tuo dispositivo, prima di inviarli ad Amazon Location. I seguenti argomenti descrivono come utilizzare Lambda per elaborare i messaggi prima di inviarli al tracker. Per ulteriori informazioni su questo modello, consulta l'architettura di riferimento.

Prerequisito

Prima di iniziare il tracciamento, è necessario creare una risorsa tracker. Per creare una risorsa di tracciamento, puoi utilizzare la console Amazon Location AWS CLI, o Amazon LocationAPIs.

L'esempio seguente utilizza la console Amazon Location Service per creare la risorsa tracker:

  1. Apri la console Amazon Location Service all'indirizzo https://console.aws.amazon.com/location/.

  2. Nel riquadro di navigazione a sinistra, scegli Trackers.

  3. Scegli Crea tracker.

  4. Compila le seguenti caselle:

    • Nome: inserisci un nome univoco con un massimo di 100 caratteri. Le voci valide includono caratteri alfanumerici, trattini e caratteri di sottolineatura. Ad esempio, MyTracker.

    • Descrizione: inserisci una descrizione opzionale. Ad esempio, Tracker for storing AWS IoT Core device positions.

    • Filtro di posizione: seleziona il filtro che desideri utilizzare per gli aggiornamenti delle posizioni. Ad esempio, filtraggio basato sulla precisione.

  5. Scegli Crea tracker.

Creazione di una funzione Lambda

Per creare una connessione tra AWS IoT Core e Amazon Location Service, è necessaria una AWS Lambda funzione per elaborare i messaggi inoltrati da. AWS IoT Core Questa funzione estrarrà tutti i dati di posizione, li formatterà per Amazon Location Service e li invierà tramite Amazon Location API Tracker. Puoi creare questa funzione tramite la AWS Lambda console oppure puoi usare AWS Command Line Interface (AWS CLI) o. AWS Lambda APIs

Per creare una funzione Lambda che pubblichi aggiornamenti di posizione su Amazon Location utilizzando la console:

  1. Apri la AWS Lambda console all'indirizzo. https://console.aws.amazon.com/lambda/

  2. Dalla barra di navigazione a sinistra, scegli Funzioni.

  3. Scegli Crea funzione e assicurati che sia selezionato Author from zero.

  4. Compila le seguenti caselle:

    • Nome della funzione: immettere un nome univoco per la funzione. Le voci valide includono caratteri alfanumerici, trattini e caratteri di sottolineatura senza spazi. Ad esempio, MyLambda.

    • Runtime: scegli Python 3.8.

  5. Scegli Crea funzione.

  6. Scegli la scheda Codice per aprire l'editor.

  7. Sovrascrivi il codice segnaposto lambda_function.py con quanto segue, sostituendo il valore assegnato TRACKER_NAME con il nome del tracker che hai creato come prerequisito.

    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. Scegliete Deploy per salvare la funzione aggiornata.

  9. Scegli la scheda Configurazione.

  10. Nella sezione Autorizzazioni, scegli il nome del ruolo con collegamento ipertestuale per concedere ad Amazon Location Service le autorizzazioni per la tua funzione Lambda.

  11. Dalla pagina di riepilogo del tuo ruolo, scegli Aggiungi autorizzazioni, quindi dall'elenco a discesa seleziona Crea politica in linea.

  12. Scegli la JSONscheda e sovrascrivi la politica con il seguente documento. Ciò consente alla funzione Lambda di aggiornare le posizioni dei dispositivi gestite da tutte le risorse del tracker in tutte le regioni.

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

  14. Inserire un nome per la policy. Ad esempio, AmazonLocationTrackerWriteOnly.

  15. Scegli Crea policy.

È possibile modificare questo codice di funzione, se necessario, per adattarlo allo schema dei messaggi del dispositivo.

Crea una AWS IoT Core regola

Successivamente, crea una AWS IoT Core regola per inoltrare la telemetria posizionale dei tuoi dispositivi alla AWS Lambda funzione di trasformazione e pubblicazione su Amazon Location Service. La regola di esempio fornita presuppone che qualsiasi trasformazione necessaria dei payload del dispositivo venga gestita dalla funzione Lambda. È possibile creare questa regola tramite la AWS IoT Core console, il AWS Command Line Interface (AWS CLI) o il. AWS IoT Core APIs

Nota

Sebbene la AWS IoT console gestisca le autorizzazioni necessarie AWS IoT Core per consentire di richiamare la funzione Lambda, se si crea la regola da SDK o, è necessario configurare una policy a cui concedere AWS CLI l'autorizzazione. AWS IoT

Per creare un file AWS IoT Core utilizzando la console

  1. Accedi alla AWS IoT Core console all'indirizzo https://console.aws.amazon.com/iot/.

  2. Nella barra di navigazione a sinistra, espandi Act e scegli Rules.

  3. Scegli Crea una regola per avviare la nuova procedura guidata per le regole.

  4. Immettere un nome e una descrizione per la regola.

  5. Per l'istruzione Rule Query, aggiorna l'FROMattributo in modo che faccia riferimento a un argomento in cui almeno un dispositivo pubblica dati di telemetria che include la posizione. Se state testando la soluzione, non è necessaria alcuna modifica.

    SELECT * FROM 'iot/topic'
  6. In Imposta una o più azioni, scegli Aggiungi azione.

  7. Seleziona Invia un messaggio a una funzione lambda.

  8. Selezionare Configure action (Configura operazione).

  9. Trova e seleziona la tua funzione Lambda dall'elenco.

  10. Selezionare Add action (Aggiungi operazione).

  11. Scegli Crea regola.

Verifica la tua AWS IoT Core regola nella console

Se al momento nessun dispositivo pubblica dati di telemetria che include la posizione, puoi testare la regola e questa soluzione utilizzando la console. AWS IoT Core La console dispone di un client di test in cui è possibile pubblicare un messaggio di esempio per verificare i risultati della soluzione.

  1. Accedi alla AWS IoT Core console all'indirizzo https://console.aws.amazon.com/iot/.

  2. Nella barra di navigazione a sinistra, espandi Test e scegli MQTTTest client.

  3. In Pubblica su un argomento, imposta il nome dell'argomento su iot/topic (o il nome dell'argomento che hai impostato nella AWS IoT Core regola, se diverso) e fornisci quanto segue per il payload del messaggio. Sostituisci il timestamp 1604940328 con un timestamp valido negli ultimi 30 giorni (tutti i timestamp più vecchi di 30 giorni vengono ignorati).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. Scegli Pubblica su argomento per inviare il messaggio di prova.

  5. Per verificare che il messaggio sia stato ricevuto da Amazon Location Service, usa il seguente AWS CLI comando. Se li hai modificati durante la configurazione, sostituisci il nome del tracker e l'ID del dispositivo con quelli che hai usato.

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