Creazione di un ruolo IAM e della regola IoT per la destinazione
Le regole AWS IoT inviano messaggi del dispositivo ad altri servizi. Le regole AWS IoT possono anche elaborare i messaggi binari ricevuti da un dispositivo finale Sidewalk per l'utilizzo in altri servizi. Le destinazioni AWS IoT Core per Amazon Sidewalk associano un dispositivo wireless alla regola che elabora i dati dei messaggi del dispositivo da inviare ad altri servizi. La regola agisce sui dati del dispositivo non appena vengono ricevuti da AWS IoT Core per Amazon Sidewalk. Per tutti i dispositivi che inviano i propri dati allo stesso servizio, è possibile creare una destinazione che può essere condivisa da tutti i dispositivi. È inoltre necessario creare un ruolo IAM che conceda l'autorizzazione per inviare dati alla regola.
Creazione di un ruolo IAM per la destinazione
Crea un ruolo IAM che concede l'autorizzazione AWS IoT Core per Amazon Sidewalk per inviare dati alla regola AWS IoT. Per creare il ruolo, utilizza l'operazione API CreateRole o il comando dell'interfaccia a riga di comando create-role. Puoi denominare il ruolo come .SidewalkRole
aws iam create-role --role-nameSidewalkRole\ --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
È inoltre possibile definire la policy di affidabilità per il ruolo utilizzando un file JSON.
aws iam create-role --role-nameSidewalkRole\ --assume-role-policy-documentfile://trust-policy.json
Nell'esempio seguente viene mostrato il contenuto del file JSON.
Contenuto di trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Creazione di una regola per la destinazione
Utilizza l'operazione API AWS IoT Core, CreateTopicRule o il comando AWS CLI, create-topic-rule, per creare una regola. La regola dell'argomento verrà utilizzata dalla destinazione per instradare i dati ricevuti dal dispositivo finale Sidewalk ad altri Servizi AWS. Ad esempio, è possibile creare un'operazione della regola che invia un messaggio a una funzione Lambda. È possibile definire la funzione Lambda in modo che riceva i dati dell'applicazione dal dispositivo e utilizzi base64 per decodificare i dati del payload in modo da poter essere utilizzati da altre applicazioni.
Nelle fasi seguenti viene illustrato come creare la funzione Lambda e quindi una regola dell'argomento che invia un messaggio a questa funzione.
-
Creazione del ruolo di esecuzione e della policy
Crea il ruolo IAM che concede alla funzione l'autorizzazione per accedere alle risorse AWS. È inoltre possibile definire la policy di affidabilità per il ruolo utilizzando un file JSON.
aws iam create-role --role-namelambda-ex\ --assume-role-policy-documentfile://lambda-trust-policy.jsonNell'esempio seguente viene mostrato il contenuto del file JSON.
Contenuto di lambda-trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Creazione e verifica della funzione Lambda
Esegui la procedura seguente per creare una funzione AWS Lambda che esegue la decodifica base64 dei dati del payload.
-
Scrivi il codice per decodificare i dati del payload. Ad esempio, puoi utilizzare il seguente codice Python di esempio. Specifica un nome per lo script, ad esempio
.base64_decode.pyContenuto di base64_decode.py
// ----------------------------------------------------------- // ----- Python script to decode incoming binary payload ----- // ----------------------------------------------------------- import json import base64 def lambda_handler(event, context): message = json.dumps(event) print (message) payload_data = base64.b64decode(event["PayloadData"]) print(payload_data) print(int(payload_data,16)) -
Crea un pacchetto di implementazione come un file zip contenente il file Python e assegna un nome come
. Utilizza l'APIbase64_decode.zipCreateFunctiono il comando dell'interfaccia a riga di comandocreate-functionper creare una funzione Lambda per il codice di esempio,.base64_decode.py -
aws lambda create-function --function-namemy-function\ --zip-filefileb://base64_decode.zip--handler index.handler \ --runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-exVedrai il seguente output. Durante la creazione della regola dell'argomento, utilizzerai il valore nome della risorsa Amazon (ARN) dell'output,
FunctionArn.{ "FunctionName":"my-function", "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Runtime":"python3.9", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256":"FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... } -
Per ottenere i log per una chiamata dalla riga di comando, utilizza l'opzione
--log-typecon il comandoinvoke. La risposta include un campo LogResult contenente fino a 4 KB di log con codifica base64 dalla chiamata.aws lambda invoke --function-namemy-functionout --log-type TailLa risposta ricevuta deve contenere un
StatusCodedi 200. Per ulteriori informazioni sulla creazione e l'utilizzo di funzioni Lambda da AWS CLI, consultare Utilizzo di Lambda con AWS CLI.
-
-
Creazione di una regola dell'argomento
Utilizza l'API
CreateTopicRuleo il comando dell'interfaccia a riga di comandocreate-topic-ruleper creare una regola dell'argomento che invia un messaggio a questa funzione Lambda. Puoi anche aggiungere una seconda operazione della regola che ripubblica su un argomento AWS IoT. Assegna a questa regola dell'argomento un nome come.Sidewalkruleaws iot create-topic-rule --rule-nameSidewalkrule\ --topic-rule-payloadfile://myrule.jsonPuoi utilizzare il file
myrule.jsonper specificare ulteriori dettagli relativi alla regola. Ad esempio, il seguente file JSON mostra come ripubblicare su un argomento AWS IoT e inviare un messaggio a una funzione Lambda.{ "sql": "SELECT * ", "actions": [ { // You obtained thisfunctionArnwhen creating the Lambda function using the //create-functioncommand. "lambda": { "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" } }, { // This topic can be used to observe messages exchanged between the device and // AWS IoT Core for Amazon Sidewalk after the device is connected. "republish": { "roleArn": "arn:aws:iam::123456789012:role/service-role/SidewalkRepublishRole", "topic":"project/sensor/observed"} } ], }