Para crear una conexión entre AWS IoT y Amazon Location, necesita una función de Lambda para procesar los mensajes reenviados por los eventos de CloudWatch de EventBridge. Esta función extraerá todos los datos posicionales, los formateará para Amazon Location y los enviará a través de la API de de Amazon Location Tracker.
En el siguiente procedimiento, se muestra cómo crear esta función a través de la consola de Lambda:
Abra la consola de
. En el panel de navegación izquierdo, elija Funciones.
A continuación, elija Crear función y asegúrese de que esté seleccionada la opción Autor desde cero.
Proporcione un Nombre de función y, en la opción Tiempo de ejecución, elija Node.js 16.x.
Elija Crear función.
Abra la pestaña Código para acceder al editor.
Sobrescriba el código del marcador de posición en el archivo
index.js
con lo siguiente:const AWS = require('aws-sdk') const iot = new AWS.Iot(); exports.handler = function(event) { console.log("event===>>>", JSON.stringify(event)); var param = { endpointType: "iot:Data-ATS" }; iot.describeEndpoint(param, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else { var endp = data['endpointAddress']; const iotdata = new AWS.IotData({endpoint: endp}); const trackerEvent = event["detail"]["EventType"]; const src = event["source"]; const time = event["time"]; const gfId = event["detail"]["GeofenceId"]; const resources = event["resources"][0]; const splitResources = resources.split("."); const geofenceCollection = splitResources[splitResources.length - 1]; const coordinates = event["detail"]["Position"]; const deviceId = event["detail"]["DeviceId"]; console.log("deviceId===>>>", deviceId); const msg = { "trackerEventType" : trackerEvent, "source" : src, "eventTime" : time, "geofenceId" : gfId, "coordinates": coordinates, "geofenceCollection": geofenceCollection }; const params = { topic: `${deviceId}/tracker`, payload: JSON.stringify(msg), qos: 0 }; iotdata.publish(params, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else { console.log("Ladmbda triggered===>>>", trackerEvent); // successful response } }); } }); }
Seleccione Implementar para guardar la función actualizada.
Haga clic en la pestaña Configuración.
En la sección Desencadenadores, pulse el botón Agregar desencadenador.
Seleccione EventBridge (CloudWatch Events) en el campo Origen.
Seleccione la opción Reglas existentes.
Introduzca el nombre de la regla, por ejemplo
AmazonLocationMonitor-GEOFENCECOLLECTION_NAME
.Pulse el botón Agregar.
Esto también adjuntará las declaraciones de política basadas en los recursos en la pestaña de permisos.
Ahora configurará el cliente de pruebas MQTT usando AWS IoT con el siguiente procedimiento:
Abra https://console.aws.amazon.com/iot/
. En el panel de navegación principal, seleccione el cliente de pruebas MQTT.
Verá una sección titulada Cliente de prueba MQTT en la que puede configurar su conexión MQTT.
Después de configurar los ajustes necesarios, haga clic en el botón Conectar para establecer una conexión con el intermediario MQTT utilizando los parámetros proporcionados.
Registre el punto de conexión, puesto que se utilizará más adelante en el tutorial.
Una vez conectado al cliente de pruebas, puede suscribirse a los temas de MQTT o publicar mensajes sobre los temas utilizando los campos de entrada correspondientes que se proporcionan en la interfaz del cliente de pruebas de MQTT. A continuación, creará una política de AWS IoT.
En el menú de la izquierda, en Administrar, expanda la opción Seguridad y haga clic en Políticas.
Haga clic en el botón Crear política.
Escriba un nombre para la política.
En el documento de política, seleccione la pestaña JSON.
Copie y pegue la política que se muestra a continuación, pero asegúrese de actualizar todos los elementos con su
yREGION
:ACCOUNT_ID
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive" ], "Resource": [ "arn:aws:iot:
REGION
:ACCOUNT_ID
:client/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION
:ACCOUNT_ID
:topic/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION
:ACCOUNT_ID
:topicfilter/${cognito-identity.amazonaws.com:sub}/*", "arn:aws:iot:REGION
:ACCOUNT_ID
:topic/${cognito-identity.amazonaws.com:sub}/tracker" ], "Effect": "Allow" } ] }Seleccione el botón Crear para terminar.
Tras completar el procedimiento anterior, actualizará los permisos del rol de invitado como sigue:
Vaya a Amazon Cognito y abra su grupo de identidades. A continuación, vaya al acceso de usuario y seleccione el rol de invitado.
Haga clic en las políticas de permisos para habilitar la edición.
{ 'Version': '2012-10-17', 'Statement': [ { 'Action': [ 'geo:GetMap*', 'geo:BatchUpdateDevicePosition', 'geo:BatchEvaluateGeofences', 'iot:Subscribe', 'iot:Publish', 'iot:Connect', 'iot:Receive', 'iot:AttachPrincipalPolicy', 'iot:AttachPolicy', 'iot:DetachPrincipalPolicy', 'iot:DetachPolicy' ], 'Resource': [ 'arn:aws:geo:us-east-1:{
USER_ID
}:map/{MAP_NAME
}', 'arn:aws:geo:us-east-1:{USER_ID
}:tracker/{TRACKER_NAME
}', 'arn:aws:geo:us-east-1:{USER_ID
}:geofence-collection/{GEOFENCE_COLLECTION_NAME
}', 'arn:aws:iot:us-east-1:{USER_ID
}:client/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID
}:topic/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID
}:topicfilter/${cognito-identity.amazonaws.com:sub}/*', 'arn:aws:iot:us-east-1:{USER_ID
}:topic/${cognito-identity.amazonaws.com:sub}/tracker' ], 'Effect': 'Allow' }, { 'Condition': { 'StringEquals': { 'cognito-identity.amazonaws.com:sub': '${cognito-identity.amazonaws.com:sub}' } }, 'Action': [ 'iot:AttachPolicy', 'iot:DetachPolicy', 'iot:AttachPrincipalPolicy', 'iot:DetachPrincipalPolicy' ], 'Resource': [ '*' ], 'Effect': 'Allow' } ] }Con los cambios de política anteriores, todos los recursos de AWS necesarios ahora están configurados correctamente para la aplicación.