Uso del estado Map en modo distribuido para orquestar cargas de trabajo paralelas a gran escala - 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.

Uso del estado Map en modo distribuido para orquestar cargas de trabajo paralelas a gran escala

Con Step Functions, puede orquestar cargas de trabajo paralelas a gran escala para realizar tareas, como el procesamiento bajo demanda de datos semiestructurados. Estas cargas de trabajo paralelas permiten procesar simultáneamente orígenes de datos a gran escala almacenados en Amazon S3. Por ejemplo, puede procesar un único archivo JSON o CSV que contenga grandes cantidades de datos. O bien, puede procesar un conjunto grande de objetos de Amazon S3.

Para configurar una carga de trabajo paralela a gran escala en los flujos de trabajo, incluya un estado Map en modo distribuido. El estado Map procesa los elementos de un conjunto de datos de forma simultánea. Un estado Map establecido en Distributed se conoce como estado Map Distributed. En el modo Distribuido, el estado Map permite un procesamiento de alta simultaneidad. En el modo Distribuido, el estado Map procesa los elementos del conjunto de datos en iteraciones llamadas ejecuciones de flujos de trabajo secundarios. Puede especificar el número de ejecuciones de flujo de trabajo secundario que se pueden ejecutar en paralelo. Cada ejecución de flujo de trabajo secundario tiene su propio historial de ejecución independiente del flujo de trabajo principal. Si no se especifica, Step Functions ejecuta 10 000 ejecuciones de flujos de trabajo secundarios en paralelo.

La siguiente ilustración explica cómo puede configurar cargas de trabajo paralelas a gran escala en los flujos de trabajo.


            Diagrama para ilustrar el concepto de orquestar cargas de trabajo paralelas a gran escala.

Términos clave

Modo distribuido

Un modo de procesamiento del estado Map. En este modo, cada iteración del estado Map se ejecuta como una ejecución de flujo de trabajo secundario que permite una alta simultaneidad. Cada ejecución de flujo de trabajo secundario tiene su propio historial de ejecución, independiente del historial de ejecución del flujo de trabajo principal. Este modo admite la lectura de orígenes de datos de Amazon S3 a gran escala.

Estado Map Distributed

Un estado de Map establecido en modo de procesamiento distribuido.

Flujo de trabajo de Map

Un conjunto de pasos que ejecuta un estado Map.

Flujo de trabajo principal

Un flujo de trabajo que contiene uno o más estados Map Distributed.

Ejecución de flujo de trabajo secundario

Una iteración del estado Map Distributed. La ejecución de un flujo de trabajo secundario tiene su propio historial de ejecución, que es independiente del historial de ejecución del flujo de trabajo principal.

Map Run

Cuando se ejecuta un estado Map en modo distribuido, Step Functions crea un recurso Map Run. Map Run hace referencia a un conjunto de ejecuciones de flujos de trabajo secundarios que inicia un estado Map Distributed y a la configuración de tiempo de ejecución que controla estas ejecuciones. Step Functions asigna un nombre de recurso de Amazon (ARN) al Map Run. Puede examinar un Map Run en la consola de Step Functions. También puede invocar la acción de la API DescribeMapRun. A Map Run también emite métricas a CloudWatch.

Para obtener más información, consulte Examen de Map Run.

Ejemplo de definición de estado Map Distributed

Utilice el estado Map en modo Distribuido cuando necesite orquestar cargas de trabajo paralelas a gran escala que cumplan cualquier combinación de las siguientes condiciones:

  • El tamaño del conjunto de datos supera los 256 KB.

  • El historial de eventos de ejecución del flujo de trabajo supera las 25 000 entradas.

  • Necesita una simultaneidad de más de 40 iteraciones paralelas.

En el siguiente ejemplo de definición de estado Map Distributed, se especifica el conjunto de datos como un archivo CSV almacenado en un bucket de Amazon S3. También especifica una función de Lambda que procesa los datos de cada fila del archivo CSV. Como en este ejemplo se utiliza un archivo CSV, también se especifica la ubicación de los encabezados de las columnas CSV. Para ver la definición completa de la máquina de estado de este ejemplo, consulte el tutorial Copia de datos CSV a gran escala mediante Map Distributed.

{ "Map": { "Type": "Map", "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "Database", "Key": "csv-dataset/ratings.csv" } }, "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "EXPRESS" }, "StartAt": "LambdaTask", "States": { "LambdaTask": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:processCSVData" }, "End": true } } }, "Label": "Map", "End": true, "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "myOutputBucket", "Prefix": "csvProcessJobs" } } } }

Permisos para ejecutar Map Distributed

Cuando se incluye un estado Map Distributed en los flujos de trabajo, Step Functions necesita los permisos adecuados para permitir que el rol de la máquina de estado invoque la acción de la API StartExecution para el estado Map Distributed.

El siguiente ejemplo de política de IAM otorga los privilegios mínimos necesarios al rol de la máquina de estado para ejecutar el estado Map Distributed.

nota

No olvide reemplazar stateMachineName por el nombre de la máquina de estado en la que está utilizando el estado Map Distributed. Por ejemplo, arn:aws:states:us-east-2:123456789012:stateMachine:mystateMachine.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:region:accountID:stateMachine:stateMachineName" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": "arn:aws:states:region:accountID:execution:stateMachineName:*" } ] }

Además, debe asegurarse de tener los privilegios mínimos necesarios para acceder a los AWS recursos utilizados en el estado del mapa distribuido, como los buckets de Amazon S3. Para obtener más información, consulte Políticas de IAM para usar el estado Map Distributed.

Campos de estado de Map Distributed

Para usar el estado Map Distributed en los flujos de trabajo, especifique uno o más de estos campos. Estos campos se especifican además de los campos de estado comunes.

Type (Obligatorio)

Establece el tipo de estado, por ejemplo Map.

ItemProcessor (Obligatorio)

Contiene los siguientes objetos JSON que especifican el modo y la definición de procesamiento del estado Map.

  • ProcessorConfig: un objeto JSON que especifica la configuración del estado Map. Este objeto contiene los siguientes subcampos:

    • Mode: configurado en DISTRIBUTED para usar el estado Map en modo distribuido.

      nota

      Actualmente, si se usa el estado Map dentro de flujos de trabajo rápidos, no se puede configurar el Mode en DISTRIBUTED. Sin embargo, si se usa el estado Map dentro de flujos de trabajo estándar, se puede configurar el Mode en DISTRIBUTED.

    • ExecutionType – Especifica el tipo de ejecución del flujo de trabajo de Map como STANDARD o EXPRESS. Debe proporcionar este campo si especificó DISTRIBUTED para el subcampo Mode. Para obtener más información acerca de los tipos de flujo de trabajo, consulte Flujos de trabajo estándar en comparación con flujos de trabajo rápidos.

  • StartAt: especifica una cadena que indica el primer estado de un flujo de trabajo. Esta cadena debe coincidir exactamente (mayúsculas y minúsculas) con el nombre de uno de los objetos de estado. Este estado se ejecuta primero para cada elemento del conjunto de datos. Cualquier entrada de ejecución que se proporcione al estado Map pasará primero al estado StartAt.

  • States – Objeto JSON que contiene un conjunto de estados delimitados por comas. En este objeto, se define el Map workflow.

ItemReader

Especifica un conjunto de datos y su ubicación. El estado Map recibe sus datos de entrada del conjunto de datos especificado.

En el modo distribuido, puede utilizar como conjunto de datos una carga JSON transferida desde un estado anterior o un origen de datos de Amazon S3 a gran escala. Para obtener más información, consulte ItemReader.

ItemsPath (Opcional)

Especifica una ruta de referencia mediante la JsonPathsintaxis para seleccionar el nodo JSON que contiene una matriz de elementos dentro de la entrada de estado.

En el modo Distribuido, solo se especifica este campo cuando se utiliza una matriz JSON de un paso anterior como entrada de estado. Para obtener más información, consulte ItemsPath.

ItemSelector (Opcional)

Anula los valores de los elementos individuales del conjunto de datos antes de pasarlos a cada iteración del estado Map.

En este campo, se especifica una entrada JSON válida que contiene un conjunto de pares clave-valor. Estos pares pueden ser valores estáticos que se establezcan en la definición de la máquina de estado, valores seleccionados de la entrada de estado mediante una ruta o valores a los que se accede desde el objeto de contexto. Para obtener más información, consulte ItemSelector.

ItemBatcher (Opcional)

Especifica el procesamiento de los elementos del conjunto de datos por lotes. Cada ejecución de flujo de trabajo secundario recibe entonces un lote de estos elementos como entrada. Para obtener más información, consulte ItemBatcher.

MaxConcurrency (Opcional)

Especifica el número de ejecuciones de flujo de trabajo secundario que se pueden ejecutar en paralelo. El intérprete solo permite el número especificado de ejecuciones de flujos de trabajo secundarios paralelos. Si no se especifica un valor de simultaneidad o se establece en cero, Step Functions no limita la simultaneidad y realiza 10 000 ejecuciones paralelas de flujos de trabajo secundarios.

nota

Si bien puede especificar un límite de simultaneidad superior para las ejecuciones de flujos de trabajo secundarios en paralelo, le recomendamos que no exceda la capacidad de un AWS servicio descendente, como. AWS Lambda

MaxConcurrencyPath (Opcional)

Si desea proporcionar un valor máximo de simultaneidad de forma dinámica a partir de la entrada de estado mediante una ruta de referencia, utilice MaxConcurrencyPath. Una vez resuelta, la ruta de referencia debe seleccionar un campo cuyo valor sea un entero no negativo.

nota

Un estado Map no puede incluir tanto MaxConcurrency como MaxConcurrencyPath.

ToleratedFailurePercentage (Opcional)

Define el porcentaje de elementos con error que se toleran en un Map Run. El Map Run genera automáticamente un error si se supera este porcentaje. Step Functions calcula el porcentaje de elementos con error como resultado del número total de elementos con error o con tiempo de espera agotado dividido por el número total de elementos. Debe especificar un valor comprendido entre cero y 100. Para obtener más información, consulte Umbral de error tolerado para el estado Distributed Map.

ToleratedFailurePercentagePath (Opcional)

Si desea proporcionar un valor de porcentaje de error tolerado de forma dinámica a partir de la entrada de estado con una ruta de referencia, utilice ToleratedFailurePercentagePath. Una vez resuelta, la ruta de referencia debe seleccionar un campo cuyo valor esté entre cero y 100.

ToleratedFailureCount (Opcional)

Define el número de elementos con error que se toleran en un Map Run. El Map Run genera automáticamente un error si se supera este porcentaje. Para obtener más información, consulte Umbral de error tolerado para el estado Distributed Map.

ToleratedFailureCountPath (Opcional)

Si desea proporcionar un valor de recuento de error tolerado de forma dinámica a partir de la entrada de estado con una ruta de referencia, utilice ToleratedFailureCountPath. Una vez resuelta, la ruta de referencia debe seleccionar un campo cuyo valor sea un entero no negativo.

Label (Opcional)

Una cadena que identifica de forma exclusiva un estado Map. Para cada Map Run, Step Functions añade la etiqueta al ARN de Map Run. A continuación se muestra un ejemplo de un ARN de Map Run con una etiqueta personalizada denominada demoLabel:

arn:aws:states:us-east-1:123456789012:mapRun:demoWorkflow/demoLabel:3c39a231-69bb-3d89-8607-9e124eddbb0b

Si no especifica una etiqueta, Step Functions genera automáticamente una etiqueta única.

nota

Las etiquetas no pueden tener más de 40 caracteres de longitud, deben ser únicas dentro de una definición de máquina de estado y no pueden contener ninguno de los siguientes caracteres:

  • Caracteres de espacio en blanco

  • Caracteres comodín (? *)

  • Caracteres entre corchetes (< > { } [ ])

  • Caracteres especiales (: ; , \ | ^ ~ $ # % & ` ")

  • Caracteres de control (\\u0000 - \\u001f o \\u007f - \\u009f).

Step Functions permite crear nombres para máquinas de estado, ejecuciones, actividades y etiquetas que contengan caracteres no ASCII. Estos nombres que no son ASCII no funcionan con Amazon. CloudWatch Para asegurarse de que puede realizar un seguimiento de CloudWatch las métricas, elija un nombre que utilice únicamente caracteres ASCII.

ResultWriter (Opcional)

Especifica la ubicación de Amazon S3 en la que Step Functions escribe todos los resultados de ejecución de flujo de trabajo secundario.

Step Functions consolida todos los datos de ejecución del flujo de trabajo secundario, como la entrada y salida de la ejecución, el ARN y el estado de ejecución. A continuación, exporta las ejecuciones con el mismo estado a sus archivos respectivos en la ubicación de Amazon S3 especificada. Para obtener más información, consulte ResultWriter.

Si no se exportan los resultados del estado Map, devolverá una matriz con todos los resultados de la ejecución del flujo de trabajo secundario. Por ejemplo:

[1, 2, 3, 4, 5]
ResultPath (Opcional)

Especifica en qué lugar de la entrada se va a situar la salida de las iteraciones. La entrada se filtra entonces según el contenido del campo OutputPath, si está presente, antes de que se pase como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida.

ResultSelector (Opcional)

Pase un conjunto de pares clave-valor, donde los valores sean estáticos o se seleccionen del resultado. Para obtener más información, consulte ResultSelector.

sugerencia

Si el estado Parallel o Map que utiliza en sus máquinas de estado devuelve una matriz de matrices, puede transformarlas en una matriz plana con el campo ResultSelector. Para obtener más información, consulte Aplanamiento de una matriz de matrices.

Retry (Opcional)

Una matriz de objetos, denominados "reintentadores", que definen una política de reintentos. Una ejecución utiliza la política de reintento si el estado encuentra errores en tiempo de ejecución. Para obtener más información, consulte Ejemplos de máquina de estado que usan Retry y Catch.

nota

Si define "reintentadores" para el estado Map Distributed, la política de reintentos se aplica a todas las ejecuciones de flujo de trabajo secundario que haya iniciado el estado Map. Por ejemplo, imagine que el estado Map ha iniciado tres ejecuciones de flujos de trabajo secundarios, de las cuales una genera un error. Cuando se produce el error, la ejecución utiliza el campo Retry, si está definido, para el estado Map. La política de reintentos se aplica a todas las ejecuciones del flujo de trabajo secundario y no solo a las ejecuciones con error. Si se produce un error en la ejecución de uno o más flujos de trabajo secundarios, se produce un error en el Map Run.

Al reintentar un estado Map, se crea un nuevo Map Run.

Catch (Opcional)

Una matriz de objetos, denominados "receptores", que definen un estado alternativo. Step Functions usa los "receptores" definidos en Catch si el estado encuentra errores en tiempo de ejecución. Cuando se produce un error, la ejecución utiliza primero los "reintentadores" definidos en Retry. Si la política de reintentos no está definida o está agotada, la ejecución utiliza sus "receptores", si están definidos. Para obtener más información, consulte Estados alternativos.

Siguientes pasos

Para obtener más información acerca del estado Map Distributed, consulte los siguientes recursos: