Automatización de la entrega de eventos de Step Functions con EventBridge
Con EventBridge, puede seleccionar eventos de los flujos de trabajo estándar de Step Functions para enviarlos a otros servicios para procesamiento adicional. Esta técnica proporciona una forma flexible de conectar componentes de forma flexible y supervisar sus recursos.
Amazon EventBridge es un servicio sin servidor que conecta los componentes de las aplicaciones para construir aplicaciones escalables basadas en eventos. La arquitectura basada en eventos es un estilo de creación de sistemas de software de acoplamiento flexible que funcionan juntos emitiendo eventos y respondiendo a ellos. Los eventos representan un cambio de estado o una actualización.
Al utilizar EventBridge para enviar eventos de Step Functions a otros servicios, puede supervisar sus flujos de trabajo estándar sin tener que llamar continuamente a la API DescribeExecution para obtener el estado. Los cambios de estado en las ejecuciones de máquinas de estado se envían a EventBridge automáticamente. Puede utilizar esos eventos para segmentar los servicios. Por ejemplo, los eventos pueden invocar una función AWS Lambda, publicar un mensaje en un tema de Amazon Simple Notification Service (Amazon SNS) o incluso ejecutar otro flujo de trabajo de SFN.
Cómo funciona la entrega de eventos
Step Functions genera y envía eventos al bus de eventos predeterminado de EventBridge, que se aprovisiona automáticamente cada cuenta de AWS. Un bus de eventos es un enrutador que recibe eventos y los envía a cero o más destinos u objetivos. Los objetivos son otros servicios de AWS. Puede especificar reglas para el bus de eventos que comparen los eventos con el patrón de eventos de la regla. Cuando el evento coincide con un patrón, el bus de eventos envía el evento al o a los destinos especificados. El siguiente diagrama muestra este proceso:
Flujos de trabajo estándar frente a flujos de trabajo rápidos
Solo los flujos de trabajo estándar emiten eventos a EventBridge. Para supervisar la ejecución de un flujo de trabajo rápido, puede utilizar CloudWatch Logs. Consulte Registro en los registros de CloudWatch.
Eventos de Step Functions
Step Functions envía automáticamente los eventos siguientes al bus de eventos predeterminado de EventBridge. Los eventos que coinciden con el patrón de eventos de una regla se envían a los objetivos especificados en función del mejor esfuerzo. Es posible que los eventos se entreguen fuera de servicio.
Para obtener más información, consulte Eventos de EventBridge en la Guía del usuario de Amazon EventBridge.
Tipo de detalle del evento | Descripción |
---|---|
Representa un cambio en el estado de la ejecución de la máquina de estado. |
Entrega de eventos de Step Functions mediante EventBridge
Para que el bus de eventos predeterminado de EventBridge envíe los eventos de Step Functions a un destino, debe crear una regla. Cada regla contiene un patrón de eventos, que EventBridge compara con cada evento recibido en el bus de eventos. Si los datos del evento coinciden con el patrón de evento especificado, EventBridge entrega ese evento al o a los destinos de la regla.
Para obtener instrucciones detalladas sobre cómo crear reglas de bus de eventos, consulte Creación de reglas que reaccionan a eventos en la Guía del usuario de EventBridge.
También puede crear una regla de bus de eventos para una máquina de estado específica desde la consola de Step Functions:
En la página Detalles de una máquina de estado, elija Acciones y, a continuación, elija Crear regla de EventBridge.
La consola de EventBridge se abre en la página Crear regla, con la máquina de estado seleccionada como origen de eventos para la regla.
Siga el procedimiento detallado en Creación de reglas que reaccionen a los eventos de la Guía de usuario de EventBridge.
Creación de patrones de eventos que coincidan con los eventos de Step Functions
Cada patrón de eventos es un objeto JSON que contiene:
-
Un atributo
source
que identifica el servicio que envía el evento. Para los eventos de Step Functions, la fuente esaws.states
. -
(Opcional): un atributo
detail-type
que contiene una matriz de los tipos de eventos que deben coincidir. -
(Opcional): un atributo
detail
que contiene cualquier otro dato de evento con el que coincidir.
Por ejemplo, el siguiente patrón de evento coincide con todos los eventos de cambio de estado de ejecución de Step Functions:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"] }
Si bien el siguiente ejemplo coincide con una ejecución específica asociada a una máquina de estado específica, cuando esa ejecución falla o se agota el tiempo de espera:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED", "TIMED_OUT"], "stateMachineArn": ["arn:aws:states:us-east-1:123456789012:stateMachine:state-machine"], "executionArn": ["arn:aws:states:us-east-1:123456789012:execution:state-machine-name:execution-name"] } }
Para obtener más información sobre la escritura de los patrones de eventos, consulte Patrones de eventos en la Guía del usuario de EventBridge.
Activación de Step Functions usando eventos
También puede especificar una máquina de estado de Step Functions como destino para una regla del bus de eventos de EventBridge. Esto permite activar la ejecución de un flujo de trabajo de Step Functions en respuesta a un evento de otro servicio de AWS.
Para obtener más información, consulte Objetivos de Amazon EventBridge en la Guía del usuario de Amazon EventBridge.
Referencia detallada de los eventos de Step Functions
Todos los eventos de los servicios de AWS tienen un conjunto común de campos que contienen metadatos sobre el evento, como el servicio de AWS que es el origen del evento, la hora en que se generó el evento, la cuenta y la región en las que tuvo lugar el evento, etc. Para ver las definiciones de estos campos generales, consulte Event structure reference en la Guía del usuario de Amazon EventBridge.
Además, cada evento tiene un campo detail
que contiene datos específicos de ese evento en particular.
Al usar EventBridge para seleccionar y administrar eventos de Step Functions, es útil tener en cuenta lo siguiente:
-
El campo
source
para todos los eventos de Step Functions está establecido enaws.states
. -
El campo
detail-type
especifica el tipo de evento.Por ejemplo,
Step Functions Execution Status Change
. -
El campo
detail
contiene los datos específicos de ese evento en particular.
Para obtener más información sobre cómo construir patrones de eventos que permitan que las reglas coincidan con los eventos de Step Functions, consulte Patrones de eventos en la Guía del usuario de Amazon EventBridge.
Para obtener más información sobre los eventos y cómo EventBridge los procesa, consulte Amazon EventBridge events en la Guía del usuario de Amazon EventBridge.
Cambio de estado de ejecución
Representa un cambio en el estado de la ejecución de la máquina de estado.
Los campos source
y detail-type
se incluyen porque contienen valores específicos para los eventos de Step Functions. Para ver las definiciones de los demás campos de metadatos que se incluyen en todos los eventos, consulte la referencia a la estructura de eventos en la Guía del usuario de Amazon EventBridge.
Estructura de evento
{ . . ., "detail-type": "Step Functions Execution Status Change", "source"": "aws.states", . . ., "detail"": { "executionArn"" : "string", "input" : "string", "inputDetails" : { "included" : "boolean" }, "name" : "string", "output" : "string", "outputDetails" : { "included" : "boolean" }, "startDate" : "integer", "stateMachineArn" : "string", "stopDate" : "integer", "status" : "RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE" } }
Observaciones
Un evento de cambio de estado de ejecución puede contener una propiedad de entrada en su definición. Para algunos eventos, un evento de cambio de estado de ejecución también puede contener una propiedad de salida en su definición.
-
Si la combinación de entrada y salida especificadas como secuencias de escape que se envía a EventBridge supera los 248 KB, la entrada se excluye. Del mismo modo, si la salida especificada como secuencia de escape supera los 248 KB, la salida se excluye. Esto es resultado de las cuotas de eventos.
-
Puede determinar si una carga útil se ha truncado con las propiedades
inputDetails
youtputDetails
. Para obtener más información, consulte el tipo de datosCloudWatchEventsExecutionDataDetails
. -
Para flujos de trabajo estándar, utilice DescribeExecution para ver la entrada y salida completas.
DescribeExecution
no está disponible para flujos de trabajo rápidos. Si desea ver la entrada/salida completa, puede:Combinar su flujo de trabajo rápido con un flujo de trabajo estándar.
Utilizar los ARN de Amazon S3. Para obtener información acerca del uso de ARN, consulte Uso de los ARN de Amazon S3 en lugar de pasar cargas útiles de gran tamaño en Step Functions.
Ejemplos
ejemplo Cambio de estado de ejecución: ejecución iniciada
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "123456789012", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws::states:us-east-2:123456789012:stateMachine:state-machine", "name": "execution-name", "status": "RUNNING", "startDate": 1551225271984, "stopDate": null, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
ejemplo Cambio de estado de ejecución: ejecución realizada
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "123456789012", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:state-machine", "name": "execution-name", "status": "SUCCEEDED", "startDate": 1547148840101, "stopDate": 1547148840122, "input": "{}", "inputDetails": { "included": true }, "output": "\"Hello World!\"", "outputDetails": { "included": true } } }
ejemplo Cambio de estado de ejecución: error en la ejecución
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "123456789012", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:state-machine", "name": "execution-name", "status": "FAILED", "startDate": 1551225146847, "stopDate": 1551225151881, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }
ejemplo Cambio de estado de ejecución: tiempo de espera agotado
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "123456789012", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:state-machine", "name": "execution-name", "status": "TIMED_OUT", "startDate": 1551224926156, "stopDate": 1551224927157, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null
ejemplo Cambio de estado de ejecución: abortado
{ "version": "0", "id": "315c1398-40ff-a850-213b-158f73e60175", "detail-type": "Step Functions Execution Status Change", "source": "aws.states", "account": "123456789012", "time": "2019-02-26T19:42:21Z", "region": "us-east-2", "resources": [ "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name" ], "detail": { "executionArn": "arn:aws:states:us-east-2:123456789012:execution:state-machine-name:execution-name", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:state-machine", "name": "execution-name", "status": "ABORTED", "startDate": 1551225014968, "stopDate": 1551225017576, "input": "{}", "inputDetails": { "included": true }, "output": null, "outputDetails": null } }