와 함께 사용 AWS Lambda MQTT - Amazon Location Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

와 함께 사용 AWS Lambda MQTT

추적을 위해 Amazon Location으로 디바이스 위치 데이터를 전송할 때 더 이상 를 사용하지 않아도 되지만, 경우에 AWS Lambda 따라서는 Lambda를 계속 사용하고 싶을 수도 있습니다. 예를 들어, Amazon Location으로 전송하기 전에 디바이스 위치 데이터를 직접 처리하는 경우가 있습니다. 다음 주제에서는 Lambda를 사용하여 메시지를 트래커로 보내기 전에 메시지를 처리하는 방법을 설명합니다. 이 패턴에 대한 자세한 내용은 참조 아키텍처를 참조하세요.

전제 조건

추적을 시작하려면 먼저 트래커 리소스를 만들어야 합니다. 트래커 리소스를 생성하려면 Amazon Location 콘솔 AWS CLI, 또는 Amazon Location을 사용할 수 APIs 있습니다.

다음 예시에서는 Amazon Location Service 콘솔을 사용하여 트래커 리소스를 생성합니다.

  1. 에서 Amazon Location Service 콘솔을 엽니다 https://console.aws.amazon.com/location/.

  2. 왼쪽 탐색 창에서 트래커를 선택합니다.

  3. 트래커 생성을 선택합니다.

  4. 다음 입력란을 작성합니다.

    • 이름 – 최대 100자의 입력할 수 있는 고유한 이름을 입력합니다. 영숫자, 하이픈, 밑줄을 입력할 수 있습니다. 예: MyTracker.

    • 설명 – 선택적 설명을 입력합니다. 예: Tracker for storing AWS IoT Core device positions.

    • 위치 필터링 – 위치 업데이트에 사용할 필터링을 선택합니다. 예를 들어, 정확도 기반 필터링이 있습니다.

  5. 트래커 생성을 선택합니다.

Lambda 함수 생성

Amazon Location Service 간에 AWS IoT Core 연결을 생성하려면 에서 전달한 AWS IoT Core메시지를 처리하는 AWS Lambda 함수가 필요합니다. 이 함수는 모든 위치 데이터를 추출하여 Amazon Location Service에 맞게 형식을 지정한 다음 Amazon 위치 추적기를 API 통해 제출합니다. AWS Lambda 콘솔을 통해 이 함수를 만들거나 AWS Command Line Interface (AWS CLI) 또는 를 사용할 수 있습니다. AWS Lambda APIs

콘솔을 사용하여 Amazon Location에 위치 업데이트를 게시하는 Lambda 함수를 생성하려면

  1. 에서 AWS Lambda 콘솔을 엽니다 https://console.aws.amazon.com/lambda/.

  2. 왼쪽 탐색에서 함수를 선택합니다.

  3. 함수 생성을 선택하고 새로 작성이 선택되어 있는지 확인합니다.

  4. 다음 입력란을 작성합니다.

    • 함수 이름 – 함수에 고유한 이름을 입력합니다. 유효한 항목에는 공백 없는 영숫자 문자, 하이픈 및 밑줄이 포함됩니다. 예: MyLambda.

    • 런타임 — 선택 Python 3.8.

  5. 함수 생성(Create function)을 선택합니다.

  6. Code 탭을 선택하여 편집기를 엽니다.

  7. lambda_function.py의 플레이스홀더 코드를 다음으로 덮어쓰고, TRACKER_NAME에 할당된 값을 사전 조건으로 생성한 트래커 이름으로 바꿉니다.

    from datetime import datetime import json import os import boto3 # Update this to match the name of your Tracker resource TRACKER_NAME = "MyTracker" """ This Lambda function receives a payload from AWS IoT Core and publishes device updates to Amazon Location Service via the BatchUpdateDevicePosition API. Parameter 'event' is the payload delivered from AWS IoT Core. In this sample, we assume that the payload has a single top-level key 'payload' and a nested key 'location' with keys 'lat' and 'long'. We also assume that the name of the device is nested in the payload as 'deviceid'. Finally, the timestamp of the payload is present as 'timestamp'. For example: >>> event { 'payload': { 'deviceid': 'thing123', 'timestamp': 1604940328, 'location': { 'lat': 49.2819, 'long': -123.1187 }, 'accuracy': {'Horizontal': 20.5 }, 'positionProperties': {'field1':'value1','field2':'value2'} } } If your data doesn't match this schema, you can either use the AWS IoT Core rules engine to format the data before delivering it to this Lambda function, or you can modify the code below to match it. """ def lambda_handler(event, context): update = { "DeviceId": event["payload"]["deviceid"], "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"), "Position": [ event["payload"]["location"]["long"], event["payload"]["location"]["lat"] ] } if "accuracy" in event["payload"]: update["Accuracy"] = event["payload"]['accuracy'] if "positionProperties" in event["payload"]: update["PositionProperties"] = event["payload"]['positionProperties'] client = boto3.client("location") response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update]) return { "statusCode": 200, "body": json.dumps(response) }
  8. [배포]를 선택하여 업데이트된 함수를 저장합니다.

  9. 구성 탭을 선택합니다.

  10. 권한 섹션에서 하이퍼링크된 역할 이름을 선택하여 Lambda 함수에 Amazon Location Service 권한을 부여합니다.

  11. 역할의 요약 페이지에서 권한 추가를 선택한 다음 드롭다운 목록에서 인라인 정책 생성을 선택합니다.

  12. JSON탭을 선택하고 다음 문서로 정책을 덮어씁니다. 이를 통해 Lambda 함수는 모든 리전의 모든 트래커 리소스에서 관리하는 디바이스 위치를 업데이트할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "WriteDevicePosition", "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:*:*:tracker/*" } ] }
  13. 정책 검토를 선택합니다.

  14. 정책 이름을 입력합니다. 예: AmazonLocationTrackerWriteOnly.

  15. 정책 생성을 선택합니다.

필요에 따라 이 함수 코드를 수정하여 자체 디바이스 메시지 스키마에 맞게 조정할 수 있습니다.

규칙 만들기 AWS IoT Core

다음으로, 디바이스의 위치 텔레메트리를 AWS Lambda 함수로 전달하여 Amazon Location Service로 변환하여 게시하는 AWS IoT Core 규칙을 생성합니다. 제공된 예시 규칙은 필요한 디바이스 페이로드 변환이 Lambda 함수에서 처리된다고 가정합니다. AWS IoT Core 콘솔, AWS Command Line Interface (AWS CLI) 또는 를 통해 이 규칙을 생성할 수 있습니다. AWS IoT Core APIs

참고

AWS IoT 콘솔은 Lambda 함수 호출을 허용하는 AWS IoT Core 데 필요한 권한을 처리하지만, SDK OR에서 AWS CLI 규칙을 생성하는 경우 권한을 부여할 정책을 구성해야 합니다. AWS IoT

콘솔을 사용하여 AWS IoT Core 생성하려면

  1. 에서 AWS IoT Core 콘솔에 https://console.aws.amazon.com/iot/로그인합니다.

  2. 왼쪽 탐색에서 [작업]를 확장하고 [규칙]를 선택합니다.

  3. 규칙 생성을 선택하여 새 규칙 마법사를 시작합니다.

  4. 규칙의 이름과 설명을 입력합니다.

  5. 규칙 쿼리 문의 경우, 하나 이상의 디바이스에서 위치가 포함된 원격 측정을 게시하는 주제를 참조하도록 FROM 속성을 업데이트합니다. 솔루션을 테스트하는 경우에는 수정할 필요가 없습니다.

    SELECT * FROM 'iot/topic'
  6. 하나 이상의 작업 설정 에서 작업 추가를 선택합니다.

  7. 메시지를 Lambda 함수로 전송를 선택합니다.

  8. [Configure action]을 선택합니다.

  9. 목록에서 Lambda 함수 를 찾아 선택합니다.

  10. 작업 추가를 선택합니다.

  11. Create rule을 선택합니다.

콘솔에서 AWS IoT Core 규칙을 테스트하세요.

현재 위치가 포함된 원격 분석을 게시하는 장치가 없는 경우 AWS IoT Core 콘솔을 사용하여 규칙과 이 솔루션을 테스트할 수 있습니다. 콘솔에는 샘플 메시지를 게시하여 솔루션 결과를 확인할 수 있는 테스트 클라이언트가 있습니다.

  1. 에서 AWS IoT Core https://console.aws.amazon.com/iot/콘솔에 로그인합니다.

  2. 왼쪽 탐색 영역에서 테스트를 확장하고 MQTT 테스트 클라이언트를 선택합니다.

  3. 주제에 게시에서 주제 이름을 다음과 같이 설정합니다.iot/topic (또는 AWS IoT Core 규칙에 설정한 주제 이름 (다른 경우) 를 입력하고 메시지 페이로드에 다음을 제공하십시오. 타임스탬프를 교체하십시오.1604940328 최근 30일 이내의 유효한 타임스탬프로 표시합니다 (30일이 지난 타임스탬프는 무시됨).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. 테스트 메시지를 보내려면 주제 게시를 선택합니다.

  5. Amazon Location Service에서 메시지를 수신했는지 확인하려면 다음 AWS CLI 명령을 사용하세요. 설정 중에 수정한 경우 트래커 이름과 디바이스 ID를 사용했던 것으로 바꾸세요.

    aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123