Descubra los patrones de integración de servicios en Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Descubra los patrones de integración de servicios en Step Functions

AWS Step Functions se integra con los servicios directamente en el idioma de los Estados de Amazon. Puedes controlarlos AWS servicios que utilizan tres patrones de integración de servicios:

  • Llama a un servicio y deja que Step Functions pase al siguiente estado inmediatamente después de recibir una HTTP respuesta.

  • Llame a un servicio y haga que Step Functions espere a que finalice un trabajo.

  • Llame a un servicio con un token de tarea y haga que Step Functions espere hasta que se devuelva dicho token con una carga.

Cada uno de estos patrones de integración de servicios está controlado por la forma en que se crea un patrón URI en el "Resource" campo de la definición de la tarea.

Para obtener información sobre la configuración AWS Identity and Access Management (IAM) para servicios integrados, consulteCómo Step Functions genera IAM políticas para servicios integrados.

Compatibilidad con patrones de integración

Los flujos de trabajo estándar y los flujos de trabajo rápidos admiten las mismas integraciones pero no los mismos patrones de integración.

  • Los flujos de trabajo estándar admiten las integraciones de solicitudes y respuestas. Algunos servicios admiten Run a Job (.sync) o Wait for Callback (. waitForTaskToken) y, en algunos casos, ambas cosas. Consulte la siguiente tabla de integraciones optimizadas para obtener más información.

  • Express Workflows solo admite integraciones de solicitudes y respuestas.

Para ayudarle a decidir entre los dos tipos, consulteElegir el tipo de flujo de trabajo en Step Functions.

AWS SDKintegraciones en Step Functions

Servicio de integrado Respuesta de la solicitud Ejecutar un trabajo - .sync Espere a que Callback -. waitForTaskSímbolo
Más de doscientos servicios Estándar y exprés No compatible Estándar

Integraciones optimizadas en Step Functions

Servicio de integrado Respuesta de la solicitud Ejecutar un trabajo - .sync Espere a que Callback -. waitForTaskSímbolo
Amazon API Gateway Estándar y exprés No compatible Estándar
Amazon Athena Estándar y exprés Estándar No compatible
AWS Batch Estándar y exprés Estándar No compatible
Amazon Bedrock Estándar y exprés Estándar Estándar
AWS CodeBuild Estándar y exprés Estándar No compatible
Amazon DynamoDB Estándar y exprés No admitido No admitido
Amazon ECS/Fargate Estándar y exprés Estándar Estándar
Amazon EKS Estándar y exprés Estándar Estándar
Amazon EMR Estándar y exprés Estándar No compatible
Amazon EMR on EKS Estándar y exprés Estándar No compatible
Amazon EMR Serverless Estándar y exprés Estándar No compatible
Amazon EventBridge Estándar y exprés No compatible Estándar
AWS Glue Estándar y exprés Estándar No compatible
AWS Glue DataBrew Estándar y exprés Estándar No compatible
AWS Lambda Estándar y exprés No compatible Estándar
AWS Elemental MediaConvert Estándar y exprés Estándar No compatible
Amazon SageMaker Estándar y exprés Estándar No compatible
Amazon SNS Estándar y exprés No compatible Estándar
Amazon SQS Estándar y exprés No compatible Estándar
AWS Step Functions Estándar y exprés Estándar Estándar

Respuesta de la solicitud

Si especificas un servicio en la "Resource" cadena del estado de la tarea y solo proporcionas el recurso, Step Functions esperará una HTTP respuesta y pasará al siguiente estado. Step Functions no esperará a que se complete un trabajo.

El siguiente ejemplo muestra cómo puedes publicar un SNS tema de Amazon.

"Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":"Hello from Step Functions!" }, "Next":"NEXT_STATE" }

Este ejemplo hace referencia a Publish API of AmazonSNS. El flujo de trabajo pasa al siguiente estado después de llamar al PublishAPI.

sugerencia

Para implementar un flujo de trabajo de muestra que utilice el patrón de integración del servicio Request Response en su Cuenta de AWS, consulte el módulo 2: Solicitud de respuesta de The AWS Step Functions Taller.

Ejecutar un trabajo (.sync)

Para servicios integrados como AWS Batch y AmazonECS, Step Functions puede esperar a que se complete una solicitud antes de pasar al siguiente estado. Para que Step Functions espere, especifique el "Resource" campo en la definición del estado de la tarea con el .sync sufijo adjunto después del recurso. URI

Por ejemplo, al enviar un AWS Batch trabajo, utilice el "Resource" campo de la definición de la máquina de estados como se muestra en este ejemplo.

"Manage Batch task": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition", "JobName": "testJob", "JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue" }, "Next": "NEXT_STATE" }

Si la .sync parte se adjunta al recurso Amazon Resource Name (ARN), Step Functions espera a que se complete el trabajo. Después de llamar AWS Batch submitJob, el flujo de trabajo se detiene. Cuando finaliza el trabajo, Step Functions avanza al siguiente estado. Para obtener más información, consulte la AWS Batch proyecto de muestra:Gestione un trabajo por lotes con AWS Batch y Amazon SNS.

Si se anula una tarea que utiliza este patrón de integración de servicios (.sync) y Step Functions no puede cancelarla, es posible que se incurra en cargos adicionales por el servicio integrado. Una tarea se puede anular si:

  • La ejecución de la máquina de estado se detiene.

  • Una ramificación diferente de un estado Parallel produce un error no detectado.

  • La iteración de un estado de Map produce un error no detectado.

Step Functions hará todo lo posible por cancelar la tarea. Por ejemplo, si se anula una states:startExecution.sync tarea de Step Functions, se llamará a la StopExecution API acción Step Functions. Sin embargo, es posible que Step Functions no pueda cancelar la tarea. Entre los motivos se incluyen, entre otros:

  • Su función IAM de ejecución carece de permiso para realizar la API llamada correspondiente.

  • Se produjo una interrupción temporal del servicio.

Cuando utiliza el patrón de integración de servicios .sync, Step Functions utiliza sondeos que consumen la cuota y los eventos asignados para supervisar el estado de un trabajo. Para .sync las invocaciones dentro de la misma cuenta, Step Functions utiliza EventBridge los eventos y sondea los APIs que especifique en el Task estado. Para las invocaciones .sync entre cuentas, Step Functions solo utiliza sondeos. Por ejemplostates:StartExecution.sync, Step Functions realiza sondeos sobre la cuota asignada DescribeExecutionAPIy la utiliza.

sugerencia

Para implementar un flujo de trabajo de muestra que utilice el patrón de integración del servicio Run a Job (.sync) en su Cuenta de AWS, consulte el Módulo 3 - Run a Job (.sync) de The AWS Step Functions Taller.

Para ver una lista de los servicios integrados que admiten la espera para que finalice un trabajo (.sync), consulte Integración de servicios con Step Functions.

nota

Las integraciones de servicios que utilizan los .waitForTaskToken patrones .sync o requieren IAM permisos adicionales. Para obtener más información, consulte Cómo Step Functions genera IAM políticas para servicios integrados.

En algunos casos, es posible que desee que Step Functions continúe con el flujo de trabajo antes de que el trabajo finalice por completo. Puede lograrlo de la misma manera que cuando utiliza el patrón de integración de servicios Espera a que te devuelvan la llamada con el token de tarea. Para ello, pasa un token de tarea a tu trabajo y devuélvelo mediante una SendTaskFailureAPIllamada SendTaskSuccesso. Step Functions utilizará los datos que proporcione en esa llamada para completar la tarea, dejar de supervisar el trabajo y continuar con el flujo de trabajo.

Espera a que te devuelvan la llamada con el token de tarea

Las tareas de devolución de llamada proporcionan una forma de detener un flujo de trabajo hasta que se devuelva un token de tarea. Una tarea podría tener que esperar la aprobación por parte de una persona, integrarse con un tercero o llamar a sistemas heredados. Para tareas como estas, puede pausar Step Functions hasta que la ejecución del flujo de trabajo alcance la cuota de servicio de un año (consulte Cuotas relacionadas con la limitación controlada de estados) y esperar a que se complete un proceso o flujo de trabajo externo. En estas situaciones, Step Functions te permite pasar un token de tarea al AWS SDKintegraciones de servicios y también a algunas integraciones de servicios optimizadas. La tarea se detendrá hasta que se reciba dicho token de tarea de nuevo con una llamada SendTaskSuccess o SendTaskFailure.

Si se agota el tiempo de espera de un estado Task que utiliza el token de tarea de devolución de llamada, se genera un nuevo token aleatorio. Puede acceder a los tokens de tarea desde el objeto context.

nota

El token de tarea debe contener al menos un carácter y no puede superar los 1024 caracteres.

Para usar con un .waitForTaskToken AWS SDKpara la integración, la API que utilices debe tener un campo de parámetros en el que colocar el token de la tarea.

nota

Debes pasar los identificadores de tareas de los directores dentro de la misma AWS account. Las fichas no funcionarán si las envías desde los directores de una forma diferente AWS account.

sugerencia

Para implementar un ejemplo de flujo de trabajo que utilice un patrón de integración de servicios de token de tareas de devolución de llamadas en su Cuenta de AWS, consulte el Módulo 4: Espere una devolución de llamada con el token de tarea de The AWS Step Functions Taller.

Para ver una lista de los servicios integrados que admiten la espera de un token de tarea (.waitForTaskToken), consulte Integración de servicios con Step Functions.

Ejemplo de token de tarea

En este ejemplo, un flujo de trabajo de Step Functions debe integrarse con un microservicio externo para realizar una comprobación de crédito como parte de un flujo de trabajo de aprobación. Step Functions publica un SQS mensaje de Amazon que incluye un token de tarea como parte del mensaje. Un sistema externo se integra con Amazon SQS y retira el mensaje de la cola. Cuando dicho proceso haya terminado, devuelve el resultado y el token de tarea original. Posteriormente, Step Functions continúa con su flujo de trabajo.

SQStarea esperando a que se devuelva un token de tarea

El "Resource" campo de la definición de tarea que hace referencia a Amazon SQS incluye .waitForTaskToken un anexo al final.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Este indica a Step Functions que se detenga y espere el token de tarea. Cuando se especifica un recurso con .waitForTaskToken, se puede acceder al token de tarea en el campo "Parameters" de la definición de estado con una designación de ruta especial ($$.Task.Token). La $$. inicial designa que la ruta accede al objeto context y obtiene el token de tarea para la tarea actual en una ejecución en curso.

Cuando finalice, el servicio externo llama a SendTaskSuccess o SendTaskFailure con el taskToken incluido. Solo entonces el flujo de trabajo avanza al siguiente estado.

nota

Para evitar la espera de forma indefinida si un proceso no envía el token de tarea con SendTaskSuccess o SendTaskFailure, consulte Cómo configurar un tiempo de espera de latido para una tarea en espera.

Cómo obtener un token del objeto context

El objeto de contexto es un JSON objeto interno que contiene información sobre su ejecución. Al igual que la entrada de estado, se puede acceder con una ruta desde el campo "Parameters" durante una ejecución. Al obtener acceso desde una definición de tarea, incluye información acerca de la ejecución específica, incluido el token de tarea.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }

Puede acceder al token de tarea mediante una ruta especial desde dentro del campo "Parameters" de la definición de tarea. Para acceder a la entrada o al objeto context, especifique primero que el parámetro será una ruta añadiendo un .$ al nombre del parámetro. El siguiente ejemplo especifica los nodos de la entrada y del objeto context en una especificación de "Parameters".

"Parameters": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" },

En ambos casos, la adición de .$ al nombre del parámetro indica a Step Functions que espere una ruta. En el primer caso, "$" es una ruta que incluye toda la entrada. En el segundo caso, $$. especifica que la ruta accederá al objeto context y $$.Task.Token establece el parámetro en el valor del token de tarea en el objeto context de una ejecución en curso.

En el SQS ejemplo de Amazon, .waitForTaskToken en el "Resource" campo se indica a Step Functions que espere a que se devuelva el token de la tarea. El "TaskToken.$": "$$.Task.Token" parámetro transfiere ese token como parte del SQS mensaje de Amazon.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Para obtener más información acerca del objeto context, consulte Objeto Context (Contexto) en la sección Procesamiento de entrada y salida de esta guía.

Cómo configurar un tiempo de espera de latido para una tarea en espera

Una tarea que está a la espera de un token de tarea esperará hasta que la ejecución alcance la cuota de servicio de un año (consulte Cuotas relacionadas con la limitación controlada de estados). Para evitar que las ejecuciones se bloqueen, puede configurar un intervalo de tiempo de espera de latido en la definición de máquina de estado. Utilice el campo HeartbeatSeconds para especificar el intervalo de tiempo de espera.

{ "StartAt": "Push to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } } }

En esta definición de máquina de estados, una tarea envía un mensaje a Amazon SQS y espera a que un proceso externo vuelva a llamar con el token de tarea proporcionado. El campo "HeartbeatSeconds": 600 establece el intervalo de tiempo de espera de latido en 10 minutos. La tarea esperará a que se devuelva el token de la tarea con una de estas API acciones:

Si la tarea en espera no recibe un token de tarea válido dentro de ese periodo de 10 minutos, se produce un error con el nombre States.Timeout en la tarea.

Para obtener más información, consulte el proyecto de ejemplo de devolución de llamada Ejemplo de creación de un patrón de devolución de llamada con Amazon SQSSNS, Amazon y Lambda.