Usar o estado de mapa no modo inline em fluxos de trabalho do Step Functions
Gerenciar estados e transformar dados
Saiba mais sobre como transmitir dados entre estados com variáveis e transformar dados com JSONata.
Por padrão, os estados Map são executados no modo inline. No modo inline, o estado Mapa aceita somente uma matriz JSON como entrada. Ele recebe essa matriz de uma etapa anterior no fluxo de trabalho. Nesse modo, cada iteração do estado Map é executada no contexto do fluxo de trabalho que contém o estado Map. O Step Functions adiciona o histórico de execução dessas iterações ao histórico de execuções do fluxo de trabalho principal.
Nesse modo, o estado Map oferece suporte para até 40 iterações simultâneas.
Um estado Map definido como Inline é conhecido como estado Mapa inline. Use o estado Map no modo Em linha se o histórico de execução do fluxo de trabalho não exceder 25 mil entradas ou se você não precisar de mais de 40 iterações simultâneas.
Para obter uma introdução ao uso do estado Mapa inline, consulte o tutorial Repetir ações com o mapa inline.
Conteúdo
Principais conceitos neste tópico
- Modo inline
-
Um modo de processamento simultâneo limitado do estado
Map. Nesse modo, cada iteração do estadoMapé executada no contexto do fluxo de trabalho que contém o estadoMap. O Step Functions adiciona o histórico de execução dessas iterações ao histórico de execuções do fluxo de trabalho principal. Os estadosMapsão executados no modo inline como padrão.Esse modo aceita somente uma matriz JSON como entrada e é compatível com até 40 iterações simultâneas.
- Estado Mapa inline
-
Um estado
Mapdefinido como modo inline. - Fluxo de trabalho do mapa
O conjunto de etapas que o estado
Mapexecuta para cada iteração.- Iteração do estado Mapa
-
Uma repetição do fluxo de trabalho definida dentro do estado
Map.
Campos do estado Mapa inline
Para usar o estado Mapa inline 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.A definição contém o conjunto de etapas a serem repetidas para processar cada item da matriz.
-
ProcessorConfig— Um objeto JSON opcional que especifica o modo de processamento do estadoMap. Esse objeto contém o subcampoMode. Esse campo é padronizado comoINLINE, que usa o estadoMapno modo inline.Nesse modo, a falha de qualquer iteração causa uma falha no estado
Map. Todas as iterações param quando uma falha ocorre no estadoMap.
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 estadoMapé transmitida primeiro para o estadoStartAt.-
States– Um objeto JSON que contém um conjunto de estados delimitado por vírgulas. Nesse objeto, você define o Map workflow.nota
-
Os estados no campo
ItemProcessorsó podem fazer a transição entre si. Nenhum estado fora do campoItemProcessorpode fazer a transição para um estado dentro dele. -
O campo
ItemProcessorsubstitui o campoIterator, agora obsoleto. Embora você possa continuar a incluir estados deMapque usam o campoIterator, é altamente recomendável substituir esse campo porItemProcessor.No momento, o Step Functions Local não é compatível com o campo
ItemProcessor. Recomendamos o uso do campoIteratorcom o Step Functions Local.
-
-
Items(opcional, somente JSONata)-
Uma matriz JSON ou uma expressão JSONata que deve ser avaliada para uma matriz.
ItemsPath(opcional, somente JSONPath)-
Especifica um caminho de referência usando a sintaxe JsonPath
. Esse caminho seleciona o nó JSON que contém a matriz de itens dentro da entrada de estado. Para obter mais informações, consulte ItemsPath (somente mapa, JSONPath). ItemSelector(opcional)-
Substitui os valores da matriz de entrada antes de serem transmitidos para cada iteração do estado
Map.Nesse campo, você especifica um JSON válido que contém um conjunto de pares de valores-chave. Esses pares podem conter espaços ou um destes itens:
-
Valores estáticos selecionados na definição da máquina de estado.
-
Valores selecionados da entrada de estado usando um caminho.
-
Valores acessados a partir do objeto de contexto.
Para obter mais informações, consulte ItemSelector (mapa).
O campo
ItemSelectorsubstitui o campoParameters, agora obsoleto. Embora você possa continuar a incluir estados deMapque usam o campoParameters, é altamente recomendável substituir esse campo porItemSelector. -
MaxConcurrency(opcional)-
Especifica um valor inteiro que fornece o limite superior do número de iterações do estado
Mapque podem ser executadas em paralelo. Por exemplo, um valorMaxConcurrencyde 10 limitará o estadoMapa 10 iterações simultâneas em execução ao mesmo tempo.Nos estados JSONata, é possível especificar uma expressão JSONata que seja avaliada como um número inteiro.
nota
As iterações simultâneas podem ser limitadas. Quando isso ocorre, algumas iterações não começarão até que as iterações anteriores sejam concluídas. A probabilidade de isso ocorrer aumenta quando sua matriz de entrada tem mais de 40 itens.
Para aumentar a capacidade de processamento simultâneo, considere Modo distribuído.
O valor padrão é
0, o que não limita a capacidade de processamento simultâneo. O Step Functions invoca iterações da forma mais simultânea possível.Um valor
MaxConcurrencyde1invoca oItemProcessoruma vez para cada elemento da matriz. Os itens na matriz são processados na ordem em que aparecem na entrada. O Step Functions não iniciará uma nova iteração até concluir a iteração anterior. MaxConcurrencyPath(opcional, somente JSONPath)-
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
Mapnão pode incluirMaxConcurrencyeMaxConcurrencyPath. ResultPath(opcional, somente JSONPath)-
Especifica onde na entrada armazenar a saída das iterações do estado
Map. Em seguida, o estado Mapa filtra a entrada conforme especificado pelo campo OutputPath, se especificado. Em seguida, ele usa a entrada filtrada como saída do estado. Para obter mais informações, consulte Processamento de entrada e saída. ResultSelector(opcional, somente JSONPath)-
Transmitir um conjunto de pares de valores-chave, em que os valores são estáticos ou selecionados a partir do resultado. Para obter 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 obter 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. Os estados usam uma política de nova tentativa quando encontram erros de runtime. Para obter mais informações, consulte Exemplos de máquina de estado usando repetição e captura.
nota
Se você definir Retriers para o estado Mapa inline, a política de nova tentativa se aplicará a todas as iterações do estado
Map, em vez de somente às iterações com falha. Por exemplo, o estadoMapcontém duas iterações concluídas com êxito e uma com falha. Se você tiver definido o campoRetrypara o estadoMap, a política de repetição se aplicará a todas as três iterações do estadoMap, em vez de apenas à iteração com falha. Catch(opcional)-
Uma matriz de objetos, chamados Catchers, que definem um estado de fallback. Os estados executarão um catcher se encontrarem erros de runtime e não tiverem uma política de nova tentativa ou se a política de nova tentativa estiver esgotada. Para obter mais informações, consulte Estados de fallback.
Output(opcional, somente JSONata)-
Usado para especificar e transformar a saída do estado. Quando especificado, o valor substitui o padrão de saída de estado.
O campo de saída aceita qualquer valor JSON (objeto, matriz, string, número, booleano, nulo). Qualquer valor de string, incluindo aqueles em objetos ou matrizes, será avaliado como JSONata se estiver entre caracteres {% %}.
A saída também aceita uma expressão JSONata direta, por exemplo: “Output”: “{% jsonata expression %}”
Para obter mais informações, consulte Transformar dados com JSONata no Step Functions.
-
Assign(opcional) -
Usado para armazenar variáveis. O campo
Assignaceita um objeto JSON com pares de chave/valor que definem nomes de variáveis e seus valores atribuídos. Qualquer valor de string, incluindo aqueles em objetos ou matrizes, será avaliado como JSONata se estiver entre caracteres{% %}Para obter mais informações, consulte Transmitir dados entre estados com variáveis.
Campos descontinuados
nota
Embora você possa continuar a incluir estados de Map que usam o campo Iterator, é altamente recomendável substituir por ItemProcessor e Parameters por ItemSelector.
-
Iterator -
Especifica um objeto JSON que define um conjunto de etapas que processam cada elemento da matriz.
Parameters-
Especifica um conjunto de pares de valores-chave, no qual os valores podem conter espaços ou um destes itens:
-
Valores estáticos selecionados na definição da máquina de estado.
-
Valores selecionados da entrada usando um caminho.
-
Exemplo de estado de mapa inline (JSONPath)
Considere os seguintes dados de entrada para um estado Map no modo inline.
{
"ship-date": "2016-03-14T01:59:00Z",
"detail": {
"delivery-partner": "UQS",
"shipped": [
{ "prod": "R31", "dest-code": 9511, "quantity": 1344 },
{ "prod": "S39", "dest-code": 9511, "quantity": 40 },
{ "prod": "R31", "dest-code": 9833, "quantity": 12 },
{ "prod": "R40", "dest-code": 9860, "quantity": 887 },
{ "prod": "R40", "dest-code": 9511, "quantity": 1220 }
]
}
}
Considerando a entrada anterior, o estado Map no exemplo a seguir invocará uma função do AWS Lambda chamada ship-val uma vez para cada item da matriz no campo shipped.
"Validate All": {
"Type": "Map",
"InputPath": "$.detail",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "Validate",
"States": {
"Validate": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-2:account-id:function:ship-val:$LATEST"
},
"End": true
}
}
},
"End": true,
"ResultPath": "$.detail.shipped",
"ItemsPath": "$.shipped"
}
Cada iteração do estado Map enviará um item na matriz, selecionada com o campo ItemsPath como entrada para a função do Lambda ship-val. Os valores a seguir são um exemplo de entrada que o estado Map envia para uma invocação da função do Lambda:
{
"prod": "R31",
"dest-code": 9511,
"quantity": 1344
}
Quando concluída, a saída do estado Map é uma matriz JSON, onde cada item é a saída de uma iteração. Nesse caso, essa matriz contém a saída da função do Lambda ship-val.
Exemplo de estado Mapa inline com ItemSelector.
Vamos supor que a função do Lambda ship-val no exemplo anterior também precise de informações sobre a transportadora da remessa. Essas informações são adicionadas aos itens na matriz para cada iteração. Você pode incluir informações da entrada, juntamente com informações específicas à iteração atual do estado Map. Observe o campo ItemSelector no exemplo a seguir.
"Validate-All": {
"Type": "Map",
"InputPath": "$.detail",
"ItemsPath": "$.shipped",
"MaxConcurrency": 0,
"ResultPath": "$.detail.shipped",
"ItemSelector": {
"parcel.$": "$$.Map.Item.Value",
"courier.$": "$.delivery-partner"
},
"ItemProcessor": {
"StartAt": "Validate",
"States": {
"Validate": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account-id:function:ship-val",
"End": true
}
}
},
"End": true
}
O bloco ItemSelector substitui a entrada das iterações por um nó JSON. Esse nó contém os dados do item atual do objeto de contexto e as informações da transportadora do campo delivery-partner da entrada do estado Map. O exemplo a seguir é um entrada para uma única iteração. O estado Map transmite essa entrada para uma invocação da função do Lambda ship-val.
{
"parcel": {
"prod": "R31",
"dest-code": 9511,
"quantity": 1344
},
"courier": "UQS"
}
No exemplo anterior do estado Mapa inline, o campo ResultPath produz uma saída no mesmo formato da entrada. No entanto, ele substitui o campo detail.shipped por uma matriz na qual cada elemento é a saída da invocação do Lambda ship-val de cada iteração.
Para ver mais informações sobre como usar o estado Mapa inline e seus campos, consulte o seguinte:
Processamento de entrada e saída do estado Map inline.
Para um determinado estado Map, o InputPath seleciona um subconjunto da entrada do estado.
A entrada de um estado Map deve incluir uma matriz JSON. O estado Map executa a seção ItemProcessor uma vez para cada item na matriz. Se você especificar o campo ItemsPath, o estado Map selecionará onde na entrada encontrar a matriz sobre a qual iterar. Se não for especificado, o valor de ItemsPath será $, e a seção ItemProcessor esperará que a matriz seja a única entrada. Se você especificar o campo ItemsPath, seu valor deverá ser um caminho de referência. O estado Map aplica esse caminho à entrada efetiva depois de aplicar o InputPath. O ItemsPath deve identificar um campo cujo valor seja uma matriz JSON.
A entrada para cada iteração, por padrão, é um único elemento do campo de matriz identificado pelo valor ItemsPath. Você pode substituir esse valor pelo campo ItemSelector (mapa).
Quando concluída, a saída do estado Map é uma matriz JSON, onde cada item é a saída de uma iteração.
Para ver mais informações sobre entradas e saídas do estado Mapa inline, consulte: