

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.

# Prácticas recomendadas para Step Functions
<a name="sfn-best-practices"></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).

Los siguientes temas son prácticas recomendadas para ayudarle a administrar y optimizar los flujos de trabajo de Step Functions.

**Topics**
+ [Optimización de los costos mediante flujos de trabajo rápidos](#cost-opt-exp-workflows)
+ [Etiquetado de máquinas de estado y actividades en Step Functions](#concepts-tagging)
+ [Uso de tiempos de espera para evitar las ejecuciones bloqueadas del flujo de trabajo de Step Functions](#sfn-stuck-execution)
+ [Uso de Amazon S3 ARNs en lugar de transferir grandes cargas en Step Functions](#avoid-exec-failures)
+ [Inicio de nuevas ejecuciones para evitar alcanzar la cuota de historial en Step Functions](#bp-history-limit)
+ [Gestionar excepciones transitorias del servicio de Lambda](#bp-lambda-serviceexception)
+ [Evitar la latencia al sondear tareas de actividad](#bp-activity-pollers)
+ [Evitar los límites CloudWatch de tamaño de la política de recursos](#bp-cwl)

## Optimización de los costos mediante flujos de trabajo rápidos
<a name="cost-opt-exp-workflows"></a>

Step Functions determina los precios de los flujos de trabajo estándar y rápidos según el tipo de flujo de trabajo que utilice para crear sus máquinas de estados. Para optimizar el costo de sus flujos de trabajo sin servidor, puede seguir una de las siguientes recomendaciones o ambas:

Para obtener información sobre cómo afecta a la facturación la elección de un tipo de flujo de trabajo estándar o rápidos, consulte [Precios de AWS Step Functions](https://aws.amazon.com/step-functions/pricing/).

### Anidar flujos de trabajo rápidos dentro de flujos de trabajo estándar
<a name="cost-opt-exp-wflow-nesting"></a>

Step Functions ejecuta flujos de trabajo que tienen una duración y un número de pasos finitos. Algunos flujos de trabajo pueden completar la ejecución en un breve periodo de tiempo. Otros pueden requerir una combinación de high-event-rate flujos de trabajo y de larga duración. Con Step Functions, puede crear flujos de trabajo grandes y complejos a partir de varios flujos de trabajo más pequeños y sencillos. 

Por ejemplo, para crear un flujo de trabajo de procesamiento de pedidos, puede incluir todas las acciones no idempotentes en un flujo de trabajo estándar. Esto podría incluir acciones como la aprobación de pedidos mediante la interacción humana y el procesamiento de pagos. A continuación, puede combinar una serie de acciones idempotentes, como enviar notificaciones de pago y actualizar el inventario de productos, en un flujo de trabajo rápido. Puede agrupar este flujo de trabajo rápido en el flujo de trabajo estándar. En este ejemplo, el flujo de trabajo estándar se conoce como *máquina de estado principal*. El flujo de trabajo rápido anidado se conoce como *máquina de estado secundaria*.

### Migración de flujos de trabajo estándar a flujos de trabajo rápidos:
<a name="cost-opt-exp-wflow-conversion"></a>

Debe considerar la migración de sus flujos de trabajo estándar a flujos de trabajo rápidos si cumplen los siguientes requisitos:
+ Su flujo de trabajo debe completar la ejecución en cinco minutos.
+ El flujo de trabajo se ajusta a un modelo de *at-least-once*ejecución, lo que significa que cada paso del flujo de trabajo puede ejecutarse más de una vez.
+ El flujo de trabajo **no** utiliza los patrones de integración de servicios `.waitForTaskToken` o `.sync`.

**importante**  
Los flujos de trabajo exprés utilizan Amazon CloudWatch Logs para registrar los historiales de ejecución. Si utiliza CloudWatch Logs, incurrirá en costes adicionales.

**Cómo migrar un flujo de trabajo estándar a un flujo de trabajo rápido mediante la consola**

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. En la página **Máquinas de estados**, seleccione una máquina de estado de tipo estándar para abrirla.
**sugerencia**  
En la lista desplegable **Cualquier tipo**, seleccione **Estándar** para filtrar la lista de máquinas de estados y ver solo los flujos de trabajo estándar.

1. Seleccione **Copiar en uno nuevo**.

   Workflow Studio se abre en [Modo Diseño](workflow-studio.md#wfs-interface-design-mode) mostrando el flujo de trabajo de la máquina de estado que ha seleccionado.

1. (Opcional) Actualice el diseño del flujo de trabajo.

1. Especifique un nombre para la máquina de estado. Para ello, seleccione el icono de edición situado junto al nombre predeterminado de la máquina de **MyStateMachine**estado. A continuación, en **Configuración de máquina de estado**, especifique un nombre en el cuadro **Nombre de la máquina de estado**.

1. (Opcional) En **Configuración de máquina de estado**, especifique otros ajustes del flujo de trabajo, como el tipo de máquina de estado y su función de ejecución.

   Asegúrese de elegir **Rápido** en **Tipo**. Mantenga el resto de selecciones predeterminadas en la **Configuración de máquina de estado**.
**nota**  
Si va a migrar un flujo de trabajo estándar previamente definido en [AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-stepfunctions-readme.html)oAWS SAM, debe cambiar el valor `Type` y el `Resource` nombre.

1. En el cuadro de diálogo **Confirmar creación de rol**, elija **Confirmar** para continuar.

   También puede seleccionar **Ver configuración de rol** para volver a **Configuración de máquina de estado**.
**nota**  
Si se elimina el rol de IAM que crea Step Functions, no se podrá volver a crear más adelante. Asimismo, si se modifica el rol (por ejemplo, eliminando Step Functions de las entidades principales de la política de IAM), Step Functions no podrá restablecer la configuración original más adelante. 

Para obtener más información sobre las prácticas recomendadas y las directrices a la hora de gestionar la optimización de los costes de sus flujos de trabajo, consulte [Creación de flujos de trabajo rentables AWS Step Functions](https://aws.amazon.com/blogs/compute/building-cost-effective-aws-step-functions-workflows/).

## Etiquetado de máquinas de estado y actividades en Step Functions
<a name="concepts-tagging"></a>

AWS Step Functionsadmite el etiquetado de máquinas de estados (tanto estándar como exprés) y actividades. Las etiquetas pueden ayudarlo a rastrear y administrar sus recursos y a proporcionar una mayor seguridad a sus políticas AWS Identity and Access Management (de IAM). Después de etiquetar los recursos de Step Functions, puede administrarlos conGrupos de recursos de AWS. Para aprender cómo, consulte la [Guía del usuario de Grupos de recursos de AWS](https://docs.aws.amazon.com/ARG/latest/userguide/). 

En el caso de la autorización basada en etiquetas, los recursos de ejecución de máquinas de estado, como se muestra en el siguiente ejemplo, heredan las etiquetas asociadas a una máquina de estado.

```
arn:partition:states:region:account-id:execution:<StateMachineName>:<ExecutionId>
```

Cuando llamas [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)o cuando especificas el ARN del recurso de ejecución, Step Functions utiliza las etiquetas asociadas a la máquina de estados para aceptar o denegar la solicitud mientras realiza la autorización basada en etiquetas. APIs Esto ayuda a permitir o denegar el acceso a las ejecuciones de máquina de estado en el nivel de las máquinas de estado.

Para revisar las restricciones relacionadas con el etiquetado de recursos, consulte [Restricciones relacionadas con el etiquetado](service-quotas.md#sfn-limits-tagging).

### Etiquetado para asignación de costos
<a name="tagging-cost"></a>

Puede usar etiquetas de asignación de costos para identificar el propósito de una máquina de estados y reflejar esa organización en su AWS factura. Inscríbase para que la factura de su AWS cuenta incluya las etiquetas, las claves y los valores. Consulte [Configuración de un informe de asignación de costos mensual](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html#allocation-report) en la *Guía del usuario de AWS Billing* para obtener detalles sobre la configuración de informes.

Por ejemplo, podría agregar etiquetas que representen el centro de costos y el objetivo de sus recursos de Step Functions, como se indica a continuación.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/sfn-best-practices.html)

### Etiquetado de seguridad
<a name="tagging-security"></a>

IAM permite controlar el acceso a los recursos en función de las etiquetas. Para controlar el acceso según las etiquetas, proporcione información sobre las etiquetas de recurso en el elemento de condición de una política de IAM.

Por ejemplo, puede restringir el acceso a todos los recursos de Step Functions que incluyan una etiqueta con la clave `environment` y el valor `production`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "states:TagResource",
                "states:DeleteActivity",
                "states:DeleteStateMachine",
                "states:StopExecution"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/environment": "production"}
            }
        }
    ]
}
```

Para obtener más información, consulte [Control del acceso mediante etiquetas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) en la Guía del usuario de IAM.

### Gestión de etiquetas en la consola de Step Functions
<a name="tagging-console"></a>

Puede ver y administrar las etiquetas de sus máquinas de estado en la consola de Step Functions. En la página **Detalles** de un equipo de estado, seleccione **Etiquetas**.

### Gestión de etiquetas con las acciones de la API de Step Functions
<a name="tagging-api"></a>

Para administrar etiquetas mediante la API de Step Functions, utilice las siguientes acciones de la API:
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html)

## Uso de tiempos de espera para evitar las ejecuciones bloqueadas del flujo de trabajo de Step Functions
<a name="sfn-stuck-execution"></a>

De forma predeterminada, Amazon States Language no especifica tiempos de espera para las definiciones de máquina de estado. Sin un tiempo de espera explícito, Step Functions a menudo se basa únicamente en una respuesta de un proceso de trabajo empleado de actividad para saber que una tarea se ha completado. Si algo va mal y no se especifica el campo `TimeoutSeconds` para un estado `Activity` o `Task`, una ejecución se bloquea a la espera una respuesta que nunca llegará.

Para evitar esto, especifique un límite de tiempo de espera razonable cuando cree una `Task` en la máquina de estado. Por ejemplo: 

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:region:account-id:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "Next": "NextState"
}
```

Si utilizas una [devolución de llamada con un token de tarea (. waitForTaskToken)](connect-to-resource.md#connect-wait-token), te recomendamos que utilices Heartbeats y agregues el `HeartbeatSeconds` campo a la definición de tu `Task` estado. Puede configurar `HeartbeatSeconds` para que sea inferior al tiempo de espera de la tarea, de modo que si el flujo de trabajo falla debido a un error de latido, sabrá que se debe a un error en la tarea y no a que la tarea tarde mucho tiempo en completarse.

```
{
  "StartAt": "Push to SQS",
  "States": {
    "Push to SQS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "HeartbeatSeconds": 600,
      "Parameters": {
        "MessageBody": { "myTaskToken.$": "$$.Task.Token" },
        "QueueUrl": "https://sqs.us-east-1.amazonaws.com/account-id/push-based-queue"
      },
      "ResultPath": "$.SQS",
      "End": true
    }
  }
}
```

Para obtener más información, consulte [Estado de un flujo de trabajo de tarea](state-task.md) en la documentación de Amazon States Language.

**nota**  
Puede establecer un tiempo de espera para la máquina de estado mediante el campo `TimeoutSeconds` de su definición de Amazon States Language. Para obtener más información, consulte [Estructura de máquina de estado en Amazon States Language para flujos de trabajo de Step Functions](statemachine-structure.md).

## Uso de Amazon S3 ARNs en lugar de transferir grandes cargas en Step Functions
<a name="avoid-exec-failures"></a>

Las ejecuciones que pasan cargas de gran tamaño entre los estados pueden terminarse. Si los datos que va a pasar entre estados pueden superar los 256 KiB, utilice Amazon Simple Storage Service (Amazon S3) para almacenar los datos y analice el Nombre de recurso de Amazon (ARN) del bucket en el parámetro `Payload` para obtener el nombre del bucket y el valor de clave. También puede ajustar la implementación para que se pasen cargas más pequeñas en las ejecuciones.

En el siguiente ejemplo, una máquina de estados pasa la entrada a una AWS Lambda función, que procesa un archivo JSON en un bucket de Amazon S3. Tras ejecutar esta máquina de estados, la función de Lambda lee el contenido del archivo JSON y devuelve el contenido del archivo como salida.

**Crear la función de Lambda**  
La siguiente función de Lambda denominada `pass-large-payload` lee el contenido de un archivo JSON almacenado en un bucket de Amazon S3 específico.

**nota**  
Tras crear esta función de Lambda, no olvide proporcionar a su rol de IAM el permiso adecuado para leer desde un bucket de Amazon S3. Por ejemplo, asocie el ReadOnlyAccess permiso de **AmazonS3** al rol de la función Lambda.

```
import json
import boto3
import io
import os

s3 = boto3.client('s3')

def lambda_handler(event, context):
    event = event['Input']
    final_json = str()
    
    s3 = boto3.resource('s3')
    bucket = event['bucket'].split(':')[-1]
    filename = event['key']
    directory = "/tmp/{}".format(filename)
    
    s3.Bucket(bucket).download_file(filename, directory)
    
    with open(directory, "r") as jsonfile:
    
        final_json = json.load(jsonfile)
    
    os.popen("rm -rf /tmp")
    
    return final_json
```

**Crear la máquina de estado**  
La siguiente máquina de estados invoca la función de Lambda que creó anteriormente.

```
{  
   "StartAt":"Invoke Lambda function",
   "States":{  
      "Invoke Lambda function":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Parameters":{  
            "FunctionName":"arn:aws:lambda:us-east-2:123456789012:function:pass-large-payload",
            "Payload":{  
               "Input.$":"$"
            }
         },
         "OutputPath": "$.Payload",
         "End":true
      }
   }
}
```

En lugar de pasar una cantidad de datos grande en la entrada, podría guardar esos datos en un bucket de Amazon S3 y pasar el Nombre de recurso de Amazon (ARN) y del bucket en el parámetro `Payload` para obtener el nombre del bucket y el valor de clave. Entonces, la función de Lambda puede usar ese ARN para obtener acceso a los datos directamente. A continuación se muestra una entrada de ejemplo para la ejecución de la máquina de estado, donde los datos se almacenan en `data.json` en un bucket de Amazon S3 llamado `amzn-s3-demo-large-payload-json`.

```
{
  "key": "data.json",
  "bucket": "arn:aws:s3:::amzn-s3-demo-large-payload-json"
}
```

## Inicio de nuevas ejecuciones para evitar alcanzar la cuota de historial en Step Functions
<a name="bp-history-limit"></a>

AWS Step Functionstiene una cuota fija de 25 000 entradas en el historial de eventos de ejecución. Cuando una ejecución alcanza los 24 999 eventos, espera a que se produzca el siguiente evento.
+ Si el evento número 25 000 es `ExecutionSucceeded`, la ejecución finaliza correctamente.
+ Si el evento número 25 000 no es `ExecutionSucceeded`, se registra el evento `ExecutionFailed` y la ejecución de la máquina de estado produce un error al alcanzar el límite del historial

Para evitar alcanzar esta cuota para las ejecuciones de larga duración, pruebe alguna de las soluciones alternativas siguientes:
+ [Utilice el estado Map en modo distribuido](state-map-distributed.md). En este modo, el estado `Map` ejecuta cada iteración como una ejecución de flujo de trabajo secundario, lo que permite una alta simultaneidad de hasta 10 000 ejecuciones de flujos de trabajo secundarios en paralelo. Cada ejecución de flujo de trabajo secundario tiene su propio historial de ejecución independiente del flujo de trabajo principal.
+ Inicie una nueva ejecución de máquina de estado directamente desde el estado `Task` de una ejecución en curso. Para iniciar dichas ejecuciones de flujos de trabajo anidados, utilice la acción de la API `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` de Step Functions en la máquina de estado principal junto con los parámetros necesarios. Para obtener más información sobre el uso de flujos de trabajo anidados, consulte [Iniciar ejecuciones de flujo de trabajo desde un estado de tarea en Step Functions.](concepts-nested-workflows.md) o el tutorial [Utilizar una acción de la API Step Functions para continuar una nueva ejecución](tutorial-continue-new.md).
**sugerencia**  
Para implementar un ejemplo de flujo de trabajo anidado, consulte [Optimización de costos](https://catalog.workshops.aws/stepfunctions/nested-workflow) en *The AWS Step Functions Workshop*.
+ Implemente un patrón que utilice una AWS Lambda función que pueda iniciar una nueva ejecución de su máquina de estados para dividir el trabajo en curso entre varias ejecuciones del flujo de trabajo. Para obtener más información, consulte el tutorial [Uso de una función de Lambda para continuar con una nueva ejecución en Step Functions](tutorial-use-lambda-cont-exec.md).

## Gestionar excepciones transitorias del servicio de Lambda
<a name="bp-lambda-serviceexception"></a>

AWS Lambdaen ocasiones, pueden producirse errores de servicio transitorios. En este caso, la invocación de resultados de Lambda da como resultado un error 500, como `ClientExecutionTimeoutException`, `ServiceException`, `AWSLambdaException` o `SdkClientException`. Use la práctica recomendada de controlar estas excepciones de manera proactiva en la máquina de estado y ejecutar `Retry` para volver a invocar la función de Lambda o `Catch` para capturar el error.

Los errores de Lambda se notifican como `Lambda.ErrorName`. Para reintentar la función de Lambda después de una excepción de error de servicio, puede usar el código `Retry` siguiente:

```
"Retry": [ {
   "ErrorEquals": [ "Lambda.ClientExecutionTimeoutException", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],
   "IntervalSeconds": 2,
   "MaxAttempts": 6,
   "BackoffRate": 2
} ]
```

**nota**  
Históricamente, los errores no controlados en los tiempos de ejecución de Lambda solo se notificaban como `Lambda.Unknown`. En los tiempos de ejecución más recientes, los tiempos de espera se notifican como `Sandbox.Timedout` en la salida de error.  
Cuando Lambda supera el número máximo de invocaciones, el error notificado es `Lambda.TooManyRequestsException`.  
Haga coincidir `Lambda.Unknown`, `Sandbox.Timedout` y `States.TaskFailed` para gestionar posibles errores. También puede usar `States.ALL`, pero debe estar solo y al final de la lista.  
Para obtener más información sobre los errores de Lambda `Handled` y `Unhandled`, consulte `FunctionError` en la [Guía para desarrolladores de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_ResponseSyntax). 

Para obtener más información, consulte los siguientes temas:
+ [Reintento después de un error](concepts-error-handling.md#error-handling-retrying-after-an-error)
+ [Tratamiento de condiciones de error en una máquina de estado de Step Functions](tutorial-handling-error-conditions.md)
+ [Errores de Invoke de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_Errors)

## Evitar la latencia al sondear tareas de actividad
<a name="bp-activity-pollers"></a>

La API de `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)` se ha diseñado para proporcionar un [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken) *exactamente una vez*. Si se descarta un `taskToken` durante la comunicación con un proceso de trabajo de actividad, se puede bloquear una serie de solicitudes `GetActivityTask` durante 60 segundos al esperar una respuesta hasta que se agote el tiempo de espera de `GetActivityTask`. 

Si solo tiene un pequeño número de sondeos que esperan una respuesta, es posible que todas las solicitudes se pongan en cola detrás de la solicitud bloqueada y se detengan. Sin embargo, si tiene un gran número de sondeos pendientes para cada Nombre de recurso de Amazon (ARN) de actividad y algún porcentaje de sus solicitudes están bloqueadas esperando, habrá muchas más que todavía pueden obtener un `taskToken` y comenzar a procesar el trabajo. 

Para los sistemas de producción recomendamos al menos 100 sondeos abiertos por ARN de actividad en cada momento. Si se bloquea un sondeo y una parte de los sondeos se ponen en cola detrás de ella, todavía hay muchas más solicitudes que recibirán un `taskToken` para procesar el trabajo mientras la solicitud `GetActivityTask` está bloqueada. 

Para evitar este tipo de problemas de latencia al sondear las tareas:
+ Implemente los sondeos como subprocesos independientes del trabajo en la implementación del proceso de trabajo de actividad.
+ Tenga al menos 100 sondeos abiertos por ARN de actividad en cada momento.
**nota**  
El escalado hasta 100 sondeos abiertos por ARN puede resultar costoso. Por ejemplo, 100 sondeos de funciones de Lambda por ARN resultan 100 veces más costosos que tener una sola función de Lambda con 100 subprocesos de sondeo. Tanto para reducir la latencia *como* para minimizar el costo, use un lenguaje que tenga E/S asincrónica e implemente varios subprocesos de sondeo por trabajador. Para ver un ejemplo de un proceso de actividad en el que los subprocesos de sondeo están separados de los subprocesos de trabajo, consulte [Ejemplo de proceso de trabajo de actividad en Ruby](concepts-activities.md#example-ruby-activity-worker). 

Para obtener más información sobre las actividades y los procesos de trabajo de actividad, consulte [Más información sobre las actividades de Step Functions](concepts-activities.md).

## Evitar los límites CloudWatch de tamaño de la política de recursos
<a name="bp-cwl"></a>

Cuando crea una máquina de estados con registro o actualiza una máquina de estado existente para habilitar el registro, Step Functions debe actualizar su política de recursos de CloudWatch registros con el grupo de registros que especifique. CloudWatch Las políticas de recursos de Logs están limitadas a 5.120 caracteres.

Cuando CloudWatch Logs detecta que una política se acerca al límite de tamaño, CloudWatch Logs habilita automáticamente el registro para los grupos de registros que comiencen por. `/aws/vendedlogs/`

Puede poner un prefijo a los nombres de los grupos de CloudWatch registros `/aws/vendedlogs/` para evitar el límite de tamaño de la política de recursos de CloudWatch Logs. Si crea un grupo de registros en la consola de Step Functions, el nombre sugerido del grupo de registros ya incluirá el prefijo `/aws/vendedlogs/states`. 

CloudWatch Logs también tiene una cuota de diez políticas de recursos por región y por cuenta. Si intentas habilitar el registro en una máquina de estados que ya tiene diez políticas de recursos de CloudWatch Logs en una región para una cuenta, la máquina de estados no se creará ni actualizará. Para obtener más información sobre las cuotas de registro, consulte [Cuotas de CloudWatch registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html). 

Si tiene problemas para enviar CloudWatch registros a Logs, consulte[Troubleshooting state machine logging to CloudWatch Logs](cw-logs.md#troubleshooting-logging-to-cloudwatch).