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