

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.

# Acceso a los datos de ejecución desde el objeto Context en Step Functions
<a name="input-output-contextobject"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos con JSONata](transforming-data.md).

El objeto Context es una estructura JSON interna que está disponible durante una ejecución y contiene información sobre la máquina de estados y la ejecución. El contexto proporciona a sus flujos de trabajo información sobre su ejecución específica. Sus flujos de trabajo pueden hacer referencia al objeto de contexto en una JSONata expresión con`$states.context`.

## Acceso al objeto Contexto
<a name="contextobject-access"></a>

**Para acceder al objeto Context en JSONata**

Para acceder al objeto Context en JSONata estados, `$states.context` utilícelo en una JSONata expresión. 

```
{
  "ExecutionID" : "{% $states.context.Execution.Id %}"
}
```

**Para acceder al objeto Context en JSONPath**

Para acceder al objeto Context en JSONPath, primero hay que `.$` añadirlo al final de la clave para indicar que el valor es una ruta. A continuación, anexe el valor `$$.` para seleccionar un nodo en el objeto Context.

```
{
  "ExecutionID.$": "$$.Execution.Id"
}
```

JSONPath los estados pueden hacer referencia al contexto (`$$.`) desde los siguientes JSONPath campos:
+ `InputPath`
+ `OutputPath`
+ `ItemsPath` (en los estados Map)
+ `Variable` (en los estados Choice)
+ `ResultSelector`
+ `Parameters`
+ Operadores de comparación entre variables

## Campos de objeto Context
<a name="contextobject-format"></a>

El objeto Context incluye información acerca de la máquina de estado, el estado, la ejecución y la tarea. El objeto JSON Context incluye nodos para cada tipo de datos en el siguiente formato:

```
{
    "Execution": {
        "Id": "String",
        "Input": {},
        "Name": "String",
        "RoleArn": "String",
        "StartTime": "Format: ISO 8601",
        "RedriveCount": Number,
        "RedriveTime": "Format: ISO 8601"
    },
    "State": {
        "EnteredTime": "Format: ISO 8601",
        "Name": "String",
        "RetryCount": Number
    },
    "StateMachine": {
        "Id": "String",
        "Name": "String"
    },
    "Task": {
        "Token": "String"
    }
}
```

Durante una ejecución, el objeto Context se rellena con datos relevantes. 

En algunas ocasiones, se añaden nuevos campos al contexto. Si está procesando el contexto JSON directamente, le recomendamos que elabore un código que pueda gestionar sin problemas los nuevos campos desconocidos. Por ejemplo, si utiliza la biblioteca Jackson para deserializar JSON, le recomendamos establecer `FAIL_ON_UNKNOWN_PROPERTIES` en `false` en su `ObjectMapper` para evitar una `UnrecognizedPropertyException`.

 El objeto Context `RedriveTime` solo está disponible si ha redriven una ejecución. Si ha utilizado [redriven a Map Run](redrive-map-run.md), el objeto de contexto `RedriveTime` solo está disponible para los flujos de trabajo secundarios de tipo estándar. Para un redriven Map Run con flujos de trabajo secundarios de tipo Express, `RedriveTime` no está disponible.

El contenido de una ejecución en curso incluye información detallada en el siguiente formato: 

```
{
    "Execution": {
        "Id": "arn:aws:states:region:123456789012:execution:stateMachineName:executionName",
        "Input": {
           "key": "value"
        },
        "Name": "executionName",
        "RoleArn": "arn:aws:iam::123456789012:role...",
        "StartTime": "2025-08-27T10:04:42Z"
    },
    "State": {
        "EnteredTime": "2025-08-27T10:04:42.001Z",
        "Name": "Test",
        "RetryCount": 3
    },
    "StateMachine": {
        "Id": "arn:aws:states:region:123456789012:stateMachine:stateMachineName",
        "Name": "stateMachineName"
    },
    "Task": {
        "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W"
    }
}
```

**Formato de marca temporal con fracciones de segundo**  
Step Functions sigue la ISO8601 especificación que establece que la salida puede ser de cero, tres, seis o nueve dígitos según sea necesario. Cuando una marca temporal tiene cero fracciones de segundo, Step Functions elimina los ceros finales en lugar de rellenar la salida.   
Si crea código que consume marcas temporales de Step Functions, el código debe poder procesar un número variable de fracciones de segundo.

## Datos del objeto Context para los estados Map
<a name="contextobject-map"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos con JSONata](transforming-data.md).

Al procesar un [estado `Map`](state-map.md), el contexto también contendrá `Index`, `Value` y `Source`. 

Para cada iteración de `Map` estado, `Index` contiene el número de índice del elemento de matriz que se está procesando actualmente, `Value` contiene el elemento de matriz que se está procesando y `Source` será el InputType de`CSV`, `JSON``JSONL`, o`PARQUET`.

Dentro de un estado `Map`, el objeto Context incluye los datos siguientes:

```
"Map": {
   "Item": {
      "Index" : Number,
      "Key"   : "String", // Only valid for JSON objects
      "Value" : "String",
      "Source": "String"
   }
}
```

Solo están disponibles en un estado `Map` y se pueden especificar en el campo `ItemSelector (Map)`.

**nota**  
Debe definir parámetros desde el objeto Context en el bloque `ItemSelector` del estado `Map` principal, no dentro de los estados incluidos en la sección `ItemProcessor`.

Si una máquina de estados utiliza un **JSONPath**`Map`estado, puede inyectar información del objeto Context de la siguiente manera.

```
{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "ItemSelector": {
        "ContextIndex.$": "$$.Map.Item.Index",
        "ContextValue.$": "$$.Map.Item.Value",
        "ContextSource.$": "$$.Map.Item.Source"
      },
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "TestPass",
        "States": {
          "TestPass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true
    }
  }
}
```

Por ejemplo JSONata, se puede acceder a la información adicional del contexto del estado del mapa desde la `$states.context` variable:

```
{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "ItemSelector": {
        "ContextIndex": "{% $states.context.Map.Item.Index %}",
        "ContextValue": "{% $states.context.Map.Item.Value %}",
        "ContextSource": "{% $states.context.Map.Item.Source %}"
      },
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "TestPass",
        "States": {
          "TestPass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true
    }
  }
}
```



Si ejecuta la máquina de estado anterior con la siguiente entrada, `Index` y `Value` se insertan en la salida.

```
[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]
```

El resultado de la ejecución devuelve los valores de los elementos `Index` y `Value` de cada una de las tres iteraciones de la siguiente manera:

```
[
  {
    "ContextIndex": 0,
    "ContextValue": {
      "who": "bob"
    },
    "ContextSource" : "STATE_DATA" 
  },
  {
    "ContextIndex": 1,
    "ContextValue": {
      "who": "meg"
    },
    "ContextSource" : "STATE_DATA" 
  },
  {
    
    "ContextIndex": 2,
    "ContextValue": {
      "who": "joe"
    },
    "ContextSource" : "STATE_DATA" 
  }
]
```

Tenga en cuenta que `$states.context.Map.Item.Source` será una de las siguientes:
+ Para la entrada de estado, el valor será: `STATE_DATA`
+ Para `Amazon S3 LIST_OBJECTS_V2` con `Transformation=NONE`, el valor mostrará la URI de S3 del bucket. Por ejemplo: `S3://bucket-name`. 
+ Para el resto de tipos de entrada, el valor será la URI de Amazon S3. Por ejemplo: `S3://bucket-name/object-key`.