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á.
Manipule dados de estado usando parâmetros nos fluxos de trabalho do Step Functions
Os ResultSelector
camposInputPath
, Parameters
e fornecem uma maneira de manipular à JSON medida que ele se move pelo seu fluxo de trabalho. InputPath
pode limitar a entrada que é passada filtrando a JSON notação usando um caminho (consulteUsando caminhos para acessar a entrada para fluxos de trabalho do Step Functions). O campo Parameters
permite transmitir um conjunto de pares de chave-valor em que os valores podem ser estáticos, incluídos na definição da máquina de estado, ou selecionados na entrada por meio de um caminho. O ResultSelector
campo fornece uma forma de manipular o resultado do estado antes de ser ResultPath
aplicado.
AWS Step Functions aplica o InputPath
campo primeiro e depois o Parameters
campo. É possível primeiro filtrar a entrada bruta para uma seleção desejada usando InputPath
e, então, aplicar Parameters
para manipular ainda mais essa entrada ou adicionar novos valores. Em seguida, você pode usar o campo ResultSelector
para manipular a saída do estado antes da aplicação de ResultPath
.
InputPath
Use InputPath
para selecionar uma parte da entrada de estado.
Por exemplo, vamos supor que a entrada para seu estado inclua o seguinte:
{
"comment": "Example for InputPath.",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
Você poderá aplicar InputPath
.
"InputPath": "$.dataset2",
Com o anteriorInputPath
, o seguinte é o JSON que é passado como entrada.
{
"val1": "a",
"val2": "b",
"val3": "c"
}
nota
Um caminho pode gerar uma seleção de valores. Considere o seguinte exemplo.
{ "a": [1, 2, 3, 4] }
Se você aplicar o caminho $.a[0:2]
, o resultado será o que é mostrado a seguir.
[ 1, 2 ]
Parâmetros
Esta seção descreve as diferentes formas de usar o campo Parâmetros.
Pares de chave/valor
Use o campo Parameters
para criar um conjunto de pares de chave-valor que serão transmitidos como entrada. Os valores de cada um podem ser valores estáticos, incluídos na definição da máquina de estado, ou selecionados na entrada ou no objeto de contexto por meio de um caminho. Para os pares de chave-valor, em que o valor é selecionado usando um caminho, o nome da chave deve terminar em .$
.
Por exemplo, vamos supor que você forneça a entrada a seguir.
{
"comment": "Example for Parameters.",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
Para selecionar algumas das informações, você poderá especificar esses parâmetros na definição da máquina de estado.
"Parameters": {
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
},
Dada a entrada anterior e o Parameters
campo, isso é o JSON que é passado.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Além da entrada, você pode acessar um JSON objeto especial, conhecido como objeto de contexto. O objeto de contexto inclui informações sobre a execução da máquina de estado. Consulte Objeto de contexto.
Recursos conectados
O campo Parameters
também pode transmitir informações para recursos conectados. Por exemplo, se o estado da sua tarefa estiver orquestrando um AWS Batch trabalho, você pode passar os API parâmetros relevantes diretamente para as API ações desse serviço. Para obter mais informações, consulte:
Amazon S3
Se a quantidade de dados da função do Lambda que você está transmitindo entre estados puder ultrapassar 262.144 bytes, recomendamos o uso do Amazon S3 para armazenar os dados e implementar um dos seguintes métodos:
Use o estado Mapa Distribuído em seu fluxo de trabalho para que o estado
Map
possa ler a entrada diretamente das fontes de dados do Amazon S3. Para obter mais informações, consulte Modo distribuído.Analise o Amazon Resource Name (ARN) do bucket no
Payload
parâmetro para obter o nome do bucket e o valor da chave. Para obter mais informações, consulte Usando o Amazon S3 ARNs em vez de transmitir grandes cargas em Step Functions.
Como alternativa, é possível ajustar a implementação para passar cargas menores em suas execuções.
ResultSelector
Use o campo ResultSelector
para manipular um resultado do estado antes da aplicação de ResultPath
. O campo ResultSelector
permite criar uma coleção de pares de chave-valor, em que os valores são estáticos ou selecionados a partir do resultado do estado. Usando o campo ResultSelector
, você pode escolher quais partes do resultado de um estado deseja passar para o campo ResultPath
.
nota
Com o campo ResultPath
, você pode adicionar a saída do campo ResultSelector
à entrada original.
ResultSelector
é um campo opcional nos seguintes estados:
Por exemplo, as integrações de serviço do Step Functions retornam metadados além da carga útil no resultado. ResultSelector
pode selecionar partes do resultado e mesclá-las com a entrada de estado com ResultPath
. Neste exemplo, queremos selecionar apenas o resourceType
e e ClusterId
mesclá-lo com a entrada de estado de um Amazon EMR createCluster .sync. Considerando o seguinte:
{
"resourceType": "elasticmapreduce",
"resource": "createCluster.sync",
"output": {
"SdkHttpMetadata": {
"HttpHeaders": {
"Content-Length": "1112",
"Content-Type": "application/x-amz-JSON-1.1",
"Date": "Mon, 25 Nov 2019 19:41:29 GMT",
"x-amzn-RequestId": "1234-5678-9012"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "1234-5678-9012"
},
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Em seguida, você pode selecionar resourceType
e ClusterId
usando ResultSelector
:
"Create Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Parameters": {
<some parameters>
},
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
"ResultPath": "$.EMROutput",
"Next": "Next Step"
}
Com a entrada fornecida, usar ResultSelector
gera:
{
"OtherDataFromInput": {},
"EMROutput": {
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
"ResourceType": "elasticmapreduce",
}
}
Nivelamento de uma matriz de matrizes
Se o estado Estado do fluxo de trabalho paralelo ou Mapear estado do fluxo de trabalho em suas máquinas de estado retornar uma matriz de matrizes, você poderá transformá-las em uma matriz nivelada com o campo ResultSelector. Você pode incluir esse campo na definição do estado Paralelo ou Mapa para manipular o resultado desses estados.
Para nivelar matrizes, use a JMESPathsintaxe [*]
ResultSelector
campo conforme mostrado no exemplo a seguir.
"ResultSelector": { "flattenArray.$": "$[*][*]" }
Para exemplos mostrando como nivelar uma matriz, consulte a Etapa 3 nos seguintes tutoriais: