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-documentfile://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.
-
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-documentfile://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" } ] }
-
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.
-
É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))
-
Créez un package de déploiement sous la forme d’un fichier zip contenant le fichier Python et nommez-le comme
. Utilisez l’APIbase64_decode.zip
CreateFunction
ou la commande CLIcreate-function
pour créer une fonction Lambda pour l’exemple de code,
.base64_decode.py
-
aws lambda create-function --function-name
my-function
\ --zip-filefileb://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", ... } -
Pour obtenir les journaux d’une invocation à partir de la ligne de commande, utilisez l’option
--log-type
avec la commandeinvoke
. 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 TailVous 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.
-
-
Créer une règle de rubrique
Utilisez l’API
CreateTopicRule
ou la commande CLIcreate-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-payloadfile://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"
} } ], }