Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verbindung zu Aurora DSQL-Clustern mit einem Go-Connector herstellen
Der Aurora DSQL Connector for Go
Über den Konnektor
Aurora DSQL erfordert eine IAM-basierte Authentifizierung mit zeitlich begrenzten Token, die bestehende Go PostgreSQL-Treiber nicht nativ unterstützen. Der Aurora DSQL Connector for Go fügt dem pgx-Treiber eine Authentifizierungsebene hinzu, die die IAM-Token-Generierung übernimmt, sodass Sie eine Verbindung zu Aurora DSQL herstellen können, ohne Ihre bestehenden pgx-Workflows zu ändern.
Was ist Aurora DSQL-Authentifizierung?
In Aurora DSQL umfasst die Authentifizierung:
-
IAM-Authentifizierung: alle Verbindungen verwenden eine IAM-basierte Authentifizierung mit zeitlich begrenzten Token
-
Token-Generierung: Der Connector generiert Authentifizierungstoken mithilfe von AWS Anmeldeinformationen, und diese Token haben eine konfigurierbare Lebensdauer
Der Aurora DSQL Connector for Go wurde entwickelt, um diese Anforderungen zu verstehen und beim Verbindungsaufbau automatisch IAM-Authentifizierungstoken zu generieren.
Vorteile des Aurora DSQL Connector for Go
Mit dem Aurora DSQL Connector for Go können Sie Ihre bestehenden PGX-Workflows weiterhin verwenden und gleichzeitig die IAM-Authentifizierung aktivieren über:
-
Automatische Token-Generierung: Der Connector generiert automatisch IAM-Token für jede Verbindung
-
Verbindungspooling: Integrierte Unterstützung für die
pgxpoolautomatische Token-Generierung pro Verbindung -
Flexible Konfiguration: Support für vollständige Endgeräte oder Cluster IDs mit automatischer Regionserkennung
-
AWS Support für Anmeldeinformationen: Unterstützt AWS Profile und Anbieter von benutzerdefinierten Anmeldeinformationen
Schlüssel-Features
- Automatische Tokenverwaltung
-
Der Connector generiert automatisch IAM-Token für jede neue Verbindung unter Verwendung vorab aufgelöster Anmeldeinformationen.
- Verbindungspooling
-
Verbindungspooling über
pgxpoolmit automatischer Token-Generierung pro Verbindung. - Flexible Host-Konfiguration
-
Unterstützt sowohl vollständige Cluster-Endpunkte als auch Cluster IDs mit automatischer Regionserkennung.
- SSL-Sicherheit
-
SSL ist im Modus „Verify-Full“ und direkter TLS-Aushandlung immer aktiviert.
Voraussetzungen
-
Go 1.24 oder höher
-
AWS Anmeldeinformationen konfiguriert
-
Ein Aurora DSQL-Cluster
Der Connector verwendet die standardmäßige Anmeldeinformationskette des AWS SDK for Go v2, die Anmeldeinformationen in der folgenden Reihenfolge auflöst:
-
Umgebungsvariablen (AWS_ACCESS_KEY_ID, _ACCESS_KEY) AWS_SECRET
-
Datei mit gemeinsam genutzten Anmeldeinformationen (~/.aws/credentials)
-
Gemeinsam genutzte Konfigurationsdatei (~/.aws/config)
-
IAM-Rolle für Amazon EC2/ECS/Lambda
Installation
Installieren Sie den Connector mithilfe von Go-Modulen:
go get github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql
Schnellstart
Das folgende Beispiel zeigt, wie Sie einen Verbindungspool erstellen und eine Abfrage ausführen:
package main import ( "context" "log" "github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql" ) func main() { ctx := context.Background() // Create a connection pool pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", }) if err != nil { log.Fatal(err) } defer pool.Close() // Execute a query var greeting string err = pool.QueryRow(ctx, "SELECT 'Hello, DSQL!'").Scan(&greeting) if err != nil { log.Fatal(err) } log.Println(greeting) }
Konfigurationsoptionen
Der Connector unterstützt die folgenden Konfigurationsoptionen:
| Feld | Typ | Standard | Description |
|---|---|---|---|
| Host | Zeichenfolge | (erforderlich) | Cluster-Endpunkt oder Cluster-ID |
| Region | Zeichenfolge | (automatisch erkannt) | AWS Region; erforderlich, wenn Host eine Cluster-ID ist |
| Benutzer | Zeichenfolge | „Administrator“ | Datenbankbenutzer |
| Datenbank | Zeichenfolge | „Postgres“ | Datenbankname |
| Port | int | 5432 | Datenbankport |
| Profil | Zeichenfolge | "" | AWS Profilname für Anmeldeinformationen |
| TokenDurationSecs | int | 900 (15 Minuten) | Gültigkeitsdauer des Tokens in Sekunden (maximal zulässig: 1 Woche, Standard: 15 Minuten) |
| MaxConns | int32 | 0 | Maximale Anzahl an Pool-Verbindungen (0 = pgxpool-Standard) |
| MinConns | int32 | 0 | Minimale Anzahl an Poolverbindungen (0 = pgxpool-Standard) |
| MaxConnLifetime | Zeit.Dauer | 55 Minuten | Maximale Verbindungslebensdauer |
Format der Verbindungszeichenfolge
Der Connector unterstützt PostgreSQL- und DSQL-Verbindungszeichenfolgenformate:
postgres://[user@]host[:port]/[database][?param=value&...] dsql://[user@]host[:port]/[database][?param=value&...]
Unterstützte Abfrageparameter:
-
region- AWS Region -
profile- AWS Profilname -
tokenDurationSecs- Gültigkeitsdauer des Tokens in Sekunden
Beispiele:
// Full endpoint (region auto-detected) pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/postgres") // Using dsql:// scheme (also supported) pool, _ := dsql.NewPool(ctx, "dsql://admin@cluster.dsql.us-east-1.on.aws/postgres") // With explicit region pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/mydb?region=us-east-1") // With AWS profile pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/postgres?profile=dev")
Fortgeschrittene Nutzung
Host-Konfiguration
Der Connector unterstützt zwei Host-Formate:
Vollständiger Endpunkt (Region automatisch erkannt):
pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", })
Cluster-ID (Region erforderlich):
pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster-id", Region: "us-east-1", })
Optimierung der Poolkonfiguration
Konfigurieren Sie den Verbindungspool für Ihren Workload:
pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", MaxConns: 20, MinConns: 5, MaxConnLifetime: time.Hour, MaxConnIdleTime: 30 * time.Minute, HealthCheckPeriod: time.Minute, })
Nutzung einer einzelnen Verbindung
Für einfache Skripte oder wenn kein Verbindungspooling benötigt wird:
conn, err := dsql.Connect(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", }) if err != nil { log.Fatal(err) } defer conn.Close(ctx) // Use the connection rows, err := conn.Query(ctx, "SELECT * FROM users")
Profile verwenden AWS
Geben Sie ein AWS Profil für Anmeldeinformationen an:
pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", Profile: "production", })
OCC-Wiederholung
Aurora DSQL verwendet Optimistic Concurrency Control (OCC). Wenn zwei Transaktionen dieselben Daten ändern, gewinnt die erste Transaktion, die einen Commit durchführt, und die zweite erhält einen OCC-Fehler.
Das occretry Paket bietet Hilfsprogramme für automatische Wiederholungen bei exponentiellem Backoff und Jitter. Installiere es mit:
go get github.com/awslabs/aurora-dsql-connectors/go/pgx/occretry
WithRetryFür transaktionale Schreibvorgänge verwenden:
err := occretry.WithRetry(ctx, pool, occretry.DefaultConfig(), func(tx pgx.Tx) error { _, err := tx.Exec(ctx, "UPDATE accounts SET balance = balance - $1 WHERE id = $2", 100, fromID) if err != nil { return err } _, err = tx.Exec(ctx, "UPDATE accounts SET balance = balance + $1 WHERE id = $2", 100, toID) return err })
Verwenden Sie für DDL- oder Einzelanweisungen: ExecWithRetry
err := occretry.ExecWithRetry(ctx, pool, occretry.DefaultConfig(), "CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)")
Wichtig
WithRetryverwaltetBEGIN/COMMIT/ROLLBACKintern. Ihr Callback empfängt eine Transaktion und sollte nur Datenbankoperationen enthalten und sicher sein, es erneut zu versuchen.
Beispiele
Umfassendere Beispiele und Anwendungsfälle finden Sie in den Aurora DSQL Connector for Go-Beispielen
| Beispiel | Description |
|---|---|
| example_preferred |
Empfohlen: Verbindungspool mit gleichzeitigen Abfragen |
| Transaktion |
Transaktionsabwicklung mit BEGIN/COMMIT/ROLLBACK |
| occ_retry |
Umgang mit OCC-Konflikten mit exponentiellem Backoff |
| Verbindungszeichenfolge |
Verbindungszeichenfolgen für die Konfiguration verwenden |