Logotipo de Zephyrnet

Cree canalizaciones ETL eficientes con la función de redirección y mapa distribuido de AWS Step Functions | Servicios web de Amazon

Fecha:

Funciones de paso de AWS es un servicio de flujo de trabajo visual totalmente administrado que le permite crear procesos de procesamiento de datos complejos que involucran un conjunto diverso de tecnologías de extracción, transformación y carga (ETL), como Pegamento AWS, EMR de Amazony Desplazamiento al rojo de Amazon. Puede crear visualmente el flujo de trabajo conectando tareas de canalización de datos individuales y configurando cargas útiles, reintentos y manejo de errores con un código mínimo.

Si bien Step Functions admite reintentos automáticos y manejo de errores cuando las tareas de canalización de datos fallan debido a errores momentáneos o transitorios, puede haber fallas permanentes, como permisos incorrectos, datos no válidos y fallas de lógica empresarial durante la ejecución de la canalización. Esto requiere que identifique el problema en el paso, solucione el problema y reinicie el flujo de trabajo. Anteriormente, para volver a ejecutar el paso fallido, era necesario reiniciar todo el flujo de trabajo desde el principio. Esto provoca retrasos en la finalización del flujo de trabajo, especialmente si se trata de un proceso ETL complejo y de larga duración. Si la tubería tiene muchos pasos que utilizan mapas y estados paralelos, esto también genera un mayor costo debido a los aumentos en la transición de estado para ejecutar la tubería desde el principio.

Step Functions ahora admite la capacidad de redirigir su flujo de trabajo desde un estado fallido, abortado o con tiempo de espera agotado para que pueda completar los flujos de trabajo más rápido y a un menor costo, y dedicar más tiempo a generar valor comercial. Ahora puede recuperarse más rápido de fallas no controladas al volver a generar ejecuciones de flujo de trabajo fallidas, después de que se resuelvan los problemas posteriores, utilizando la misma entrada proporcionada para el estado fallido.

En esta publicación, le mostramos un trabajo de canalización ETL que exporta datos desde Servicio de base de datos relacional de Amazon (Amazon RDS) tablas que utilizan las funciones de paso estado del mapa distribuido. Luego simulamos una falla y demostramos cómo usar la nueva función de redireccionamiento para reiniciar la tarea fallida desde el punto de falla.

Resumen de la solución

Una de las funcionalidades comunes involucradas en las canalizaciones de datos es extraer datos de múltiples fuentes de datos y exportarlos a un lago de datos o sincronizarlos con otra base de datos. Puede utilizar el estado del mapa distribuido de Step Functions para ejecutar cientos de estos trabajos de exportación o sincronización en paralelo. El mapa distribuido puede leer millones de objetos de Servicio de almacenamiento simple de Amazon (Amazon S3) o millones de registros de un único objeto S3 y distribuir los registros a pasos posteriores. Step Functions ejecuta los pasos dentro del mapa distribuido como flujos de trabajo secundarios con un paralelismo máximo de 10,000 10,000. Una simultaneidad de 1,000 XNUMX está muy por encima de la simultaneidad admitida por muchos otros servicios de AWS, como AWS Glue, que tiene un límite flexible de XNUMX ejecuciones de trabajos por trabajo.

El canal de datos de muestra obtiene datos del catálogo de productos de Amazon DynamoDB y datos de pedidos de clientes de Amazon RDS para PostgreSQL base de datos. Luego, los datos se limpian, transforman y se cargan en Amazon S3 para su posterior procesamiento. El proceso de datos comienza con un Rastreador de AWS Glue para crear el catálogo de datos para la base de datos RDS. Dado que el inicio de un rastreador de AWS Glue es asíncrono, la canalización tiene un bucle de espera para comprobar si el rastreador está completo. Una vez completado el rastreador de AWS Glue, la canalización extrae datos de la tabla de DynamoDB y de las tablas RDS. Debido a que estos dos pasos son independientes, se ejecutan como pasos paralelos: uno usando un AWS Lambda función para exportar, transformar y cargar los datos de DynamoDB a un depósito S3, y el otro utiliza un mapa distribuido con Integración de sincronización de trabajos de AWS Glue hacer lo mismo desde las tablas RDS a un depósito S3. Tenga en cuenta que Gestión de identidades y accesos de AWS (IAM) se requieren permisos para invocar un trabajo de AWS Glue desde Step Functions. Para obtener más información, consulte Políticas de IAM para invocar trabajos de AWS Glue desde Step Functions.

El siguiente diagrama ilustra el flujo de trabajo de Step Functions.

Hay varias tablas relacionadas con clientes y datos de pedidos en la base de datos RDS. Amazon S3 aloja los metadatos de todas las tablas como un archivo .csv. La canalización utiliza el mapa distribuido de Step Functions para leer los metadatos de la tabla de Amazon S3, iterar en cada elemento y llamar al trabajo descendente de AWS Glue en paralelo para exportar los datos. Vea el siguiente código:

"States": {
            "Map": {
              "Type": "Map",
              "ItemProcessor": {
                "ProcessorConfig": {
                  "Mode": "DISTRIBUTED",
                  "ExecutionType": "STANDARD"
                },
                "StartAt": "Export data for a table",
                "States": {
                  "Export data for a table": {
                    "Type": "Task",
                    "Resource": "arn:aws:states:::glue:startJobRun.sync",
                    "Parameters": {
                      "JobName": "ExportTableData",
                      "Arguments": {
                        "--dbtable.$": "$.tables"
                      }
                    },
                    "End": true
                  }
                }
              },
              "Label": "Map",
              "ItemReader": {
                "Resource": "arn:aws:states:::s3:getObject",
                "ReaderConfig": {
                  "InputType": "CSV",
                  "CSVHeaderLocation": "FIRST_ROW"
                },
                "Parameters": {
                  "Bucket": "123456789012-stepfunction-redrive",
                  "Key": "tables.csv"
                }
              },
              "ResultPath": null,
              "End": true
            }
          }

Requisitos previos

Para implementar la solución, necesita los siguientes requisitos previos:

Lanzar la plantilla de CloudFormation

Complete los siguientes pasos para implementar los recursos de la solución mediante AWS CloudFormation:

  1. Elige Pila de lanzamiento para iniciar la pila de CloudFormation:
  2. Ingrese un nombre de pila.
  3. Seleccione todas las casillas de verificación debajo Capacidades y transformaciones.
  4. Elige Crear pila.

La plantilla de CloudFormation crea muchos recursos, incluidos los siguientes:

  • La canalización de datos descrita anteriormente como un flujo de trabajo de Step Functions
  • Un bucket de S3 para almacenar los datos exportados y los metadatos de las tablas en Amazon RDS
  • Una tabla de catálogo de productos en DynamoDB
  • Una instancia de base de datos RDS para PostgreSQL con tablas precargadas
  • Un rastreador de AWS Glue que rastrea la tabla RDS y crea un catálogo de datos de AWS Glue
  • Un trabajo de AWS Glue parametrizado para exportar datos de la tabla RDS a un depósito de S3
  • Una función Lambda para exportar datos de DynamoDB a un depósito S3

Simular el fracaso

Complete los siguientes pasos para probar la solución:

  1. En la consola Step Functions, elija Máquinas de estado en el panel de navegación.
  2. Elija el flujo de trabajo llamado ETL_Process.
  3. Ejecute el flujo de trabajo con la entrada predeterminada.

Al cabo de unos segundos, el flujo de trabajo falla en el estado del mapa distribuido.

Puede inspeccionar los errores de ejecución del mapa accediendo a los eventos de ejecución del flujo de trabajo de Step Functions para ejecuciones de mapas y flujos de trabajo secundarios. En este ejemplo, puede identificar que la excepción se debe a Glue.ConcurrentRunsExceededException de AWS Glue. El error indica que hay más solicitudes simultáneas para ejecutar un trabajo de AWS Glue de las que están configuradas. El mapa distribuido lee los metadatos de la tabla de Amazon S3 e invoca tantos trabajos de AWS Glue como el número de filas del archivo .csv, pero el trabajo de AWS Glue se configura con la simultaneidad de 3 cuando se crea. Esto provocó un error en el flujo de trabajo secundario, lo que provocó que el error pasara al estado de mapa distribuido y luego al estado paralelo. El otro paso en el estado paralelo para recuperar la tabla de DynamoDB se ejecutó correctamente. Si falla algún paso en el estado paralelo, falla todo el estado, como se ve en el fallo en cascada.

Manejar fallas con mapa distribuido

De forma predeterminada, cuando un estado informa un error, Step Functions hace que el flujo de trabajo falle. Hay varias formas de manejar este error con el estado del mapa distribuido:

  • Step Functions le permite detectar errores, reintentar errores y realizar recuperación a otro estado para manejar los errores con gracia. Vea el siguiente código:
    Retry": [
                          {
                            "ErrorEquals": [
                              "Glue.ConcurrentRunsExceededException "
                            ],
                            "BackoffRate": 20,
                            "IntervalSeconds": 10,
                            "MaxAttempts": 3,
                            "Comment": "Exception",
                            "JitterStrategy": "FULL"
                          }
                        ]
    

  • A veces, las empresas pueden tolerar los fracasos. Esto es especialmente cierto cuando procesa millones de elementos y espera problemas de calidad de los datos en el conjunto de datos. De forma predeterminada, cuando falla una iteración del estado del mapa, todas las demás iteraciones se cancelan. Con el mapa distribuido, puede especificar el número máximo o el porcentaje de elementos fallidos como umbral de error. Si el error está dentro del nivel tolerable, el mapa distribuido no falla.
  • El estado del mapa distribuido le permite controlar la simultaneidad de los flujos de trabajo secundarios. Puede configurar la simultaneidad para asignarla a la simultaneidad del trabajo de AWS Glue. Recuerde, esta simultaneidad se aplica solo en el nivel de ejecución del flujo de trabajo, no entre ejecuciones de flujo de trabajo.
  • Puede redireccionar el estado fallido desde el punto de falla después de corregir la causa raíz del error.

Redireccionar el estado fallido

La causa principal del problema en la solución de muestra es la simultaneidad de trabajos de AWS Glue. Para solucionar este problema volviendo a generar el estado fallido, complete los siguientes pasos:

  1. En la consola de AWS Glue, navegue hasta el trabajo denominado ExportsTableData.
  2. En Detalles del trabajo pestaña, debajo Propiedades avanzadasactualizar Simultaneidad máxima a 5.

Con el lanzamiento de la función redrive, puede utilizar redrive para reiniciar las ejecuciones de flujos de trabajo estándar que no se completó exitosamente en los últimos 14 días. Estos incluyen ejecuciones fallidas, abortadas o con tiempo de espera agotado. Solo puede redireccionar un flujo de trabajo fallido desde el paso en el que falló utilizando la misma entrada que el último estado fallido. No se puede redireccionar un flujo de trabajo fallido utilizando una definición de máquina de estado que sea diferente de la ejecución del flujo de trabajo inicial. Una vez que el estado fallido se redirige exitosamente, Step Functions ejecuta todas las tareas posteriores automáticamente. Para obtener más información sobre cómo funciona la redirección de mapas distribuidos, consulte Redireccionamiento de ejecuciones de mapas.

Debido a que el mapa distribuido ejecuta los pasos dentro del mapa como flujos de trabajo secundarios, la función de ejecución de IAM del flujo de trabajo necesita permiso para volver a ejecutar la ejecución del mapa y reiniciar el estado del mapa distribuido:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:RedriveExecution"
      ],
      "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachine/myMapRunLabel:*"
    }
  ]
}

Puede redirigir un flujo de trabajo desde su paso fallido mediante programación, a través del Interfaz de línea de comandos de AWS (CLI de AWS) o SDK de AWS, o utilizando la consola de Step Functions, que proporciona una experiencia de operador visual.

  1. En la consola de Step Functions, navegue hasta el flujo de trabajo fallido que desea volver a gestionar.
  2. En Detalles pestaña, elegir Redirigir desde el fracaso.

La canalización ahora se ejecuta correctamente porque hay suficiente simultaneidad para ejecutar los trabajos de AWS Glue.

Para redirigir un flujo de trabajo mediante programación desde su punto de falla, llame al nueva API de ejecución de Redrive acción. El mismo flujo de trabajo comienza desde el último estado fallido y utiliza la misma entrada que el último estado fallido del flujo de trabajo fallido inicial. El estado para redirigir desde la definición del flujo de trabajo y la entrada anterior son inmutables.

Tenga en cuenta lo siguiente con respecto a los diferentes tipos de flujos de trabajo secundarios:

  • Redrive para flujos de trabajo secundarios rápidos – Para flujos de trabajo secundarios fallidos que son flujos de trabajo rápidos dentro de un mapa distribuido, la capacidad de redireccionamiento garantiza un reinicio perfecto desde el comienzo del flujo de trabajo secundario. Esto le permite resolver problemas específicos de iteraciones individuales sin reiniciar todo el mapa.
  • Redrive para flujos de trabajo secundarios estándar – Para flujos de trabajo secundarios fallidos dentro de un mapa distribuido que son flujos de trabajo estándar, la función de redireccionamiento funciona de la misma manera que con los flujos de trabajo estándar independientes. Puede reiniciar el estado fallido dentro de cada iteración del mapa desde su punto de falla, omitiendo pasos innecesarios que ya se ejecutaron exitosamente.

Puedes usar Notificaciones de cambio de estado de Step Functions Puente de eventos de Amazon para notificaciones de fallas, como enviar un correo electrónico en caso de falla.

Limpiar

Para limpiar sus recursos, elimine la pila de CloudFormation a través de la consola de AWS CloudFormation.

Conclusión

En esta publicación, le mostramos cómo utilizar la función de redireccionamiento de Step Functions para redireccionar un paso fallido dentro de un mapa distribuido reiniciando el paso fallido desde el punto de falla. El estado del mapa distribuido le permite escribir flujos de trabajo que coordinen cargas de trabajo paralelas a gran escala dentro de sus aplicaciones sin servidor. Step Functions ejecuta los pasos dentro del mapa distribuido como flujos de trabajo secundarios con un paralelismo máximo de 10,000 XNUMX, que está muy por encima de la simultaneidad admitida por muchos servicios de AWS.

Para obtener más información sobre el mapa distribuido, consulte Funciones de paso: mapa distribuido. Para obtener más información sobre cómo volver a generar flujos de trabajo, consulte Redirección de ejecuciones.


Acerca de los autores

Sriharsh Adari es arquitecto senior de soluciones en Amazon Web Services (AWS), donde ayuda a los clientes a trabajar en retrospectiva a partir de los resultados comerciales para desarrollar soluciones innovadoras en AWS. A lo largo de los años, ha ayudado a múltiples clientes en transformaciones de plataformas de datos en sectores verticales de la industria. Su área principal de especialización incluye estrategia tecnológica, análisis de datos y ciencia de datos. En su tiempo libre le gusta jugar al tenis.

joe morotti es arquitecto senior de soluciones en Amazon Web Services (AWS) y trabaja con clientes empresariales en todo el Medio Oeste de EE. UU. para desarrollar soluciones innovadoras en AWS. Ha desempeñado una amplia gama de funciones técnicas y le gusta mostrar a los clientes el arte de lo posible. Ha obtenido siete certificaciones de AWS y le apasiona la IA/ML y el espacio de los centros de contacto. En su tiempo libre, le gusta pasar tiempo de calidad con su familia, explorar nuevos lugares y analizar demasiado el desempeño de su equipo deportivo.

Uma Ramados es Arquitecto de Soluciones especialista en Amazon Web Services, enfocado en la plataforma Serverless. Es responsable de ayudar a los clientes a diseñar y operar aplicaciones nativas de la nube basadas en eventos y flujos de trabajo empresariales modernos utilizando servicios como Lambda, EventBridge, Step Functions y Amazon MWAA.

punto_img

Información más reciente

punto_img