Uso de Registros de CloudWatch para registrar el historial de ejecuciones en Step Functions
Los flujos de trabajo estándar registran el historial de ejecuciones en AWS Step Functions, aunque opcionalmente puede configurar el registro en Registros de Amazon CloudWatch.
A diferencia de los flujos de trabajo estándar, los flujos de trabajo rápidos no registran el historial de ejecuciones en AWS Step Functions. Para consultar el historial de ejecuciones y los resultados de un flujo de trabajo rápido, tiene que configurar el registro en Registros de Amazon CloudWatch. La publicación de registros no bloquea ni ralentiza las ejecuciones.
Garantías de entrega de registro
Los registros de Amazon CloudWatch se entregan en la medida que es posible. La integridad y la puntualidad de las entradas de registro no están garantizadas. Si necesita un historial del flujo de trabajo garantizado en flujos de trabajo rápidos, le recomendamos que implemente los pasos del flujo de trabajo para registrar los datos en un servicio de almacenamiento de datos adecuado, como Amazon DynamoDB. Como alternativa, podría considerar la posibilidad de utilizar flujos de trabajo estándar para un historial de ejecución garantizado.
Información sobre precios
Al configurar el registro, se aplicarán los cargos de CloudWatch Logs
Configuración de registros
Cuando crea un flujo de trabajo estándar utilizando la consola de Step Functions, esa máquina de estado no estará configurada para enviar registros a Registros de CloudWatch. Cuando crea un flujo de trabajo rápido utilizando la consola de Step Functions, esa máquina de estado estará configurada por defecto para enviar registros a Registros de CloudWatch.
Para los flujos de trabajo rápidos, Step Functions puede crear un rol con la política de AWS Identity and Access Management (IAM) necesaria para CloudWatch Logs. Si se crea un flujo de trabajo estándar o un flujo de trabajo rápido mediante la API, la CLI o CloudFormation, Step Functions no habilitará el registro de forma predeterminada y tendrá que asegurarse de que el rol tenga los permisos necesarios.
En cada ejecución que se inicia desde la consola, Step Functions proporciona un enlace a CloudWatch Logs, configurado con el filtro correcto para obtener los eventos de registro específicos para dicha ejecución.
Opcionalmente, puede configurar claves AWS KMS administradas por el cliente para cifrar sus registros. Consulte Cifrado de datos en reposo para obtener más información y configurar los permisos.
Para configurar el registro, puede transferir el parámetro LoggingConfiguration al utilizar CreateStateMachine o UpdateStateMachine. Puede analizar aún más los datos en CloudWatch Logs mediante CloudWatch Logs Insights. Para obtener más información, consulte Análisis de los datos de registro con información de CloudWatch Logs.
Cargas de CloudWatch Logs
Los eventos del historial de ejecución pueden contener propiedades de entrada o salida en sus definiciones. Si la entrada o la salida de escape enviada a CloudWatch Logs supera los 248 KiB, se truncará como resultado de las cuotas de CloudWatch Logs.
-
Para determinar si una carga se ha truncado, revise las propiedades
inputDetailsyoutputDetails. Para obtener más información, consulte el Tipo de datosHistoryEventExecutionDataDetails. -
En el caso de los flujos de trabajo estándar, puede ver el historial de ejecución completo mediante
GetExecutionHistory. -
GetExecutionHistoryno está disponible para flujos de trabajo rápidos. Puede usar los ARN de Amazon S3 para ver las entradas y salidas completas. Para obtener más información, consulte Uso de los ARN de Amazon S3 en lugar de pasar cargas útiles de gran tamaño en Step Functions.
Políticas de IAM para registrarse en CloudWatch Logs
También tendrá que configurar el rol de IAM de ejecución de su máquina de estado para que tenga el permiso adecuado para registrarse en CloudWatch Logs, como se muestra en el siguiente ejemplo.
Ejemplo de políticas de IAM
A continuación se muestra una política de ejemplo que puede utilizar para configurar los permisos. Como se muestra en el siguiente ejemplo, debe especificar * en el campo Resource. Las acciones de la API de CloudWatch, como CreateLogDelivery y DescribelogGroups, no admiten los tipos de recursos definidos por Amazon CloudWatch Logs. Para obtener más información, consulte Acciones definidas por Amazon CloudWatch Logs.
-
Para obtener información sobre los recursos de CloudWatch, consulte Recursos y operaciones de CloudWatch Logs en la Guía del usuario de Amazon CloudWatch.
-
Para obtener información sobre los permisos necesarios para configurar el envío de registros a CloudWatch Logs, consulte Permisos de usuario en la sección titulada Registros enviados a CloudWatch Logs.
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:CreateLogStream", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutLogEvents", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" } ] }
Niveles de registro para eventos de ejecución de Step Functions
Los niveles de registro van de ALL a ERROR a FATAL y a OFF. Todos los tipos de eventos se registran cuando se configura en ALL; no se registra ningún tipo de evento cuando se configura en OFF. Para ERROR y FATAL, consulte la tabla siguiente.
Para obtener más información sobre los datos de ejecución que se muestran para las ejecuciones de flujos de trabajo rápidos en función de estos Niveles de registro, consulte Diferencias de experiencia entre las consolas estándar y rápidas.
| Tipo de evento | ALL |
ERROR |
FATAL |
OFF |
|---|---|---|---|---|
|
ChoiceStateEntered |
Registrado | No registrado | No registrado | No registrado |
|
ChoiceStateExited |
Registrado | No registrado | No registrado | No registrado |
|
ExecutionAborted |
Registrado | Registrado | Registrado | No registrado |
|
ExecutionFailed |
Registrado | Registrado | Registrado | No registrado |
|
ExecutionStarted |
Registrado | No registrado | No registrado | No registrado |
|
ExecutionSucceeded |
Registrado | No registrado | No registrado | No registrado |
|
ExecutionTimedOut |
Registrado | Registrado | Registrado | No registrado |
|
FailStateEntered |
Registrado | Registrado | No registrado | No registrado |
|
LambdaFunctionFailed |
Registrado | Registrado | No registrado | No registrado |
| LambdaFunctionScheduled | Registrado | No registrado | No registrado | No registrado |
|
LambdaFunctionScheduleFailed |
Registrado | Registrado | No registrado | No registrado |
|
LambdaFunctionStarted |
Registrado | No registrado | No registrado | No registrado |
|
LambdaFunctionStartFailed |
Registrado | Registrado | No registrado | No registrado |
|
LambdaFunctionSucceeded |
Registrado | No registrado | No registrado | No registrado |
|
LambdaFunctionTimedOut |
Registrado | Registrado | No registrado | No registrado |
|
MapIterationAborted |
Registrado | Registrado | No registrado | No registrado |
|
MapIterationFailed |
Registrado | Registrado | No registrado | No registrado |
|
MapIterationStarted |
Registrado | No registrado | No registrado | No registrado |
|
MapIterationSucceeded |
Registrado | No registrado | No registrado | No registrado |
|
MapRunAborted |
Registrado | Registrado | No registrado | No registrado |
|
MapRunFailed |
Registrado | Registrado | No registrado | No registrado |
|
MapStateAborted |
Registrado | Registrado | No registrado | No registrado |
|
MapStateEntered |
Registrado | No registrado | No registrado | No registrado |
|
MapStateExited |
Registrado | No registrado | No registrado | No registrado |
|
MapStateFailed |
Registrado | Registrado | No registrado | No registrado |
|
MapStateStarted |
Registrado | No registrado | No registrado | No registrado |
|
MapStateSucceeded |
Registrado | No registrado | No registrado | No registrado |
|
ParallelStateAborted |
Registrado | Registrado | No registrado | No registrado |
|
ParallelStateEntered |
Registrado | No registrado | No registrado | No registrado |
|
ParallelStateExited |
Registrado | No registrado | No registrado | No registrado |
| ParallelStateFailed | Registrado | Registrado | No registrado | No registrado |
|
ParallelStateStarted |
Registrado | No registrado | No registrado | No registrado |
|
ParallelStateSucceeded |
Registrado | No registrado | No registrado | No registrado |
|
PassStateEntered |
Registrado | No registrado | No registrado | No registrado |
|
PassStateExited |
Registrado | No registrado | No registrado | No registrado |
|
SucceedStateEntered |
Registrado | No registrado | No registrado | No registrado |
|
SucceedStateExited |
Registrado | No registrado | No registrado | No registrado |
|
TaskFailed |
Registrado | Registrado | No registrado | No registrado |
|
TaskScheduled |
Registrado | No registrado | No registrado | No registrado |
| TaskStarted | Registrado | No registrado | No registrado | No registrado |
|
TaskStartFailed |
Registrado | Registrado | No registrado | No registrado |
|
TaskStateAborted |
Registrado | Registrado | No registrado | No registrado |
|
TaskStateEntered |
Registrado | No registrado | No registrado | No registrado |
| TaskStateExited | Registrado | No registrado | No registrado | No registrado |
| TaskSubmitFailed | Registrado | Registrado | No registrado | No registrado |
| TaskSubmitted | Registrado | No registrado | No registrado | No registrado |
| TaskSucceeded | Registrado | No registrado | No registrado | No registrado |
| TaskTimedOut | Registrado | Registrado | No registrado | No registrado |
| WaitStateAborted | Registrado | Registrado | No registrado | No registrado |
| WaitStateEntered | Registrado | No registrado | No registrado | No registrado |
| WaitStateExited | Registrado | No registrado | No registrado | No registrado |
Solución de problemas de registro en Registros de CloudWatch
Si su máquina de estado no puede enviar registros a Registros de CloudWatch o si recibe el error: “AccessDeniedException : The state machine IAM Role is not authorized to access
the Log Destination”, intente los siguientes pasos:
-
Compruebe que el rol de ejecución de su máquina de estado tenga permisos para registrar en Registros de CloudWatch.
Al llamar a los puntos de conexión de la API CreateStateMachine o UpdateMachine, asegúrese de que el rol de IAM especificado en el parámetro
roleArnproporciona los permisos necesarios, como se muestra en el ejemplo de política de IAM anterior. -
Compruebe que la política de recursos de Registros de CloudWatch no supere el límite de 5120 caracteres.
Si la política supera el límite de caracteres, añada el prefijo a los nombres de los grupos de registros
/aws/vendedlogs/statespara conceder permisos a las máquinas de su estado y evitar el límite.Cuando crea un grupo de registros en la consola de Step Functions, los nombres sugeridos para los grupos de registros ya incluyen el prefijo
/aws/vendedlogs/states. Para obtener más información sobre las mejores prácticas de registro, consulte Evasión de los límites de tamaño de políticas de recursos de CloudWatch. -
Compruebe que el número de políticas de recursos de registro de CloudWatch Logs en la cuenta sea inferior a diez.
Registros de CloudWatch tiene una cuota de diez políticas de recursos por región y por cuenta. Si intenta habilitar el registro en una máquina de estado que ya tiene 10 políticas de recursos, la máquina de estado no se creará ni actualizará, y recibirá un error. Para obtener más información sobre las cuotas de registro, consulte Cuotas de Registros de CloudWatch.
Para verificar el problema, compruebe la cantidad de políticas de recursos mediante el comando de la CLI:
aws logs describe-resource-policiesPara resolver el problema, modifique las políticas de recursos existentes.
En primer lugar, realice una copia de seguridad de las políticas existentes. A continuación, una acciones o recursos similares en una nueva política y utilice el siguiente comando de la CLI para crear un nuevo origen de entrega en la cuenta:
Tras realizar una copia de seguridad de las políticas y actualizarlas, elimine las políticas que no se utilicen con el siguiente comando:
aws logs delete-resource-policy --policy-name <PolicyNameToBeDeleted>