View a markdown version of this page

Conectar-se a clusters do Aurora DSQL com um conector Go - Amazon Aurora DSQL

Conectar-se a clusters do Aurora DSQL com um conector Go

O conector do Aurora DSQL para Go encapsula o pgx com a autenticação automática do IAM. O conector gerencia a geração de tokens, a configuração SSL e o gerenciamento de conexões para que você se concentre na lógica da aplicação.

Sobre o conector

O Aurora DSQL exige autenticação baseada no IAM com tokens de tempo limitado para os quais os drivers Go do PostgreSQL não oferecem suporte nativo. O conector do Aurora DSQL para Go adiciona uma camada de autenticação sobre o driver pgx que gerencia a geração de tokens do IAM, permitindo que você se conecte ao Aurora DSQL sem alterar seus fluxos de trabalho existentes do pgx.

O que é a autenticação do Aurora DSQL?

Na autenticação do Aurora DSQL, a autenticação envolve:

  • Autenticação do IAM: todas as conexões usam autenticação baseada no IAM com tokens de tempo limitado.

  • Geração de token: o conector gera tokens de autenticação usando credenciais da AWS, e esses tokens têm vida útil configurável

O conector do Aurora DSQL para Go foi projetado para entender esses requisitos e gerar tokens de autenticação do IAM automaticamente ao estabelecer conexões.

Benefícios do conector do Aurora DSQL para Go

O conector do Aurora DSQL para Go permite que você continue usando seus fluxos de trabalho existentes do pgx e, ao mesmo tempo, habilite a autenticação do IAM por meio de:

  • Geração automática de tokens: o conector gera tokens do IAM automaticamente para cada conexão

  • Agrupamento de conexões: suporte integrado para pgxpool com geração automática de tokens por conexão

  • Configuração flexível: suporte a endpoints completos ou IDs de cluster com detecção automática de região.

  • Suporte a credenciais da AWS: aceita perfis e provedores de credenciais personalizados da AWS.

Atributos principais

Gerenciamento automático de tokens

O conector gera tokens do IAM automaticamente para cada nova conexão usando credenciais pré-resolvidas.

Agrupamento de conexões

Agrupamento de conexões por meio de pgxpool com geração automática de tokens por conexão.

Configuração flexível de hosts

Oferece suporte a endpoints completos de cluster e IDs de cluster com detecção automática de região.

Segurança SSL

O SSL está sempre habilitado com o modo de verificação completa e a negociação direta de TLS.

Pré-requisitos

  • Go 1.24 ou posterior.

  • Credenciais da AWS configuradas.

  • Um cluster do Aurora DSQL.

O conector usa a cadeia de credenciais padrão do AWS SDK para Go v2, que resolve as credenciais na seguinte ordem:

  1. Variáveis de ambiente (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

  2. Arquivo de credenciais compartilhadas (~/.aws/credentials)

  3. Arquivo de configuração compartilhado (~/.aws/config)

  4. Perfil do IAM para o Amazon EC2/ECS/Lambda

Instalação

Instale o conector usando os módulos do Go:

go get github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql

Início rápido

O seguinte exemplo mostra como criar um grupo de conexões e executar uma 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) }

Opções de configuração

O conector aceita as seguintes opções de configuração:

Campo Tipo Padrão Descrição
Host string (obrigatório) Endpoint do cluster ou ID do cluster
Região string (detectado automaticamente) Região da AWS; obrigatória se o host for um ID de cluster
Usuário string admin Usuário do banco de dados
Banco de dados string “postgres” Nome do banco de dados
Porta int 5432 Database port
Perfil string "" Nome do perfil da AWS para credenciais
TokenDurationSecs int 900 (15 min) Duração da validade do token em segundos (máximo permitido: 1 semana, padrão: 15 min)
MaxConns int32 0 Máximo de conexões do grupo (0 = padrão pgxpool)
MinConns int32 0 Mínimo de conexões do grupo (0 = padrão pgxpool)
MaxConnLifetime time.Duration 55 minutos Vida útil máxima da conexão

Formato de string da conexão

O conector é compatível com os formatos de string de conexão do PostgreSQL e do DSQL:

postgres://[user@]host[:port]/[database][?param=value&...] dsql://[user@]host[:port]/[database][?param=value&...]

Parâmetros de consulta compatíveis:

  • region: região da AWS

  • profile: nome do perfil da AWS

  • tokenDurationSecs: duração da validade do token em segundos

Exemplos:

// 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 avançado

Configuração do host

O conector aceita dois formatos de host:

Endpoint completo (região detectada automaticamente):

pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", })

ID do cluster (região obrigatória):

pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster-id", Region: "us-east-1", })

Ajuste da configuração do grupo

Configure o grupo de conexões para a 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, })

Uso de conexão única

Para scripts simples ou quando o agrupamento de conexões não é necessário:

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")

Usar perfis da AWS

Especifique um perfil da AWS para credenciais:

pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", Profile: "production", })

Nova tentativa de OCC

O Aurora DSQL usa o controle de simultaneidade otimista (OCC). Quando duas transações modificam os mesmos dados, a primeira a confirmar vence e a segunda recebe um erro de OCC.

O pacote occretry fornece ajudantes para nova tentativa automática com recuo exponencial e instabilidade. Instale-o com:

go get github.com/awslabs/aurora-dsql-connectors/go/pgx/occretry

Use WithRetry para gravações transacionais:

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 })

Para declarações DDL ou únicas, use ExecWithRetry:

err := occretry.ExecWithRetry(ctx, pool, occretry.DefaultConfig(), "CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)")
Importante

WithRetry gerencia BEGIN/COMMIT/ROLLBACK internamente. Seu retorno de chamada recebe uma transação e deve conter somente operações de banco de dados e ser seguro para tentar novamente.

Exemplos

Para ver exemplos e casos de uso mais abrangentes, consulte exemplos do conector do Aurora DSQL para Go.

Exemplo Descrição
example_preferred Recomendado: grupo de conexões com consultas simultâneas
transaction Tratamento de transações com BEGIN/COMMIT/ROLLBACK
occ_retry Tratamento de conflitos de OCC com recuo exponencial
connection_string Uso de strings de conexão para configuração