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 de mapa no modo inline em fluxos de trabalho do Step Functions
Gerenciando o estado e transformando dados
Recentemente, o Step Functions adicionou variáveis JSONata para gerenciar dados de estado e transformação.
Saiba mais sobre como transmitir dados 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 do Mapa aceita somente uma JSON matriz 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 estadosMap
são executados no modo inline como padrão.Esse modo aceita somente uma JSON matriz como entrada e suporta até 40 iterações simultâneas.
- Estado Mapa inline
-
Um estado
Map
definido como modo inline. - Fluxo de trabalho do mapa
O conjunto de etapas que o estado
Map
executa 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 JSON objetos que especificam a definição e o modo de processamento do
Map
estado.A definição contém o conjunto de etapas a serem repetidas para processar cada item da matriz.
-
ProcessorConfig
— Um JSON objeto opcional que especifica o modo de processamento doMap
estado. Esse objeto contém o subcampoMode
. Esse campo é padronizado comoINLINE
, que usa o estadoMap
no 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 JSON objeto contendo um conjunto de estados delimitado por vírgula. Nesse objeto, você define o Map workflow.nota
-
Os estados no campo
ItemProcessor
só podem fazer a transição entre si. Nenhum estado fora do campoItemProcessor
pode fazer a transição para um estado dentro dele. -
O campo
ItemProcessor
substitui o campoIterator
, agora obsoleto. Embora você possa continuar a incluir estados deMap
que 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 campoIterator
com o Step Functions Local.
-
-
Items
(Opcional, JSONata somente)-
Uma JSON matriz ou JSONata expressão que deve ser avaliada como uma matriz.
ItemsPath
(Opcional, JSONPath somente)-
Especifica um caminho de referência usando a JsonPath
sintaxe. Esse caminho seleciona o JSON nó que contém a matriz de itens dentro da entrada de estado. Para obter mais informações, consulte ItemsPath (Mapa, JSONPath somente). 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 válido JSON que contém uma coleção 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
ItemSelector
substitui o campoParameters
, agora obsoleto. Embora você possa continuar a incluir estados deMap
que 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
Map
que podem ser executadas em paralelo. Por exemplo, um valorMaxConcurrency
de 10 limitará o estadoMap
a 10 iterações simultâneas em execução ao mesmo tempo.Nos JSONata estados, você pode especificar uma JSONata expressão 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
MaxConcurrency
de1
invoca oItemProcessor
uma 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, JSONPath somente)-
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 incluirMaxConcurrency
eMaxConcurrencyPath
. ResultPath
(Opcional, JSONPath somente)-
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, JSONPath somente)-
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 estadoMap
contém duas iterações concluídas com êxito e uma com falha. Se você tiver definido o campoRetry
para 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, JSONata somente)-
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 JSON valor (objeto, matriz, string, número, booleano, nulo). Qualquer valor de string, incluindo aqueles dentro de objetos ou matrizes, será avaliado como JSONata se estivesse cercado por {%%} caracteres.
A saída também aceita uma JSONata expressão diretamente, por exemplo: “Output”: “{% jsonata expression%}”
Para obter mais informações, consulte Transformando dados com Step JSONata Functions.
-
Assign
(opcional) -
Usado para armazenar variáveis. O
Assign
campo aceita um JSON objeto com pares de chave/valor que definem nomes de variáveis e seus valores atribuídos. Qualquer valor de string, incluindo aqueles dentro de objetos ou matrizes, será avaliado como JSONata quando cercado por{% %}
caracteresPara obter mais informações, consulte Passando 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 JSON objeto 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 embutido () 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 }
]
}
}
Dada a entrada anterior, o Map
estado no exemplo a seguir invoca uma AWS Lambda função nomeada ship-val
uma vez para cada item da matriz no shipped
campo.
"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:123456789012: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 Map
estado é uma JSON matriz, em que 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:us-east-1:123456789012:function:ship-val",
"End": true
}
}
},
"End": true
}
O ItemSelector
bloco substitui a entrada das iterações por um JSON nó. Esse nó contém os dados do item atual do objeto Context e as informações de correio do delivery-partner
campo da entrada de Map
estado. 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 Map
estado deve incluir uma JSON matriz. 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
. ItemsPath
É necessário identificar um campo cujo valor seja uma JSON matriz.
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 Map
estado é uma JSON matriz, em que cada item é a saída de uma iteração.
Para ver mais informações sobre entradas e saídas do estado Mapa inline, consulte: