送信先の IAM ロールと IoT ルールを作成する - AWS IoT Wireless

送信先の IAM ロールと IoT ルールを作成する

AWS IoT ルールは、デバイスメッセージを他のサービスに送信します。AWS IoT ルールでは、Sidewalk エンドデバイスから受信したバイナリメッセージを処理して、他のサービスで使用しやすくすることもできます。AWS IoT Core for Amazon Sidewalk の送信先は、デバイスのメッセージデータを処理して他のサービスに送信するルールにワイヤレスデバイスを関連付けます。このルールは、AWS IoT Core for Amazon Sidewalk がデバイスのデータを受信するとすぐにそのデータに対してアクションを実行します。データを同じサービスに送信するすべてのデバイスについて、すべての送信先を作成して、すべての送信先を作成できます。ルールにデータを送信するためのアクセス許可を付与する IAM ロールも作成する必要があります。

送信先の IAM ロールを作成する

データを AWS IoT ルールに送信するための AWS IoT Core for Amazon Sidewalk アクセス許可を付与する IAM ロールを作成します。このロールを作成するには、CreateRole API オペレーションまたは create-role CLI コマンドを使用します。ロールには 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"}]}'

また、JSON ファイルを使用してロールの信頼ポリシーを定義することもできます。

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

以下は、JSON ファイルの内容を示しています。

trust-policy.json の内容

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

送信先のルールを作成する

ルールを作成するには、AWS IoT Core API オペレーション、CreateTopicRule、または AWS CLI コマンド、create-topic-rule を使用します。トピックルールは、送信先が Sidewalk エンドデバイスから受信したデータを他の AWS のサービス にルーティングするために使用されます。例えば、Lambda 関数にメッセージを送信するルールアクションを作成できます。デバイスからアプリケーションデータを受け取り、base64 を使用してペイロードデータをデコードして他のアプリケーションで使用できるように Lambda 関数を定義できます。

以下の手順は、Lambda 関数を作成する方法と、この関数にメッセージを送信するトピックルールを作成する方法を示しています。

  1. 実行ロールとポリシーを作成する

    AWS リソースにアクセスするためのアクセス許可を関数に付与する IAM ロールを作成します。また、JSON ファイルを使用してロールの信頼ポリシーを定義することもできます。

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

    以下は、JSON ファイルの内容を示しています。

    lambda-trust-policy.json の内容

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Lambda 関数を作成およびテストする

    ペイロードデータを base64 でデコードする AWS Lambda 関数を作成するには、次の手順を実行します。

    1. ペイロードデータをデコードするためのコードを記述します。例えば、以下の Python サンプルコードを使用できます。スクリプトの名前を指定します (例: base64_decode.py)。

      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. Python ファイルを含む zip ファイルとしてデプロイパッケージを作成し、そのパッケージに base64_decode.zip という名前を付けます。CreateFunction API または create-function CLI コマンドを使用して、サンプルコード base64_decode.py の Lambda 関数を作成します。

    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

      次のような出力が表示されます。トピックルールを作成するときは、出力、FunctionArn の Amazon リソースネーム (ARN) の値を使用します。

      { "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. コマンドラインから呼び出しのログを取得するには、invoke コマンドと共に --log-type オプションを使用します。レスポンスには、LogResult フィールドが含まれます。このフィールドには、呼び出しから base64 コードされた最大 4 KB のログが含まれます。

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

      StatusCode が 200 のレスポンスが返ってくるはずです。Lambda 関数の作成と使用の詳細については、「AWS CLI で Lambda を使用する」を参照してください。

  3. トピックルールを作成する

    CreateTopicRule API または create-topic-rule CLI コマンドを使用して、この Lambda 関数にメッセージを送信するトピックルールを作成します。AWS IoT トピックに再公開する 2 つ目のルールアクションを追加することもできます。このトピックルールに「Sidewalkrule」という名前を付けてください。

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

    myrule.json ファイルを使用して、ルールに関する詳細を指定できます。例えば、次の JSON ファイルには、AWS IoT トピックを再発行して 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" } } ], }