Blog

So blättern Sie in Python durch alle Ergebnisse eines beliebigen AWS-API-Aufrufs

Mark van Holsteijn

Aktualisiert Oktober 15, 2025
2 Minuten

Wann immer Sie eine Liste oder eine Beschreibung in der AWS API verwenden, wird ein paginiertes Ergebnis zurückgegeben. Wenn Sie alle Ergebnisse einer Abfrage verarbeiten möchten, müssen Sie einen Paginator verwenden. In diesem Blog stelle ich Ihnen eine einfache Utility-Funktion vor, mit der Sie dies ganz einfach tun können.

der normale Weg

Der normale Weg, alle Ergebnisse einer AWS-API-Operation abzurufen, sieht wie folgt aus:

    describe_log_groups = logs.get_paginator("describe_log_groups")
    describe_log_streams = logs.get_paginator("describe_log_streams")

    for lg_page in describe_log_groups.paginate():
        for log_group in lg_page["logGroups"]:
            for page in describe_log_streams.paginate(
                logGroupName=log_group["logGroupName"]
            ):
                for log_stream in page["logStreams"]:
                    print(log_stream)

Wie Sie sehen, müssen Sie zwei Schleifen programmieren: eine zum Durchlaufen der Seiten und eine zum Durchlaufen der Seitenergebnisse.

Einführung in die Durchblättern-Funktion

Mit der folgenden Funktion können Sie den Code wesentlich übersichtlicher gestalten:

def page_through(client: BaseClient, function_name: str, **kwargs) -> Iterator[Any]:
    paginator = client.get_paginator(function_name)
    result_key = paginator.result_keys[0].expression
    for page in paginator.paginate(**kwargs):
        for response in page[result_key]:
            yield response

Die Funktion ermittelt den Namen des Ergebnisfelds in der Seite aus der Paginator-Schnittstelle und gibt jedes einzelne Ergebnis aus. Das Paginieren ist jetzt ausgeblendet, so dass Ihre Implementierung einfacher zu lesen ist.

Der neue Weg

Mit dieser Funktion sieht derselbe Code wie folgt aus:

    for log_group in page_through(logs, "describe_log_groups"):
        for log_stream in page_through(
            logs,
            "describe_log_streams",
            logGroupName=log_group["logGroupName"],
        ):
            print(log_stream)

Wenn Sie nur die vollständige Liste der Ergebnisse haben möchten, können Sie auch tippen:

  log_groups = list(page_through(logs, "describe_log_groups"))

Fazit

Diese einfache generische Python-Funktion page_through ermöglicht es Ihnen, immer alle Ergebnisse einer AWS-API-Operation auf einfache und elegante Weise abzurufen. Es wäre schön, wenn eine ähnliche Funktion in der boto3-API enthalten wäre.


Bild von Pexels aus Pixabay

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.