От AWS IoT до DynamoDB с использованием Lambda - PullRequest
0 голосов
/ 30 октября 2018

Я работаю с AWS IoT. Я создаю Thing и использую MQTT для просмотра обновленного результата из Thing Shadow.

$ AWS / вещи / thing_name / тень / обновление

Это пример результата:

{"state": {
"desired": null,
"reported": {
  "ext_addr": "0x124b0013a4c55d",
  "last_reported": "22:20:35 2018-10-30",
  "objects": {
    "temperature": {
      "0": {
        "oid": "temperature",
        "sensorValue": 33,
        "units": "Cels",
        "minMeaValue": 33,
        "maxMeaValue": 33
      }
    }
  }
}

Я хочу сохранить "last_reported", "objects" в отдельных столбцах в DynamoDB, используя Rule для вызова функции Lambda. Однако я застрял на этапе программирования функции Lambda.

В таблице должны быть такие предметы, как:

sensor_id = $ {topic (3)}

last_reported = ВЫБРАТЬ state.reported.last_reported FROM '$ aws / things / thing_name / shadow / update'

data = ВЫБРАТЬ state.reported.objects ОТ '$ aws / things / thing_name / shadow / update'

Заранее спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

Хотя вы можете использовать лямбда-правило для хранения данных IoT в динамо, AWS IoT включает в себя правило прямого подключения к динамо, которое, я думаю, будет гораздо проще, если вы не будете много программировать опыт:

Создать действие DynamoDBv2 со следующим определением:

{
    "rule": {
        "ruleDisabled": false, 
        "sql": "SELECT payload.state.reported, topic(3) AS sensor_id FROM '$aws/things/+/shadow/update/accepted'", 
        "description": "A test DynamoDBv2 rule", 
        "actions": [{
            "dynamoDBv2": {
                "roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2", 
                "putItem": {
                    "tableName": "my_ddb_table"
                }
             }
        }]
    }
}

Где:

  • arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2 - это роль IAM который может положить предмет в вашу таблицу динамо
  • my_ddb_table имя таблицы для сохранения данных в
...