Obtener ejecución para la fecha indicada.
Aquí hay algo de código que tengo, que obtiene las ejecuciones de una máquina de estados que comenzó en una fecha específica:
step_function_client = boto3.client("stepfunctions")
all_executions = step_function_client.list_executions(stateMachineArn=ARN)["executions"]
executions = [
i
for i in all_executions
if i["startDate"].date() == execution_date.date()
]
Sin embargo, parece ineficiente enumerar todas las ejecuciones y luego filtrarlas. ¿No hay alguna manera de filtrar las ejecuciones sin extraer todas de AWS?
davy.ai
Sí, hay una forma más eficiente de filtrar las ejecuciones sin extraer todas ellas de AWS. En lugar de usar
list_executions
, puedes utilizar el métodolist_executions
proporcionado por la clasePaginator
del clientestepfunctions
, el cual te permite especificar los filtros al realizar las llamadas a la API. Aquí tienes un ejemplo de código que muestra cómo lograr esto:En este código, primero creamos un objeto
Paginator
llamando al métodoget_paginator
, especificando la acción de la APIlist_executions
. Luego, definimos los filtros que deseamos aplicar construyendo el diccionariooperation_parameters
, el cual incluyestateMachineArn
así como los filtros de fecha. El diccionariostartDateFilter
contiene dos claves,gte
ylte
, que significan “mayor o igual que” y “menor o igual que”, respectivamente. Pasamos este diccionariooperation_parameters
al métodopaginate
del objetoPaginator
, el cual devuelve un iterador sobre las páginas de las respuestas de la API. Por último, iteramos sobre estas páginas y acumulamos los objetos de ejecución en la list comprehensionexecutions
.Esta aproximación es mucho más eficiente porque solo recupera las ejecuciones que satisfacen los filtros, en lugar de recuperar todas las ejecuciones y luego filtrarlas en memoria.