Créer un rôle IAM et une règle IoT pour votre destination - AWS IoT Wireless

Créer un rôle IAM et une règle IoT pour votre destination

Les règles AWS IoT envoient des messages de l’appareil à d’autres services. Les règles AWS IoT peuvent également traiter les messages binaires reçus d’un terminal Sidewalk pour que d’autres services puissent les utiliser. Les destinations AWS IoT Core pour Amazon Sidewalk associent un appareil sans fil à la règle qui traite les données des messages de l’appareil pour les envoyer à d’autres services. La règle agit sur les données de l’appareil dès qu’AWS IoT Core pour Amazon Sidewalk les reçoit. Pour tous les appareils qui envoient leurs données au même service, vous pouvez créer une destination qui peut être partagée par tous les appareils. Vous devez également créer un rôle IAM qui autorise l’envoi de données à la règle.

Créer un rôle IAM pour votre destination

Créez un rôle IAM qui autorise AWS IoT Core pour Amazon Sidewalk à envoyer des données à la règle AWS IoT. Pour créer le rôle, utilisez l’opération d’API CreateRole ou la commande CLI create-role. Vous pouvez nommer le rôle comme 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"}]}'

Vous pouvez également définir la politique d’approbation pour le rôle à l’aide d’un fichier JSON.

aws iam create-role --role-name SidewalkRole \ --assume-role-policy-document file://trust-policy.json

L’exemple suivant affiche le contenu du fichier JSON.

Contenu de trust-policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Créez une règle pour votre destination

Utilisez l’opération de l’API, AWS IoT Core CreateTopicRule, ou la commande AWS CLI, create-topic-rule, pour créer une règle. La règle du sujet sera utilisée par votre destination pour acheminer les données reçues de votre terminal Sidewalk vers un autre Services AWS. Par exemple, vous pouvez créer une action de règle qui envoie un message à une fonction Lambda. Vous pouvez définir la fonction Lambda de telle sorte qu’elle reçoive les données d’application de votre appareil et utilise le base64 pour décoder les données de charge utile afin qu’elles puissent être utilisées par d’autres applications.

Les étapes suivantes montrent comment créer la fonction Lambda, puis une règle de rubrique qui envoie un message à cette fonction.

  1. Créer un rôle et une stratégie d’exécution

    Créez un rôle IAM qui accorde à votre fonction la permission d'accéder aux ressources AWS. Vous pouvez également définir la politique d’approbation pour le rôle à l’aide d’un fichier JSON.

    aws iam create-role --role-name lambda-ex \ --assume-role-policy-document file://lambda-trust-policy.json

    L’exemple suivant affiche le contenu du fichier JSON.

    Contenu de lambda-trust-policy.json

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Créer et tester la fonction Lambda.

    Procédez comme suit pour créer une fonction AWS Lambda qui décode les données de charge utile en base64.

    1. Écrivez le code pour décoder les données de charge utile. Par exemple, vous pouvez utiliser l’exemple de code Python suivant. Spécifiez un nom pour le script, par exemple base64_decode.py.

      Contenu du fichier 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. Créez un package de déploiement sous la forme d’un fichier zip contenant le fichier Python et nommez-le comme base64_decode.zip. Utilisez l’API CreateFunction ou la commande CLI create-function pour créer une fonction Lambda pour l’exemple de code, 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

      Le résultat suivant doit s'afficher. Vous utiliserez la valeur Amazon Resource Name (ARN) de la sortie, FunctionArn, lors de la création de la règle de sujet.

      { "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. Pour obtenir les journaux d’une invocation à partir de la ligne de commande, utilisez l’option --log-type avec la commande invoke. La réponse inclut un champ LogResult qui contient jusqu’à 4 Ko de journaux codés en base64 provenant de l’invocation.

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

      Vous devez recevoir une réponse avec un StatusCode de 200. Pour plus d’informations sur la création et l’utilisation de fonction Lambda à partir de AWS CLI, consultez Utiliser une fonction Lambda avec AWS CLI.

  3. Créer une règle de rubrique

    Utilisez l’API CreateTopicRule ou la commande CLI create-topic-rule pour créer une règle de rubrique qui envoie un message à cette fonction Lambda. Vous pouvez également ajouter une deuxième action de règle qui republie dans une rubrique AWS IoT. Donnez à cette règle de rubrique le nom Sidewalkrule.

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

    Vous pouvez utiliser le fichier myrule.json pour spécifier plus de détails sur la règle. Par exemple, le fichier JSON suivant montre comment republier dans une rubrique AWS IoT et envoyer un message à une fonction 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" } } ], }