javascript - Cómo obtener solo la diferencia/modificaciones en los streams de DynamoDB
Tengo un caso de uso en el que necesito entender la diferencia entre NEW_IMAGE y OLD_IMAGE en los streams de DynamoDB.
Según
https://aws.amazon.com/blogs/database/dynamodb-streams-use-cases-and-design-patterns/
DynamoDB Streams supports the following stream record views:
KEYS_ONLY—Only the key attributes of the modified item
NEW_IMAGE—The entire item, as it appears after it was modified
OLD_IMAGE—The entire item, as it appears before it was modified
NEW_AND_OLD_IMAGES—Both the new and the old images of the item
No puedo registrarme para escuchar en IMAGE_DIFFERENCE o similar.
Entonces, ¿cuál es la mejor manera de lograr eso (preferiblemente un ejemplo en JavaScript/TypeScript)?
Respuesta #1
tu única opción es escuchar en NEW_AND_OLD_IMAGES y diferenciarlo tú mismo. si AWS implementara una vista tipo IMAGE_DIFFERENCE, necesitaría alguna notación especial para decirte qué entradas fueron eliminadas y cuáles fueron agregadas. ese procesamiento aumentaría la latencia asociada con los flujos y puede que no sea adecuado para suficientes casos de uso como para que construirlo sea factible.
Respuesta #2
Usar unmarshall y json-diff hace el truco:
npm i json-diffconst { unmarshall } = require("@aws-sdk/util-dynamodb");
const jsonDiff = require('json-diff');
exports.handler = async (event) => {
console.log(JSON.stringify(event));
const dynamoDBEvent = event.Records[0].dynamodb;
const newImage = unmarshall(dynamoDBEvent.NewImage);
const oldImage = unmarshall(dynamoDBEvent.OldImage);
const diff = jsonDiff.diffString(oldImage, newImage)
console.log(diff);
return 'done';
};
