Conexión a clústeres de Aurora DSQL con un conector de Go
El conector de Aurora SQL para Go
Acerca del conector
Aurora DSQL requiere una autenticación basada en IAM con tokens de duración limitada que los controladores de Go PostgreSQL existentes no admiten de forma nativa. El conector de Aurora DSQL para Go añade una capa de autenticación sobre el controlador pgx que gestiona la generación de tokens IAM, lo que le permite conectarse a Aurora DSQL sin cambiar sus flujos de trabajo de pgx existentes.
¿Qué es la autenticación de Aurora DSQL?
En Aurora DSQL, la autenticación implica:
-
Autenticación de IAM: todas las conexiones utilizan la autenticación basada en IAM con tokens de tiempo limitado
-
Generación de tokens: los tokens de autenticación se generan mediante credenciales de AWS y tienen una vida útil configurable
El conector de Aurora DSQL para Go está diseñado para comprender estos requisitos y generar automáticamente los tokens de autenticación de IAM al establecer las conexiones.
Ventajas del conector de Aurora DSQL para Go
El conector de Aurora DSQL para Go le permite seguir utilizando sus flujos de trabajo de pgx existentes, al tiempo que habilita la autenticación de IAM a través de:
-
Generación automática de tokens: los tokens IAM se generan automáticamente con almacenamiento inteligente en caché (se actualizan al 80 % de la vida útil del token).
-
Agrupación de conexiones: compatibilidad integrada con pgxpool con almacenamiento en caché de tokens para una creación eficiente de conexiones.
-
Configuración flexible: compatibilidad con puntos de conexión completos o ID de clúster con detección automática de región.
-
Compatibilidad con credenciales de AWS: admite perfiles de AWS y proveedores de credenciales personalizados.
Características principales de
- Administración automática de tokens
-
Los tokens de IAM se generan y almacenan en caché automáticamente. Los tokens se actualizan al 80 % de su vida útil para garantizar que sigan siendo válidos.
- Grupo de conexiones
-
Agrupación de conexiones mediante pgxpool con almacenamiento en caché de tokens para una creación eficiente de conexiones.
- Configuración de host flexible
-
Admite tanto puntos de conexión de clúster completos como ID de clúster con detección automática de región.
- Seguridad SSL
-
SSL siempre está habilitado con el modo de verificación completa y negociación TLS directa.
Requisitos previos
-
Go 1.24 o posterior
-
Credenciales de AWS configuradas
-
Un clúster de Aurora DSQL
El conector usa la cadena de credenciales predeterminada del SDK de AWS para Go v2
-
Variables de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
-
Archivo de credenciales compartidas (~/.aws/credentials)
-
Archivo de configuración compartido (~/.aws/config)
-
Rol de IAM para Amazon EC2/ECS/Lambda
Instalación
Instale el conector mediante los módulos Go:
go get github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql
Inicio rápido
En el siguiente ejemplo, se muestra cómo crear un grupo de conexiones y ejecutar una consulta:
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) }
Opciones de configuración
El conector es compatible con las siguientes opciones de configuración:
| Campo | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| Host | cadena | (obligatorio) | Punto de conexión de clúster o ID de clúster |
| Región | cadena | (detectado automáticamente) | Región de AWS; obligatorio si el host es un ID de clúster |
| Usuario | cadena | "admin" | Usuario de base de datos |
| Database | cadena | "postgres" | Nombre de base de datos |
| Puerto | int | 5432 | Database port (Puerto de base de datos) |
| Perfil | cadena | "" | Nombre de perfil de AWS para las credenciales |
| TokenDurationSecs | int | 900 (15 minutos) | Duración de validez del token en segundos (máximo permitido: 1 semana, valor predeterminado: 15 minutos) |
| MaxConns | int32 | 0 | Conexiones máximas de grupo (0 = pgxpool predeterminado) |
| MinConns | int32 | 0 | Conexiones de grupo mínimas (0 = pgxpool predeterminado) |
| MaxConnLifetime | time.Duration | 55 minutos | Tiempo máximo de conexión |
Formato de la cadena de conexión
El conector admite los formatos de cadena de conexión PostgreSQL y DSQL:
postgres://[user@]host[:port]/[database][?param=value&...] dsql://[user@]host[:port]/[database][?param=value&...]
Parámetros de consulta compatibles:
-
region: región de AWS -
profile: nombre de perfil de AWS -
tokenDurationSecs: duración de la validez del token en segundos
Ejemplos:
// 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")
Uso avanzado
Configuración de host
El conector admite dos formatos de host:
Punto de conexión completo (región detectada automáticamente):
pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", })
ID de clúster (región requerida):
pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster-id", Region: "us-east-1", })
Ajuste de configuración de grupo
Configure el grupo de conexiones para su carga de trabajo:
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, })
Uso de conexión única
Para scripts simples o cuando no es necesaria la agrupación de conexiones:
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")
Uso de perfiles de AWS
Especificación de un perfil de AWS para credenciales:
pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", Profile: "production", })
Generación de tokens y almacenamiento en caché
El conector genera y almacena en caché automáticamente los tokens de autenticación de IAM para lograr un rendimiento óptimo:
-
Grupos de conexiones: los tokens se almacenan en caché y se reutilizan en todas las conexiones. El enlace BeforeConnect recupera los tokens de la caché y genera nuevos solo cuando el token en caché se ha utilizado el 80 % de su vida útil.
-
Conexiones únicas: se genera un token en el momento de la conexión mediante credenciales previamente resueltas.
-
Resolución de credenciales: las credenciales de AWS se resuelven una vez cuando se crea el grupo o la conexión y se reutilizan para todas las generaciones de tokens.
La duración predeterminada del token es de 15 minutos (el máximo permitido por Aurora DSQL).
Ejemplos
Para ver ejemplos y casos de uso más completos, consulte los ejemplos del conector de Aurora DSQL para Go
| Ejemplo | Descripción |
|---|---|
| example_preferred |
Recomendado: grupo de conexiones con consultas simultáneas |
| transacción |
Gestión de transacciones con BEGIN/COMMIT/ROLLBACK |
| occ_retry |
Cómo gestionar los conflictos de OCC con un retroceso exponencial |
| connection_string |
Uso de cadenas de conexión para la configuración |