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.
InputPath, Parámetros y ResultSelector
Los InputPath
ResultSelector
campos Parameters
y proporcionan una forma de manipular el JSON a medida que avanza en el flujo de trabajo. InputPath
puede limitar la entrada que se pasa filtrando la notación JSON mediante una ruta (consulteRutas). El campo Parameters
le permite superar un conjunto de pares de clave-valor, donde los valores son valores estáticos que define en su definición de máquina de estado o que se seleccionan de la entrada con una ruta. El ResultSelector
campo proporciona una forma de manipular el resultado del estado antes de ResultPath
aplicarlo.
AWS Step Functions aplica el campo InputPath
en primer lugar y, a continuación, el campo Parameters
. Puede filtrar primero la entrada sin procesar para obtener la selección que desea mediante InputPath
y, a continuación, aplicar Parameters
para manipular aún más esa entrada o para añadir valores nuevos. A continuación, puede utilizar el ResultSelector
campo para manipular la salida del estado antes de ResultPath
aplicarlo.
sugerencia
Utilice el simulador de flujo de datos de la consola Step Functions para probar la sintaxis de las
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 dicha InputPath
, lo siguiente es el objeto JSON que se pasa como la 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 de utilizar el campo Parámetros.
Pares clave-valor
Utilice el Parameters
campo de entrada de un conjunto de pares clave-valor que se transfiere 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"
}
},
Con la entrada anterior y el campo Parameters
, este es el objeto JSON que se pasa.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Además de la adición a la entrada, puede acceder a un objeto JSON especial conocido como el objeto de contexto. El objeto de contexto incluye información acerca de la ejecución de la máquina de estado. Consulte Objeto Context.
Recursos conectados
El campo Parameters
también puede pasar información a los recursos conectados. Por ejemplo, si el estado de la tarea sirve para organizar un trabajo de AWS Batch, puede pasar los parámetros correspondientes de la API directamente a las acciones de la API de dicho servicio. Para obtener más información, consulte:
Simple Storage Service (Amazon S3)
Si los datos de la función Lambda que está transfiriendo entre estados pueden 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 del mapa distribuido en su flujo de trabajo para que el
Map
estado pueda leer la entrada directamente de las fuentes de datos de Amazon S3. Para obtener más información, consulte Uso del estado del mapa en modo distribuido.Analice el nombre de recurso de Amazon (ARN) del bucket de en el
Payload
parámetro para obtener el nombre de bucket y el valor de la clave. Para obtener más información, consulte Utilice los ARN de Amazon S3 en lugar de transferir cargas grandes.
Como alternativa, puede ajustar la implementación para transferir cargas más pequeñas en sus ejecuciones.
ResultSelector
Utilice el ResultSelector
campo para manipular el resultado de un estado antes ResultPath
de aplicarlo. El ResultSelector
campo permite crear una colección de pares de valores clave, donde los valores son estáticos o se seleccionan del resultado del estado. Con el ResultSelector
campo, puede elegir qué partes del resultado de un estado desea transferir al ResultPath
campo.
nota
Con el ResultPath
campo, puede añadir la salida del ResultSelector
campo a la entrada original.
ResultSelector
es un campo opcional en los siguientes estados:
Por ejemplo, las integraciones del servicio Step Functions devuelven metadatos además de la carga útil del resultado. ResultSelector
puede seleccionar partes del resultado y combinarlas con la entrada de estado conResultPath
. En este ejemplo, queremos seleccionar solo el resourceType
y y ClusterId
combinarlo con la entrada de estado de un Amazon EMR CreateCluster.sync. Teniendo en cuenta 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"
}
}
A continuación, puede seleccionar resourceType
y ClusterId
usarResultSelector
:
"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 ResultSelector
produce:
{
"OtherDataFromInput": {},
"EMROutput": {
"ResourceType": "elasticmapreduce",
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}