AWS SDK für Go: Zweite Version verpackt Service-Clients als einzelne Go-Module

Das neue Release braucht weniger Pointer für API-Parameter, führt einen einheitlichen Konfigurations-Typ ein und ermöglicht seitenübergreifendes Paginieren.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen
Amazons aws-Logo

(Bild: Pete Linforth, gemeinfrei)

Von
  • Silke Hahn

Amazon Web Services (AWS) hat die zweite Hauptversion seines Software Development Kits (SDK) für die Programmiersprache Go veröffentlicht. Laut Herausgeber ist Nutzerfeedback der ersten Version eingeflossen und neue Features der Sprache fanden Berücksichtigung.

Neu ist die überarbeitete Modularisierung: Version 2 des SDK paketiert jeden AWS Service Client als unabhängiges Go-Modul. Dadurch sollen Entwickler in ihren Anwendungen Dienst-Abhängigkeiten modellieren können. Feature-Updates und der Service Client zur App-Steuerung lassen sich somit getrennt handhaben und die Größe einzelner Module schrumpft. Go-Module gibt es seit Go 1.13, die Neuerung im SDK folgt der allgemeinen Versionierungs-Strategie bei Go.

Vereinfacht beziehungsweise vereinheitlicht sind Konfiguration und API-Client-Methoden: Statt zahlreicher Wege, eine API aufzurufen, bietet Version 2 einen einzigen API-Client, um Dienste aufzurufen. Dienstoperationen lassen sich dabei direkt auf dem Client aufrufen, wobei jede Methode die API-Eingabe zusammen mit dem Kontext entgegennimmt und dann die Antwort oder den Fehler zurückgibt.

Auch bei den Pointern für API-Parameter hat eine Straffung stattgefunden. In der neuen Version benötigt das SDK weniger Pointer-Referenzen als bisher. Typen lassen sich in Werte überführen, wann immer das gemäß API-Modelldaten möglich ist. Das betrifft offenbar auch die Map- und die Slice-Daten. Enums zählen nun zu den Type-String-Aliasen, lassen sich als Konstanten generieren und sind im Code direkt einsetzbar.

Laut AWS-Team vereinfacht das die Typen-Unterstützung für Enums in der IDE (Integrated Development Environment). Mit einem Codebeispiel illustriert das Team, wie sich Value Types für die API-Filter der DescribeInstance in der Amazon Elastic Cloud festlegen lassen. Filters und Values werden dabei statt zu Pointern (wie in Version 1 des SDK) zu Value Types:

result, err := client.DescribeInstances(context.TODO(), &ec2.DescribeInstancesInput {
    Filters: []types.Filter {
        {
            Name: aws.String("instance-state-name"),
            Values: []string {
                "running", 
                "pending", 
                "stopped",
           },
        },
    },
})

Die neue SDK-Version für Go sieht zum Konfigurieren einen einzigen Config-Typ vor, was die Interaktion zwischen Session- und Config-Typ vereinfacht. Die für jeden Service spezifischen Konfigurations-Flags haben die SDK-Entwickler in den Bereich individueller Service-Client-Optionen verschoben. Dahinter steckt laut Blogeintrag die Absicht, Konfigurationswerte, die der Service Client unterstützt, leichter aufzufinden.

Mit dem Befehl LoadDefaultConfig können Entwickler im Konfigurations-Paket die Standard-Konfigurationswerte offenbar benutzerdefiniert festlegen und Konfigurationswerte auch aus externen Quellen laden. Aussehen könnte das wie im folgenden Beispiel-Code – Details hierzu bietet der Entwicklerleitfaden zum AWS-SDK für Go.

// Load SDK configuration with shared config profile.
cfg, err := config.LoadDefaultConfig(context.TODO(),
    config.WithSharedConfigProfile(“profile-name”),
)
// Create Amazon S3 API client using path style addressing.
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
    o.UsePathStyle = true
})

Beim Paginieren kommen nicht länger Call-Back-Funktionen zum Einsatz mit einem einzigen Kontext über alle paginierten Dienstaufrufe hinweg, was die Fehlerbehandlung in der Vergangenheit erschwerte. Stattdessen stellt die neue SDK-Version den Kontext seitenweise bereit und erlaubt eine Iteration über API-Resultate, die mehrere Seiten umspannen kann. Laut Herausgeber soll auch die Performance gesteigert sein, so verweist das AWS-Team auf das eigene Benchmark-Programm und eine um die Hälfte reduzierte CPU-Auslastung.

Neu sind außerdem die Pakete AttributeValue und Expression Package der Amazon DynamoDB sowie der Amazon S3 Transfer Manager zum Übertragen großer Dateien in kleineren Portionen, wobei Goroutinen zum Zuge kommen.

Mehr Informationen dazu lassen sich dem Migrations-Leitfaden entnehmen. Weitere Code-Beispiele und vertiefende Informationen finden sich in der Releasemeldung im AWS-Blog.

(sih)