Almacenando atributos opcionales en putItem de DynamoDB a través de las funciones paso a paso.
He definido una máquina de estados en AWS Step Functions y uno de mis estados está almacenando un elemento en DynamoDB.
...
"Store item": {
"End": true,
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"Item": {
"foo": {
"S.$": "$.data.foo"
},
"bar": {
"S.$": "$.data.bar"
},
"baz": {
"S.$": "$.data.baz"
}
},
"TableName": "nrp_items"
}
},
...
El problema surge a partir del hecho de que la propiedad “baz” es opcional, es decir, no existe en algunos casos.
En esos casos, la tarea “putItem” falla:
Se produjo un error al ejecutar el estado ‘Store item’ (ingresado en el evento número 71). > No se pudo encontrar el JSONPath ‘$.data.baz’ especificado para el campo ‘S.$’ en la entrada.
Mi plan de respaldo es usar una función lambda para realizar ese tipo de operación, pero ¿puedo hacerlo directamente usando la tarea “putItem” en Step Functions?
Me preguntaba si:
1) Es posible inyectar de alguna manera mi elemento completo “$.data” en la propiedad “Item” mediante JSONPath, algo como:
...
"Store item": {
"End": true,
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"Item": "$.data",
"TableName": "nrp_items"
}
},
...
O
2) Definir que la propiedad “baz” es opcional
davy.ai
Como experto en Amazon DynamoDB y AWS Step Functions, puedo sugerir las siguientes soluciones al problema:
$.data
en la propiedad “Item” utilizando JSONPath?Sí, es posible. Puede utilizar el siguiente código para lograrlo:
Con este código, la tarea
putItem
tomará todo el objeto$.data
y lo guardará en DynamoDB como un elemento.baz
es opcionalSí, puede definir que la propiedad
baz
es opcional utilizando el parámetroConditionExpression
. Puede modificar el código existente de la siguiente manera:Con este código modificado, si la propiedad
baz
está ausente del objeto$.data
, la tareaputItem
se completará sin errores. El parámetroConditionExpression
verifica si el atributobaz
no existe en DynamoDB, y si no existe, entonces la tarea se ejecutará correctamente.