La función de paso se define así:
{ "StartAt": "Decision_Maker", "States": { "Decision_Maker":{ "Type": "Choice", "Choices": [ { "Variable": "$.body.MyData", "StringEquals": "null", //that doesn't work :( "Next": "Run_Task1" }], "Default": "Run_Task2" }, "Run_Task1": { "Type": "Task", "Resource": "url_1", "Next": "Run_Task2" }, "Run_Task2": { "Type": "Task", "Resource": "url_2", "End": true } } }Básicamente es una elección entre 2 tareas. Los datos de entrada son así:
{ "body": { "prop1": "value1", "myData": { "otherProp": "value" } } }El problema es que a veces no hay myData en JSON. Así que la entrada puede venir así:
{ "body": { "prop1": "value1", "myData": null } }¿Cómo verifico si myData es nulo o no?
A partir de agosto de 2020, Amazon States Language ahora tiene una regla de elección isNull y isPresent . Con estos, puede verificar de forma nativa si hay un null o la existencia de una clave en la entrada de estado dentro de un estado Choice.
Ejemplo:
{ "Variable": "$.possiblyNullValue", "IsNull": true }El orden importa. Establezca " IsPresent": false primero, luego "IsNull": true , finalmente la comparación escalar al final.
"Check MyValue": { "Comment": "Check MyValue", "Type": "Choice", "Default": "ContinueWithMyValue", "Choices": [ { "Or": [ { "Variable": "$.MyValue", "IsPresent": false }, { "Variable": "$.MyValue", "IsNull": true }, { "Variable": "$.MyValue", "BooleanEquals": false } ], "Next": "HaltProcessing" }, { "Variable": "$.MyValue", "BooleanEquals": true, "Next": "ContinueWithMyValue" } ] },Según mi experiencia, Choice Type no puede lidiar con valores nulos. La mejor manera podría ser preprocesar su entrada usando un lambda en el primer estado y devolver el evento formateándolo como "nulo". El siguiente fragmento de código podría ayudar.
def lambda_handler(event, context): if event['body']['MyData']: return event else: event['body']['MyData']="null" return eventNota: Esto también maneja cadenas vacías.