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

#amazon-web-services #amazon-dynamodb

#amazon-web-services #amazon-dynamodb

Вопрос:

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

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

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

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

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

Ответ №1:

Вы определенно можете сделать это с помощью 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"
    }
  ]
}```
  

Ответ №2:

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

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