AWS StepFunctions admite un modelo de devolución de llamada. La documentación dice:
Las tareas de devolución de llamada proporcionan una forma de pausar un flujo de trabajo hasta que se devuelva un token de tarea. Es posible que una tarea deba esperar la aprobación humana, integrarse con un tercero o llamar a sistemas heredados. Para tareas como estas, puede pausar Step Functions indefinidamente y esperar a que se complete un proceso o flujo de trabajo externo. Para estas situaciones, Step Functions le permite pasar un token de tarea a algunos servicios integrados. La tarea se detendrá hasta que reciba ese token de tarea con una llamada SendTaskSuccess o SendTaskFailure.
Si una máquina de estado se define usando CDK para llamar a una lambda como parte de un mapa de función de paso (es decir, está en un bucle):
LambdaInvoke myLambdaStepFunction = LambdaInvoke.Builder.create(this, "MyLambdaStepFunction ") .lambdaFunction(myLambdaFunction) .integrationPattern(IntegrationPattern.WAIT_FOR_TASK_TOKEN) .build(); stepfunctions.Map loopSteps = stepfunctions.Map.Builder.create(this, "LambdaLoop") .maxConcurrency(1) .build(); loopSteps.iterator(myLambdaStepFunction); StateMachine stateMachine = StateMachine.Builder.create(this, "StateMachine") .stateMachineType(StateMachineType.STANDARD) .timeout(Duration.minutes(5)) .definition(deployAllIncrementallySteps) .build();¿Cuándo ocurre la espera de token?
La espera del token se produce después de que se haya ejecutado Lambda con la integración IntegrationPattern.WAIT_FOR_TASK_TOKEN . Aquí está el patrón:
$.token y el resto de la entrada en $.input : LambdaInvoke myLambdaStep= LambdaInvoke.Builder.create(this, "MyLambdaStep") .lambdaFunction(myLambdaFunction) .integrationPattern(IntegrationPattern.WAIT_FOR_TASK_TOKEN) .payload(TaskInput.fromObject(Map.of("token", JsonPath.getTaskToken(), "input", JsonPath.stringAt("$.input")))) .build(); Dentro de su función Lambda, usted es responsable de analizar el token del evento y pasar este token a algún agente externo: en algún momento, ese agente debe llamar a sendTaskSuccess o sendTaskFailure con ese token para indicar que el trabajo que lleva a cabo ese agente Esta completo. El agente externo puede ser cualquier cosa (otro Lambda, un servidor EC2 que hace algún trabajo por usted, un webhook externo, cualquier cosa; solo necesita volver a llamar a AWS cuando finalice su trabajo).
Cuando AWS recibe la llamada de su agente, llamará al siguiente paso apropiado en su máquina de pasos, según la llamada exitosa o fallida realizada por el agente.