Erstellen einer IAM-Rolle und einer IoT-Regel für Ihr Ziel
AWS IoT-Regeln senden Gerätenachrichten an andere Services. AWS IoT-Regeln können auch die von einem Sidewalk-Endgerät empfangenen Binärnachrichten verarbeiten, damit sie von anderen Services verwendet werden können. AWS IoT Core für Amazon Sidewalk-Ziele verknüpfen ein WLAN-Gerät mit der Regel, die die Nachrichtendaten des Geräts verarbeitet, um sie an andere Services zu senden. Die Regel wird auf die Daten des Geräts angewendet, sobald sie von AWS IoT Core für Amazon Sidewalk empfangen werden. Für Geräte, die ihre Daten an denselben Service senden, können Sie ein Ziel erstellen, das von allen Geräten gemeinsam genutzt werden kann. Sie müssen auch eine IAM-Rolle erstellen, die die Berechtigung zum Senden von Daten an die Regel erteilt.
Erstellen einer IAM-Rolle für Ihr Ziel
Erstellen Sie eine IAM-Rolle, die AWS IoT Core für Amazon Sidewalk die Berechtigung zum Senden von Daten an die AWS IoT-Regel erteilt. Verwenden Sie die CreateRole
-API-Operation oder den create-role
-CLI-Befehl, um die Rolle zu erstellen. Sie können die Rolle
nennen.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"}]}'
Sie können die Vertrauensrichtlinie für die Rolle auch mithilfe einer JSON-Datei definieren.
aws iam create-role --role-name
SidewalkRole
\ --assume-role-policy-documentfile://trust-policy.json
Im Folgenden werden die Inhalte der JSON-Datei gezeigt.
Inhalt von trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Erstellen einer Regel für Ihr Ziel
Verwenden Sie die AWS IoT Core-API-Operation CreateTopicRule
oder den AWS CLI-Befehl create-topic-rule
, um eine Rolle zu erstellen. Die Themenregel wird von Ihrem Ziel verwendet, um die von Ihrem Sidewalk-Endgerät empfangenen Daten an andere AWS-Services weiterzuleiten. Sie können beispielsweise eine Regelaktion erstellen, die eine Nachricht an eine Lambda-Funktion sendet. Sie können die Lambda-Funktion so definieren, dass sie die Anwendungsdaten von Ihrem Gerät empfängt und base64 verwendet, um die Nutzlastdaten zu dekodieren, sodass sie von anderen Anwendungen verwendet werden können.
In den folgenden Schritten wird gezeigt, wie Sie die Lambda-Funktion und anschließend eine Themenregel erstellen, die eine Nachricht an diese Funktion sendet.
-
Erstellen einer Ausführungsrolle und einer Richtlinie
Erstellen Sie die IAM-Rolle, die Ihrer Funktion Zugriff auf AWS-Ressourcen gewährt. Sie können die Vertrauensrichtlinie für die Rolle auch mithilfe einer JSON-Datei definieren.
aws iam create-role --role-name
lambda-ex
\ --assume-role-policy-documentfile://lambda-trust-policy.json
Im Folgenden werden die Inhalte der JSON-Datei gezeigt.
Inhalt von lambda-trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Erstellen und testen der Lambda-Funktion
Führen Sie die folgenden Schritte aus, um eine AWS Lambda-Funktion zu erstellen, die die base64-Nutzlastdaten dekodiert.
-
Schreiben Sie den Code für die Dekodierung der Nutzlastdaten. Sie können beispielsweise den folgenden Python-Beispielcode verwenden. Geben Sie einen Namen für das Skript an, z. B.
.base64_decode.py
Inhalt von 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))
-
Erstellen Sie ein Bereitstellungspaket als Zip-Datei, die die Python-Datei enthält, und nennen Sie sie
. Verwenden Sie diebase64_decode.zip
CreateFunction
-API oder dencreate-function
-CLI-Befehl, um eine Lambda-Funktion für den Beispielcode
zu erstellen.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
Die Ausgabe sollte folgendermaßen aussehen. Bei der Erstellung der Themenregel verwenden Sie den Wert des Amazon-Ressourcennamens (ARN) aus der Ausgabe
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", ... } -
Verwenden Sie die
--log-type
-Option mit deminvoke
-Befehl, um Protokolle für einen Aufruf über die Befehlszeile abzurufen. Die Antwort enthält das Feld LogResult, das bis zu 4 KB base64-verschlüsselte Protokolle aus dem Aufruf enthält.aws lambda invoke --function-name
my-function
out --log-type TailSie erhalten die Antwort mit einem
StatusCode
von 200. Weitere Informationen zur Erstellung und Verwendung von Lambda-Funktionen aus AWS CLI finden Sie unter Erstellen einer Lambda-Funktion mit der AWS CLI.
-
-
Erstellen einer Themenregel
Verwenden Sie die
CreateTopicRule
-API oder dencreate-topic-rule
-CLI-Befehl, um eine Themenregel zu erstellen, die eine Nachricht an diese Lambda-Funktion sendet. Sie können auch eine zweite Regelaktion hinzufügen, die zu einem AWS IoT-Thema erneut veröffentlicht wird. Nennen Sie diese Themenregel
.Sidewalkrule
aws iot create-topic-rule --rule-name
Sidewalkrule
\ --topic-rule-payloadfile://myrule.json
Sie können die
myrule.json
-Datei verwenden, um weitere Details zur Regel anzugeben. Die folgende JSON-Datei zeigt, wie Sie in einem AWS IoT-Thema erneut veröffentlichen und eine Nachricht an eine Lambda-Funktion senden.{ "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"
} } ], }