Erstellen einer IAM-Rolle und einer IoT-Regel für Ihr Ziel - AWS IoT Wireless

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 SidewalkRole nennen.

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-document file://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.

  1. 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-document file://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" } ] }
  2. 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.

    1. 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))
    2. Erstellen Sie ein Bereitstellungspaket als Zip-Datei, die die Python-Datei enthält, und nennen Sie sie base64_decode.zip. Verwenden Sie die CreateFunction-API oder den create-function-CLI-Befehl, um eine Lambda-Funktion für den Beispielcode base64_decode.py zu erstellen.

    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

      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", ... }
    4. Verwenden Sie die --log-type-Option mit dem invoke-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 Tail

      Sie 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.

  3. Erstellen einer Themenregel

    Verwenden Sie die CreateTopicRule-API oder den create-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-payload file://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" } } ], }