Conectar-se a clusters do Aurora DSQL com um conector .NET
O conector do Amazon Aurora DSQL para .NET
O conector gerencia a geração de tokens, a configuração SSL e o agrupamento de conexões para que você se concentre na lógica da aplicação.
Sobre o conector
O Amazon Aurora DSQL exige autenticação do IAM com tokens de tempo limitado para os quais os drivers PostgreSQL do .NET existentes não oferecem suporte nativo. O conector do Aurora DSQL para .NET adiciona uma camada de autenticação sobre o Npgsql 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 Npgsql.
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 .NET entende esses requisitos e gera tokens de autenticação do IAM automaticamente ao estabelecer conexões.
Recursos
-
Autenticação automática do IAM: lida com a geração e atualização de tokens do Aurora DSQL
-
Desenvolvido em Npgsql: agrupa o popular driver PostgreSQL para.NET
-
Integração perfeita: funciona com fluxos de trabalho de Npgsql existentes
-
Agrupamento de conexões: suporte integrado por meio do
NpgsqlDataSourcecom aplicação de vida útil máxima -
Detecção automática de região: extrai a região da AWS do nome de host do cluster do Aurora DSQL
-
Suporte a credenciais da AWS: aceita perfis e provedores de credenciais personalizados da AWS
-
Nova tentativa de OCC: opte por uma nova tentativa de controle de simultaneidade otimista com recuo exponencial
-
Aplicação de SSL: sempre usa SSL com o modo
verify-fulle negociação direta de TLS
Aplicativo de exemplo
Para ver um exemplo completo, consulte a aplicação de exemplo
Guia de início rápido
Requisitos
-
.NET 8.0 ou posterior
-
Credenciais da AWS configuradas (por meio da CLI da AWS, de variáveis de ambiente ou perfis do IAM)
Instalação
Adicione o pacote ao seu projeto:
dotnet add package Amazon.AuroraDsql.Npgsql
Usage
Conexão do grupo
using Amazon.AuroraDsql.Npgsql; // Create a connection pool await using var ds = await AuroraDsql.CreateDataSourceAsync(new DsqlConfig { Host = "your-cluster.dsql.us-east-1.on.aws", OccMaxRetries = 3 }); // Read await using (var conn = await ds.OpenConnectionAsync()) { await using var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT 'Hello, DSQL!'"; var greeting = await cmd.ExecuteScalarAsync(); Console.WriteLine(greeting); } // Transactional write with OCC retry await ds.WithTransactionRetryAsync(async conn => { await using var cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO users (id, name) VALUES (gen_random_uuid(), @name)"; cmd.Parameters.AddWithValue("name", "Alice"); await cmd.ExecuteNonQueryAsync(); });
Conexão única
Para scripts simples ou quando você não tem o agrupamento de conexões:
await using var conn = await AuroraDsql.ConnectAsync(new DsqlConfig { Host = "your-cluster.dsql.us-east-1.on.aws" }); await using var cmd = conn.CreateCommand("SELECT 1"); await cmd.ExecuteScalarAsync();
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.
A nova tentativa do OCC é opcional. Defina OccMaxRetries na configuração para habilitar nova tentativa automática com recuo exponencial e instabilidade. Use WithTransactionRetryAsync para gravações transacionais:
await ds.WithTransactionRetryAsync(async conn => { await using var cmd = conn.CreateCommand(); cmd.CommandText = "UPDATE accounts SET balance = balance - 100 WHERE id = @from"; cmd.Parameters.AddWithValue("from", fromId); await cmd.ExecuteNonQueryAsync(); cmd.CommandText = "UPDATE accounts SET balance = balance + 100 WHERE id = @to"; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("to", toId); await cmd.ExecuteNonQueryAsync(); });
Para declarações DDL ou únicas, use ExecWithRetryAsync:
await ds.ExecWithRetryAsync("CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)");
Importante
WithTransactionRetryAsync gerencia BEGIN/COMMIT/ROLLBACK internamente e abre uma nova conexão para cada tentativa. Seu retorno de chamada deve conter somente operações de banco de dados e ser seguro tentar novamente.
Opções de configuração
O conector também aceita strings de conexão postgres:// e postgresql:// com os parâmetros de consulta region e profile.
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
Host |
string |
(obrigatório) | Endpoint do cluster ou ID do cluster de 26 caracteres |
Region |
string? |
(detectado automaticamente) | Região da AWS; obrigatória se o Host for um ID de cluster |
User |
string |
"admin" |
Usuário do banco de dados |
Database |
string |
"postgres" |
Nome do banco de dados |
Port |
int |
5432 |
Database port |
Profile |
string? |
null |
Nome do perfil da AWS para credenciais |
CustomCredentialsProvider |
AWSCredentials? |
null |
Provedor de credenciais da AWS personalizadas |
TokenDurationSecs |
int? |
null (SDK padrão, 900s) |
Duração da validade do token em segundos |
OccMaxRetries |
int? |
null (desabilitado) |
Máximo padrão de novas tentativas de OCC para métodos de nova tentativa na fonte de dados |
OrmPrefix |
string? |
null |
Prefixo ORM prefixado a application_name |
LoggerFactory |
ILoggerFactory? |
null |
Fábrica de loggers para novas tentativas, avisos e diagnósticos |
ConfigureConnectionString |
Action<NpgsqlConnectionStringBuilder>? |
null |
Retorno de chamada para substituir as configurações do agrupamento ou definir propriedades adicionais da string de conexão Npgsql. SSL e Enlist são invariantes de segurança e não podem ser substituídos. |
Autenticação
O conector gerencia automaticamente a autenticação do Aurora DSQL gerando tokens com o uso de credenciais da AWS. Se você não fornecer a região da AWS, o conector a analisará a partir do nome do host.
Para obter mais informações sobre autenticação no Aurora DSQL, consulte Autenticação e autorização para o Aurora DSQL.
Admin versus usuários regulares
-
Usuários chamados “admin” utilizam automaticamente tokens de autenticação de admin.
-
Todos os outros usuários utilizam tokens de autenticação regulares.
-
O conector gera tokens dinamicamente para cada conexão