Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Connecteur SQL Aurora pour Rust SQLx
Le connecteur Aurora DSQL pour Rust
Le connecteur gère la génération de jetons, la configuration SSL et la gestion des connexions afin que vous puissiez vous concentrer sur la logique de votre application.
À propos du connecteur
Le connecteur Aurora DSQL pour Rust ajoute une couche d'authentification SQLx qui gère la génération de jetons IAM, ce qui vous permet de vous connecter à Aurora DSQL sans modifier vos flux de travail existants. SQLx
Qu'est-ce que l'authentification SQL Aurora ?
Dans Aurora DSQL, l’authentification implique :
-
Authentification IAM : toutes les connexions utilisent l’authentification basée sur IAM avec des jetons à durée limitée
-
Génération de jetons : le connecteur génère des jetons d'authentification à l'aide AWS d'informations d'identification, et ces jetons ont une durée de vie configurable
Le connecteur Aurora DSQL pour Rust comprend ces exigences et génère automatiquement des jetons d'authentification IAM lors de l'établissement de connexions.
Caractéristiques
-
Authentification IAM automatique : gère la génération et l'actualisation des jetons Aurora DSQL
-
Construit sur SQLx : intègre le célèbre pilote asynchrone PostgreSQL pour Rust
-
Intégration parfaite - Fonctionne avec les SQLx flux de travail existants
-
Regroupement de connexions : prise en charge des pools optionnels avec actualisation des jetons en arrière-plan via la
poolfonctionnalité -
Détection automatique des régions : extrait AWS la région du nom d'hôte du cluster Aurora DSQL
-
AWS support des informations d'identification : prend en charge les AWS profils et la chaîne d'identification par défaut
-
Nouvelle tentative OCC - Réessayez de contrôler la simultanéité de manière optimiste avec recul et instabilité exponentiels
Exemple d'application
Pour un exemple complet, consultez l'exemple d'application
Guide de démarrage rapide
Exigences
-
Rust 1.80 ou version ultérieure
-
AWS informations d'identification configurées (via la AWS CLI, les variables d'environnement ou les rôles IAM)
Installation
Ajoutez à votre Cargo.toml :
[dependencies] aurora-dsql-sqlx-connector = "0.1.2"
Pour la plupart des applications, activez à la fois les occ fonctionnalités pool et :
[dependencies] aurora-dsql-sqlx-connector = { version = "0.1.2", features = ["pool", "occ"] }
Drapeaux caractéristiques
| Fonctionnalité | Par défaut | Description |
|---|---|---|
pool |
Non | SQLx assistant de pool avec actualisation du jeton d'arrière-plan |
occ |
Non | Assistants à la nouvelle tentative OCC (,) retry_on_occ is_occ_error |
Usage
Connexion à la piscine
use sqlx::Row; #[tokio::main] async fn main() -> anyhow::Result<()> { let pool = aurora_dsql_sqlx_connector::pool::connect( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres" ).await?; // Read let row = sqlx::query("SELECT 'Hello, DSQL!' as greeting") .fetch_one(&pool) .await?; let greeting: &str = row.get("greeting"); println!("{}", greeting); // Write — you must wrap writes in a transaction let mut tx = pool.begin().await?; sqlx::query("INSERT INTO users (id, name) VALUES (gen_random_uuid(), $1)") .bind("Alice") .execute(&mut *tx) .await?; tx.commit().await?; pool.close().await; Ok(()) }
Connexion simple
Pour les scripts simples ou lorsque vous n'avez pas besoin d'un regroupement de connexions :
use sqlx::Row; #[tokio::main] async fn main() -> anyhow::Result<()> { let mut conn = aurora_dsql_sqlx_connector::connection::connect( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres" ).await?; let row = sqlx::query("SELECT 1 as value") .fetch_one(&mut conn) .await?; let value: i32 = row.get("value"); println!("Result: {}", value); Ok(()) }
Chaque appel à connection::connect() génère un nouveau jeton IAM. Pour les opérations supérieures à la durée du jeton, créez une nouvelle connexion.
Utilisation avancée
Configuration de l'hôte
Le connecteur prend en charge à la fois les points de terminaison complets du cluster (région détectée automatiquement) et le cluster IDs (région requise) :
// Full endpoint (region auto-detected) let opts = DsqlConnectOptions::from_connection_string( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres" )?; // Cluster ID (region required) let opts = DsqlConnectOptions::from_connection_string( "postgres://admin@your-cluster-id/postgres?region=us-east-1" )?;
AWS profils
Spécifiez un AWS profil pour les informations d'identification :
let pool = aurora_dsql_sqlx_connector::pool::connect( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres?profile=production" ).await?;
Format de chaîne de connexion
Le connecteur prend en charge les formats de chaîne de connexion PostgreSQL :
postgres://[user@]host[:port]/[database][?param=value&...] postgresql://[user@]host[:port]/[database][?param=value&...]
Paramètres de requête pris en charge : regionprofile,tokenDurationSecs,,ormPrefix.
Configuration du pool
Pour les paramètres de pool personnalisés, passez PgPoolOptions à connect_with() :
use aurora_dsql_sqlx_connector::DsqlConnectOptions; use sqlx::postgres::PgPoolOptions; let config = DsqlConnectOptions::from_connection_string( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres" )?; let pool = aurora_dsql_sqlx_connector::pool::connect_with( &config, PgPoolOptions::new().max_connections(20), ).await?;
Configuration programmatique
Utilisation DsqlConnectOptionsBuilder pour la configuration programmatique :
use aurora_dsql_sqlx_connector::{DsqlConnectOptionsBuilder, Region}; use sqlx::postgres::PgConnectOptions; let pg = PgConnectOptions::new() .host("your-cluster.dsql.us-east-1.on.aws") .username("admin") .database("postgres"); let opts = DsqlConnectOptionsBuilder::default() .pg_connect_options(pg) .region(Some(Region::new("us-east-1"))) .build()?; let mut conn = aurora_dsql_sqlx_connector::connection::connect_with(&opts).await?;
Réessayer OCC
Aurora DSQL utilise un contrôle de simultanéité optimiste (OCC). Lorsque deux transactions modifient les mêmes données, la première à valider gagne et la seconde reçoit une erreur OCC.
Une nouvelle tentative d'OCC est facultative. Activez la occ fonctionnalité et utilisez-la retry_on_occ pour activer une nouvelle tentative automatique avec un recul et une instabilité exponentiels :
use aurora_dsql_sqlx_connector::{retry_on_occ, OCCRetryConfig}; let config = OCCRetryConfig::default(); // max_attempts: 3, exponential backoff retry_on_occ(&config, || async { let mut tx = pool.begin().await?; sqlx::query("UPDATE accounts SET balance = balance - 100 WHERE id = $1") .bind(account_id) .execute(&mut *tx) .await?; tx.commit().await?; Ok(()) }).await?;
Avertissement
retry_on_occréexécute la fermeture complète en cas de conflit OCC. La fermeture ne doit donc contenir que des opérations de base de données et pouvoir être réessayée en toute sécurité.
Options de configuration
| Champ | Type | Par défaut | Description |
|---|---|---|---|
host |
String |
(obligatoire) | Point de terminaison ou ID de cluster |
region |
Option<Region> |
(détecté automatiquement) | AWS région ; obligatoire si l'hôte est un ID de cluster |
user |
String |
"admin" |
Utilisateur de la base de donnée |
database |
String |
"postgres" |
Nom de la base de données |
port |
u16 |
5432 |
Port de la base de données |
profile |
Option<String> |
None |
AWS nom de profil pour les informations d'identification |
tokenDurationSecs |
u64 |
900(15 minutes) |
Durée de validité du jeton en secondes |
ormPrefix |
Option<String> |
None |
Préfixe ORM pour application_name (par exemple, produit) "diesel" "diesel:aurora-dsql-rust-sqlx/{version}" |
Authentification
Le connecteur gère automatiquement l'authentification Aurora DSQL en générant des jetons à l'aide d' AWS informations d'identification. Si vous ne fournissez pas la AWS région, le connecteur l'analyse à partir du nom d'hôte.
Pour plus d'informations sur l'authentification dans Aurora DSQL, consultezAuthentification et autorisation pour Aurora DSQL.
Génération de jetons
-
Pools de connexions : une tâche en arrière-plan actualise le jeton à 80 % de sa durée. Appelez
pool.close().awaitpour arrêter la tâche d'actualisation et libérer les ressources du pool. -
Connexions uniques : le connecteur génère un nouveau jeton au moment de la connexion.
-
La génération de jetons est une opération de présignature SigV4 locale dont le coût est négligeable.
Administrateur et utilisateurs réguliers
-
Les utilisateurs nommés « admin » utilisent automatiquement des jetons d'authentification d'administrateur
-
Tous les autres utilisateurs utilisent des jetons d'authentification ordinaires
-
Le connecteur génère des jetons de manière dynamique pour chaque connexion