Conexión a clústeres de Aurora DSQL con un conector de Go - Amazon Aurora DSQL

Conexión a clústeres de Aurora DSQL con un conector de Go

El conector de Aurora SQL para Go envuelve pgx con la autenticación IAM automática. El conector se encarga de la generación de tokens, la configuración SSL y la gestión de conexiones para que usted pueda centrarse en la lógica de su aplicación.

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, que resuelve las credenciales en el siguiente orden:

  1. Variables de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

  2. Archivo de credenciales compartidas (~/.aws/credentials)

  3. Archivo de configuración compartido (~/.aws/config)

  4. 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