Creazione di un ruolo IAM e della regola IoT per la destinazione - Wireless AWS IoT

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-name SidewalkRole \ --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-name SidewalkRole \ --assume-role-policy-document file://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.

  1. 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-name lambda-ex \ --assume-role-policy-document file://lambda-trust-policy.json

    Nell'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" } ] }
  2. 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.

    1. 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.py.

      Contenuto 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))
    2. Crea un pacchetto di implementazione come un file zip contenente il file Python e assegna un nome come base64_decode.zip. Utilizza l'API CreateFunction o il comando dell'interfaccia a riga di comando create-function per creare una funzione Lambda per il codice di esempio, base64_decode.py.

    3. aws lambda create-function --function-name my-function \ --zip-file fileb://base64_decode.zip --handler index.handler \ --runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-ex

      Vedrai 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", ... }
    4. Per ottenere i log per una chiamata dalla riga di comando, utilizza l'opzione --log-type con il comando invoke. La risposta include un campo LogResult contenente fino a 4 KB di log con codifica base64 dalla chiamata.

      aws lambda invoke --function-name my-function out --log-type Tail

      La risposta ricevuta deve contenere un StatusCode di 200. Per ulteriori informazioni sulla creazione e l'utilizzo di funzioni Lambda da AWS CLI, consultare Utilizzo di Lambda con AWS CLI.

  3. Creazione di una regola dell'argomento

    Utilizza l'API CreateTopicRule o il comando dell'interfaccia a riga di comando create-topic-rule per 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 Sidewalkrule.

    aws iot create-topic-rule --rule-name Sidewalkrule \ --topic-rule-payload file://myrule.json

    Puoi utilizzare il file myrule.json per 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 this functionArn when creating the Lambda function using the // create-function command. "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" } } ], }