es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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étodo list_executions proporcionado por la clase Paginator del cliente stepfunctions, 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:

    step_function_client = boto3.client("stepfunctions")
    paginator = step_function_client.get_paginator('list_executions')
    operation_parameters = {
        'stateMachineArn': ARN,
        'startDateFilter': {
            'gte': execution_date.isoformat(),
            'lte': (execution_date + timedelta(days=1)).isoformat()
        },
    }
    execution_iterator = paginator.paginate(**operation_parameters)
    executions = [
        i
        for page in execution_iterator
        for i in page['executions']
    ]
    

    En este código, primero creamos un objeto Paginator llamando al método get_paginator, especificando la acción de la API list_executions. Luego, definimos los filtros que deseamos aplicar construyendo el diccionario operation_parameters, el cual incluye stateMachineArn así como los filtros de fecha. El diccionario startDateFilter contiene dos claves, gte y lte, que significan “mayor o igual que” y “menor o igual que”, respectivamente. Pasamos este diccionario operation_parameters al método paginate del objeto Paginator, 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 comprehension executions.

    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.

Comments are closed.