Есть ли способ сделать сравнительные обновления и запустить лямбда-функцию, если обновление прошло успешно? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу, чтобы функция AWS Lambda опрашивала удаленный API, а затем отправляла данные в таблицу DynamoDB каждые X минут.

Мне было интересно, есть ли способ попросить DynamoDB проверить наличие изменений и затем запустить функцию Lambda, если конкретное значение было изменено?

 'id': 1,
 'photo': 'photo.jpg',
 'name': 'Steve',
 'team': 'blue',

 'id': 1,
 'photo': 'photo.jpg',
 'name': 'Steve',
 'team': 'green',

Результат: значение команды изменилось на синий> зеленый, поэтому вызванная функция изменилась.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вы можете определенно сделать это с DynamoDB, создав триггер с типом потока New и Old Images, но DynamoDB не проверит запись за вас. Он просто отправит вам записи, которые были обновлены, новые, старые или оба. Возможно, у вас есть запись с такими же полями. Это не было бы идеально ... поэтому вам нужно защищаться от кода, помещаемого в таблицу, чтобы убедиться, что ничто не использует put_item, который перезаписывает запись с теми же данными. Ниже приведен пример события (фокус на новое и старое изображение, идентификатор события и версии и т. Д. Это просто фиктивные данные).

  "Records": [
    {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
        "OldImage": {
          "id": {
            "N": "1"
          },
          "name": {
            "S": "Steve"
          },
          "photo": {
            "S": "photo.jpg"
          },
          "team": {
            "S": "blue"
          }
        },
        "SequenceNumber": "222",
        "Keys": {
          "id": {
            "N": "1"
          }
        },
        "SizeBytes": 59,
        "NewImage": {
          "id": {
            "N": "1"
          },
          "name": {
            "S": "Steve"
          },
          "photo": {
            "S": "photo.jpg"
          },
          "team": {
            "S": "green"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "eu-west-1",
      "eventName": "MODIFY",
      "eventSourceARN": "arn:aws:dynamodb:eu-west-1:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899",
      "eventSource": "aws:dynamodb"
    }
  ]
}```
0 голосов
/ 28 марта 2019

Вы можете Захватить активность таблицы с помощью DynamoDB Streams и запускать функцию AWS Lambda при каждом обновлении данной таблицы DynamoDB.

Возможно, вы не сможете ее запустить only для 'change', но функция Lambda может добавить некоторую логику, чтобы реагировать только на измененное значение (в отличие от нового значения или удаленного значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...