Usar o estado Mapa no modo distribuído para orquestrar workloads paralelas em grande escala - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o estado Mapa no modo distribuído para orquestrar workloads paralelas em grande escala

Com o Step Functions, você pode orquestrar workloads paralelas em grande escala para realizar tarefas, como processamento sob demanda de dados semiestruturados. Essas workloads paralelas permitem que você processe simultaneamente fontes de dados em grande escala armazenadas no Amazon S3. Por exemplo, você pode processar um único arquivo JSON ou CSV que contém grandes quantidades de dados. Ou você pode processar um grande conjunto de objetos do Amazon S3.

Para configurar uma workload paralela em grande escala nos fluxos de trabalho, inclua um estado Map no modo distribuído. O estado Mapa processa itens em um conjunto de dados simultaneamente. Um estado Map definido como Distribuído é conhecido como estado Mapa distribuído. No modo distribuído, o estado Map permite o processamento simultâneo em grande escala. No modo distribuído, o estado Map processa os itens no conjunto de dados em iterações chamadas execuções de fluxo de trabalho secundário. É possível especificar o número de execuções de fluxo de trabalho secundário que podem ser executadas em paralelo. Cada execução de fluxo de trabalho secundário tem seu próprio histórico de execução separado do fluxo de trabalho principal. Se você não especificar, o Step Functions executará 10 mil execuções paralelas de fluxo de trabalho secundário.

A ilustração a seguir explica como você pode configurar workloads paralelas em grande escala em seus fluxos de trabalho.

Diagrama para ilustrar o conceito de orquestração de workloads paralelas em grande escala.

Principais termos

Modo distribuído

Um modo de processamento do estado Mapa. Nesse modo, cada iteração do estado Map é executada como uma execução de fluxo de trabalho secundário que permite processamento simultâneo em grande escala. Cada execução de fluxo de trabalho secundário tem seu próprio histórico de execução, que é separado do histórico de execução do fluxo de trabalho principal. Esse modo é compatível com a leitura de entradas de fontes de dados do Amazon S3 em grande escala.

Estado Mapa distribuído

Um estado Mapa definido para o modo de processamento Distribuído.

Fluxo de trabalho do mapa

Um conjunto de etapas que um estado Map executa.

Fluxo de trabalho principal

Um fluxo de trabalho que contém um ou mais estados Mapa distribuído.

Execuções de fluxo de trabalho secundário

Uma iteração do estado Mapa Distribuído. Uma execução de fluxo de trabalho secundário tem seu próprio histórico de execução, que é separado do histórico de execução do fluxo de trabalho principal.

Execução de mapa

Ao executar um estado Map no modo distribuído, o Step Functions cria um recurso de Execução de mapa. Uma Execução de mapa se refere a um conjunto de execuções de fluxo de trabalho secundário que um estado Mapa distribuído inicia e às configurações de runtime que controlam essas execuções. O Step Functions atribui um nome do recurso da Amazon (ARN) à Execução de mapa. Você pode examinar uma Execução de mapa no console do Step Functions. Você também pode invocar a ação da API DescribeMapRun. A Map Run também emite métricas para CloudWatch.

Para ter mais informações, consulte Examinando o Map Run.

Exemplo de definição do estado Mapa Distribuído

Use o estado Map no modo distribuído quando precisar orquestrar workloads paralelas em grande escala que atendam a qualquer combinação das seguintes condições:

  • O tamanho do conjunto de dados excede 256 KB.

  • O histórico de eventos de execução do fluxo de trabalho excede 25 mil entradas.

  • Você precisa processar simultaneamente mais de 40 iterações paralelas.

O exemplo de definição de estado Mapa Distribuído a seguir especifica o conjunto de dados como um arquivo CSV armazenado em um bucket do Amazon S3. Ele também especifica uma função do Lambda que processa os dados em cada linha do arquivo CSV. Uma vez que esse exemplo usa um arquivo CSV, ele também especifica a localização dos cabeçalhos das colunas do CSV. Para ver a definição completa da máquina de estado desse exemplo, consulte o tutorial Copiar dados de CSV em grande escala usando o Mapa distribuído.

{ "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" } } } }

Permissões para executar o Mapa distribuído

Ao incluir um estado Mapa Distribuído nos fluxos de trabalho, o Step Functions precisa de permissões apropriadas para permitir que o perfil de máquina de estado invoque a ação da API StartExecution para o estado Mapa Distribuído.

O exemplo de política do IAM a seguir concede os privilégios mínimos necessários ao perfil da máquina de estado para executar o estado Mapa Distribuído.

nota

Substitua stateMachineName pelo nome da máquina de estado na qual você está usando o estado Mapa Distribuído. Por exemplo, 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:*" } ] }

Além disso, você precisa garantir que tenha os privilégios mínimos necessários para acessar os AWS recursos usados no estado do Mapa Distribuído, como os buckets do Amazon S3. Para mais informações, consulte Políticas do IAM para usar o estado Mapa Distribuído.

Campos do estado Mapa Distribuído

Para usar o estado Mapa distribuído em fluxos de trabalho, especifique um ou mais dos campos a seguir. Você especifica esses campos além dos campos de estado comuns.

Type (obrigatório)

Define o tipo de estado, como Map.

ItemProcessor (obrigatório)

Contém os seguintes objetos JSON que especificam a definição e o modo de processamento estado Map.

  • ProcessorConfig— Um objeto JSON que especifica a configuração do estado Map. O objeto contém os subcampos a seguir.

    • Mode— Definido como DISTRIBUTED para usar o estado Map no modo distribuído.

      nota

      Atualmente, se você usa o estado Map nos fluxos de trabalho expressos, não é possível definir o Mode como DISTRIBUTED. No entanto, se você usa o estado Map nos fluxos de trabalho padrão, é possível definir o Mode como DISTRIBUTED.

    • ExecutionType— Especifica o tipo de execução do fluxo de trabalho do mapa como PADRÃO ou EXPRESSO. Você deve fornecer esse campo se tiver especificado DISTRIBUTED para o subcampo Mode. Para ver mais informações sobre tipos de fluxos de trabalho, consulte Comparação entre os fluxos de trabalho padrão e expresso.

  • StartAt— Especifica uma string que indica o primeiro estado em um fluxo de trabalho. Essa string diferencia maiúsculas de minúsculas e deve corresponder ao nome de um dos objetos de estado. Esse estado é executado primeiro para cada item no conjunto de dados. Qualquer entrada de execução fornecida ao estado Map é transmitida primeiro para o estado StartAt.

  • States – Um objeto JSON que contém um conjunto de estados delimitado por vírgulas. Nesse objeto, você define o Map workflow.

ItemReader

Especifica um conjunto de dados e sua localização. O estado Map recebe seus dados de entrada do conjunto de dados especificado.

No modo distribuído, você pode usar uma carga JSON transferida de um estado anterior ou uma fonte de dados do Amazon S3 em grande escala como conjunto de dados. Para ter mais informações, consulte ItemReader.

ItemsPath (Opcional)

Especifica um caminho de referência usando a JsonPathsintaxe para selecionar o nó JSON que contém uma matriz de itens dentro da entrada de estado.

No modo distribuído, você especifica esse campo somente ao usar uma matriz JSON de uma etapa anterior como entrada de estado. Para ter mais informações, consulte ItemsPath.

ItemSelector (Opcional)

Substitui os valores de itens individuais do conjunto de dados antes de serem transmitidos para cada iteração do estado Map.

Nesse campo, você especifica uma entrada JSON válida que contém um conjunto de pares de valores-chave. Esses pares podem ser valores estáticos configurados na definição da máquina de estado, valores selecionados da entrada de estado usando um caminho ou valores acessados a partir do objeto de contexto. Para ter mais informações, consulte ItemSelector.

ItemBatcher (Opcional)

Especifica o processamento dos itens do conjunto de dados em lotes. Em seguida, cada execução de fluxo de trabalho secundário recebe um lote desses itens como entrada. Para ter mais informações, consulte ItemBatcher.

MaxConcurrency (Opcional)

Especifica o número de execuções de fluxo de trabalho secundário que podem ser executadas em paralelo. O intérprete só permite até o número especificado de execuções paralelas de fluxo de trabalho secundário. Se você não especificar um valor de processamento simultâneo ou defini-lo como zero, o Step Functions não limitará o processamento simultâneo e executará 10 mil execuções paralelas de fluxo de trabalho secundário.

nota

Embora você possa especificar um limite maior de simultaneidade para execuções paralelas de fluxos de trabalho secundários, recomendamos que você não exceda a capacidade de um AWS serviço downstream, como. AWS Lambda

MaxConcurrencyPath (Opcional)

Para fornecer dinamicamente um valor máximo de processamento simultâneo a partir da entrada de estado usando um caminho de referência, use MaxConcurrencyPath. Quando resolvido, o caminho de referência deve selecionar um campo cujo valor seja um número inteiro não negativo.

nota

Um estado Map não pode incluir MaxConcurrency e MaxConcurrencyPath.

ToleratedFailurePercentage (Opcional)

Define a porcentagem de itens com falha a serem tolerados em uma Execução de mapa. A Execução de mapa falhará automaticamente se exceder essa porcentagem. O Step Functions calcula a porcentagem de itens com falha como resultado do número total de itens com falha ou com tempo limite esgotado dividido pelo número total de itens. Você deve especificar um valor entre zero e cem. Para ter mais informações, consulte Limite de falha tolerado para o estado Mapa Distribuído.

ToleratedFailurePercentagePath (Opcional)

Para fornecer dinamicamente um valor de porcentagem de falha tolerada com base na entrada de estado utilizando um caminho de referência, use ToleratedFailurePercentagePath. Quando resolvido, o caminho de referência deve selecionar um campo cujo valor seja um número entre zero e cem.

ToleratedFailureCount (Opcional)

Define o número de itens com falha a serem tolerados em uma Execução de mapa. A Execução de mapa falhará automaticamente se exceder esse número. Para ter mais informações, consulte Limite de falha tolerado para o estado Mapa Distribuído.

ToleratedFailureCountPath (Opcional)

Para fornecer dinamicamente um valor de contagem de falhas toleradas com base na entrada de estado utilizando um caminho de referência, use ToleratedFailureCountPath. Quando resolvido, o caminho de referência deve selecionar um campo cujo valor seja um número inteiro não negativo.

Label (Opcional)

Uma string que identifica exclusivamente um estado Map. Para cada Execução de mapa, o Step Functions adiciona o rótulo ao ARN da Execução de mapa. Veja a seguir um exemplo de um ARN de Execução de mapa com um rótulo personalizado chamado demoLabel:

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

Se você não especificar um rótulo, o Step Functions gerará automaticamente um rótulo exclusivo.

nota

Os rótulos não podem ter mais de 40 caracteres, devem ser exclusivos em uma definição de máquina de estado e não podem conter nenhum dos caracteres a seguir.

  • Caracteres de espaço em branco

  • Caracteres curinga (? *)

  • Caracteres de colchete (< > { } [ ])

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

  • caracteres de controle (\\u0000 - \\u001f ou \\u007f - \\u009f).

O Step Functions permite criar nomes de máquina de estado, execuções, atividades e labels que contenham caracteres não ASCII. Esses nomes não ASCII não funcionam com a Amazon. CloudWatch Para garantir que você possa acompanhar CloudWatch as métricas, escolha um nome que use somente caracteres ASCII.

ResultWriter (Opcional)

Especifica o local do Amazon S3 em que o Step Functions grava todos os resultados da execução do fluxo de trabalho secundário.

O Step Functions consolida todos os dados da execução de um fluxo de trabalho secundário, como a entrada e saída de execução, ARN e status da execução. Em seguida, ele exporta as execuções com o mesmo status para seus respectivos arquivos na localização especificada do Amazon S3. Para ter mais informações, consulte ResultWriter.

Se você não exportar os resultados do estado Map, ele retornará uma matriz de todos os resultados da execução do fluxo de trabalho secundário. Por exemplo: .

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

Especifica onde colocar a saída das iterações na entrada. A entrada é então filtrada conforme especificado pelo campo OutputPath (se presente), antes de ser transmitida como a saída do estado. Para obter mais informações, consulte Processamento de entrada e saída.

ResultSelector (Opcional)

Transmitir um conjunto de pares de valores-chave, em que os valores são estáticos ou selecionados a partir do resultado. Para ter mais informações, consulte ResultSelector.

dica

Se o estado Paralelo ou Mapa usado nas máquinas de estado retornar uma matriz de matrizes, você poderá transformá-las em uma matriz nivelada com o campo ResultSelector. Para ter mais informações, consulte Nivelamento de uma matriz de matrizes.

Retry (Opcional)

Uma matriz de objetos, chamados Retriers, que definem uma política de novas tentativas. Uma execução usará a política de novas tentativas caso o estado encontre erros de runtime. Para ter mais informações, consulte Exemplos de máquina de estado que usam Nova tentativa e Detecção.

nota

Se você definir Retriers para o estado Mapa Distribuído, a política de novas tentativas se aplicará a todas as execuções do fluxo de trabalho secundário iniciadas pelo estado Map. Por exemplo, imagine que o estado Map iniciou três execuções de fluxo de trabalho secundário, das quais uma falha. Quando a falha ocorre, a execução usa o campo Retry, se definido, para o estado Map. A política de repetição se aplica a todas as execuções do fluxo de trabalho secundário e não apenas à execução com falha. Se uma ou mais execuções de fluxo de trabalho secundário falharem, o mesmo ocorrerá com a Execução de mapa.

Ao repetir um estado Map, uma nova Execução de mapa é criada.

Catch (Opcional)

Uma matriz de objetos, chamados Catchers, que definem um estado de fallback. O Step Functions usará os Catchers definidos em Catch se o estado encontrar erros de runtime. Quando ocorre um erro, a execução usa primeiro todos os retriers definidos em Retry. Se a política de novas tentativas não estiver definida ou estiver esgotada, a execução usará seus Catchers, se definidos. Para obter mais informações, consulte Estados de fallback.

Próximas etapas

Para continuar aprendendo mais sobre o estado Mapa Distribuído, consulte os seguintes recursos: