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.
Manipule los datos de estado mediante parámetros en los flujos de trabajo de Step Functions
Los InputPath
ResultSelector
campos Parameters
y proporcionan una forma de manipularlos a JSON medida que avanzan en el flujo de trabajo. InputPath
puede limitar la entrada que se pasa filtrando la JSON notación mediante una ruta (consulteUso de rutas para acceder a la entrada de los flujos de trabajo de Step Functions). El campo Parameters
permite superar un conjunto de pares de clave-valor, donde los valores son valores estáticos que se definen en la definición de máquina de estado o que se seleccionan de la entrada mediante una ruta. El campo ResultSelector
proporciona una forma de manipular el resultado del estado antes de aplicar ResultPath
.
AWS Step Functions aplica primero el InputPath
campo y, después, el Parameters
campo. Puede filtrar primero la entrada sin procesar para obtener la selección que desee mediante InputPath
y, a continuación, aplicar Parameters
para continuar manipulando esa entrada o para añadir valores nuevos. A continuación, puede utilizar el campo ResultSelector
para manipular la salida del estado antes de aplicar ResultPath
.
InputPath
Utilice InputPath
para seleccionar una parte de la entrada del estado.
Por ejemplo, suponga que la entrada del estado incluye lo siguiente:
{
"comment": "Example for InputPath.",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
Puede aplicar esta InputPath
.
"InputPath": "$.dataset2",
Con lo anteriorInputPath
, lo siguiente es lo JSON que se pasa como entrada.
{
"val1": "a",
"val2": "b",
"val3": "c"
}
nota
Una ruta puede generar una selección de valores. Considere el siguiente ejemplo.
{ "a": [1, 2, 3, 4] }
Si aplica la ruta $.a[0:2]
, el resultado es el siguiente.
[ 1, 2 ]
Parámetros
En esta sección se describen las diferentes formas en las que puede utilizar el campo Parameters.
Pares clave-valor
Utilice el campo Parameters
para crear una colección de pares clave-valor que se pasan como entrada. Los valores pueden ser valores estáticos que se incluyen en la definición de la máquina de estado, o pueden seleccionarse en la entrada o en el objeto de contexto con una ruta. Para los pares clave-valor cuyo valor se selecciona mediante una ruta, el nombre de la clave debe terminar por .$
.
Por ejemplo, suponga que proporciona la siguiente entrada.
{
"comment": "Example for Parameters.",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
Para seleccionar parte de la información, puede especificar estos parámetros en la definición de la máquina de estado.
"Parameters": {
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
},
Dada la entrada anterior y el Parameters
campo, esta es la JSON que se pasa.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Además de la entrada, puede acceder a un JSON objeto especial, conocido como objeto de contexto. El objeto de contexto incluye información acerca de la ejecución de la máquina de estado. Consulte Objeto Context (Contexto).
Recursos conectados
El campo Parameters
también puede pasar información a recursos conectados. Por ejemplo, si el estado de la tarea es organizar un AWS Batch trabajo, puede pasar los API parámetros relevantes directamente a las API acciones de ese servicio. Para obtener más información, consulte:
Amazon S3
Si los datos de la función de Lambda que pasa de un estado a otro pueden crecer hasta superar los 262 144 bytes, le recomendamos que utilice Amazon S3 para almacenar los datos e implementar uno de los siguientes métodos:
Utilice el estado Map Distributed en el flujo de trabajo para que el estado
Map
pueda leer la entrada directamente de las fuentes de datos de Amazon S3. Para obtener más información, consulte Modo distribuido.Analice el nombre del recurso de Amazon (ARN) del depósito en el
Payload
parámetro para obtener el nombre y el valor clave del depósito. Para obtener más información, consulte Uso de Amazon S3 ARNs en lugar de transferir grandes cargas en Step Functions.
También puede ajustar la implementación para que se pasen cargas más pequeñas en las ejecuciones.
ResultSelector
Utilice el campo ResultSelector
para manipular el resultado de un estado antes de aplicar ResultPath
. El campo ResultSelector
permite crear una colección de pares de clave-valor, donde los valores son estáticos o se seleccionan del resultado del estado. Con el campo ResultSelector
, puede elegir qué partes del resultado de un estado desea pasar al campo ResultPath
.
nota
Con el campo ResultPath
, puede añadir la salida del campo ResultSelector
a la entrada original.
ResultSelector
es un campo opcional en los siguientes estados:
Por ejemplo, las integraciones de servicios de Step Functions devuelven metadatos además de la carga del resultado. ResultSelector
puede seleccionar partes del resultado y combinarlas con la entrada de estado con ResultPath
. En este ejemplo, queremos seleccionar solo el símbolo resourceType
and y ClusterId
combinarlo con la entrada de estado de un archivo EMR createCluster .sync de Amazon. Dado lo siguiente:
{
"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"
}
}
Puede seleccionar entonces resourceType
y ClusterId
mediante 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"
}
Con la entrada dada, el uso de ResultSelector
produce:
{
"OtherDataFromInput": {},
"EMROutput": {
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
"ResourceType": "elasticmapreduce",
}
}
Aplanamiento de una matriz de matrices
Si el estado Estado del flujo de trabajo paralelo o Mapa del estado del flujo de trabajo de las máquinas de estado devuelve una matriz de matrices, puede transformarlas en una matriz plana con el campo ResultSelector. Puede incluir este campo dentro de la definición de estados Parallel o Map para manipular el resultado de estos estados.
Para aplanar las matrices, utilice la JMESPathsintaxis [*]
ResultSelector
campo, tal y como se muestra en el siguiente ejemplo.
"ResultSelector": { "flattenArray.$": "$[*][*]" }
Para ver ejemplos que muestran cómo aplanar una matriz, consulte el Paso 3 de los siguientes tutoriales: