대상에 대한 IAM 역할 및 IoT 규칙 생성 - AWS IoT Wireless

대상에 대한 IAM 역할 및 IoT 규칙 생성

AWS IoT 규칙은 디바이스 메시지를 다른 서비스로 전송합니다. 또한 AWS IoT 규칙은 Sidewalk 엔드 디바이스에서 수신한 바이너리 메시지를 처리하여 다른 서비스가 사용할 수 있도록 합니다. Amazon Sidewalk용 AWS IoT Core 대상은 무선 디바이스를 디바이스 메시지 데이터를 처리하여 다른 서비스로 전송하는 규칙과 연결합니다. 규칙은 Amazon Sidewalk용 AWS IoT Core에서 수신하는 즉시 디바이스의 데이터에 적용됩니다. 동일한 서비스에 데이터를 보내는 모든 디바이스가 공유하는 대상을 만들 수 있습니다. 또한 규칙에 데이터를 전송할 권한을 부여하는 IAM 역할을 생성해야 합니다.

대상에 대한 IAM 역할 생성

AWS IoT 규칙에 데이터를 전송할 권한을 Amazon Sidewalk용 AWS IoT Core에 부여하는 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

      다음과 같이 출력되어야 합니다. 주제 규칙을 생성할 때 출력의 Amazon 리소스 이름(ARN)인 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. 명령줄에서 호출에 대한 로그를 가져오려면 invoke 명령과 함께 --log-type 옵션을 사용하세요. 호출에서 base64로 인코딩된 로그를 최대 4KB까지 포함하는 LogResult 필드가 응답에 포함됩니다.

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

      StatusCode가 200인 응답을 받게 됩니다. AWS CLI를 통한 Lambda 함숨 생성 및 사용에 대한 자세한 내용은 AWS CLI에서 Lambda 사용을 참조하세요.

  3. 주제 규칙 생성

    CreateTopicRule API 또는 create-topic-rule CLI 명령을 사용하여 이 Lambda 함수에 메시지를 보내는 주제 규칙을 생성합니다. AWS IoT 주제에 다시 게시하는 두 번째 규칙 작업을 추가할 수도 있습니다. 이 주제 규칙의 이름을 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" } } ], }