Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konektor Aurora DSQL untuk Karat SQLx
Konektor Aurora DSQL untuk Rust adalah konektor Rust
Konektor menangani pembuatan token, konfigurasi SSL, dan manajemen koneksi sehingga Anda dapat fokus pada logika aplikasi Anda.
Tentang konektor
Konektor Aurora DSQL untuk Rust menambahkan lapisan otentikasi di atasnya SQLx yang menangani pembuatan token IAM, memungkinkan Anda untuk terhubung ke Aurora DSQL tanpa mengubah alur kerja yang ada. SQLx
Apa itu otentikasi Aurora DSQL?
Dalam Aurora DSQL, otentikasi melibatkan:
-
Otentikasi IAM: Semua koneksi menggunakan otentikasi berbasis IAM dengan token terbatas waktu
-
Generasi Token: Konektor menghasilkan token otentikasi menggunakan AWS kredensil, dan token ini memiliki masa pakai yang dapat dikonfigurasi
Konektor Aurora DSQL untuk Rust memahami persyaratan ini dan secara otomatis menghasilkan token otentikasi IAM saat membuat koneksi.
Fitur
-
Otentikasi IAM otomatis - Menangani pembuatan dan penyegaran token Aurora DSQL
-
Dibangun di atas SQLx - Membungkus driver PostgreSQL async populer untuk Rust
-
Integrasi mulus - Bekerja dengan alur kerja yang ada SQLx
-
Penggabungan koneksi - Dukungan kumpulan opt-in dengan penyegaran token latar belakang melalui fitur
pool -
Deteksi otomatis wilayah - Ekstrak AWS wilayah dari nama host cluster Aurora DSQL
-
AWS dukungan kredensil - Mendukung AWS profil dan rantai kredensi default
-
Coba lagi OCC - Coba lagi kontrol konkurensi optimis dengan backoff eksponensial dan jitter
Contoh aplikasi
Untuk contoh lengkap, lihat contoh aplikasi
Panduan memulai cepat
Persyaratan
-
Rust 1.80 atau lebih baru
-
AWS kredensil yang dikonfigurasi (melalui AWS CLI, variabel lingkungan, atau peran IAM)
Penginstalan
Tambahkan keCargo.toml:
[dependencies] aurora-dsql-sqlx-connector = "0.1.2"
Untuk sebagian besar aplikasi, aktifkan keduanya pool dan occ fitur:
[dependencies] aurora-dsql-sqlx-connector = { version = "0.1.2", features = ["pool", "occ"] }
Bendera fitur
| Fitur | Default | Deskripsi |
|---|---|---|
pool |
Tidak | SQLx pembantu kolam renang dengan penyegaran token latar belakang |
occ |
Tidak | Pembantu coba lagi OCC (,) retry_on_occ is_occ_error |
Penggunaan
Koneksi kolam renang
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(()) }
Koneksi tunggal
Untuk skrip sederhana atau saat Anda tidak memerlukan penyatuan koneksi:
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(()) }
Setiap panggilan untuk connection::connect() menghasilkan token IAM baru. Untuk operasi yang lebih lama dari durasi token, buat koneksi baru.
Penggunaan lanjutan
Konfigurasi host
Konektor mendukung titik akhir cluster penuh (wilayah terdeteksi secara otomatis) dan cluster IDs (wilayah diperlukan):
// 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 profil
Tentukan AWS profil untuk kredensil:
let pool = aurora_dsql_sqlx_connector::pool::connect( "postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres?profile=production" ).await?;
Format string koneksi
Konektor mendukung format string koneksi PostgreSQL:
postgres://[user@]host[:port]/[database][?param=value&...] postgresql://[user@]host[:port]/[database][?param=value&...]
Parameter kueri yang didukung: regionprofile,tokenDurationSecs,,ormPrefix.
Konfigurasi kolam renang
Untuk pengaturan kolam khusus, teruskan PgPoolOptions keconnect_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?;
Konfigurasi terprogram
Gunakan DsqlConnectOptionsBuilder untuk konfigurasi terprogram:
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?;
Coba lagi OCC
Aurora DSQL menggunakan kontrol konkurensi optimis (OCC). Ketika dua transaksi memodifikasi data yang sama, yang pertama melakukan kemenangan dan yang kedua menerima kesalahan OCC.
Coba lagi OCC adalah opt-in. Aktifkan occ fitur dan gunakan retry_on_occ untuk mengaktifkan percobaan ulang otomatis dengan backoff dan jitter eksponensial:
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?;
Awas
retry_on_occmengeksekusi kembali seluruh penutupan pada konflik OCC, sehingga penutupan harus hanya berisi operasi database dan aman untuk dicoba lagi.
Opsi konfigurasi
| Bidang | Tipe | Default | Deskripsi |
|---|---|---|---|
host |
String |
(wajib) | Titik akhir cluster atau ID cluster |
region |
Option<Region> |
(terdeteksi otomatis) | AWS wilayah; diperlukan jika host adalah ID cluster |
user |
String |
"admin" |
Pengguna basis data |
database |
String |
"postgres" |
Nama database |
port |
u16 |
5432 |
Port basis data |
profile |
Option<String> |
None |
AWS nama profil untuk kredensil |
tokenDurationSecs |
u64 |
900(15 menit) |
Durasi validitas token dalam hitungan detik |
ormPrefix |
Option<String> |
None |
Awalan ORM untuk application_name (misalnya, menghasilkan) "diesel" "diesel:aurora-dsql-rust-sqlx/{version}" |
Autentikasi
Konektor secara otomatis menangani otentikasi Aurora DSQL dengan menghasilkan token menggunakan kredensil. AWS Jika Anda tidak memberikan AWS wilayah, konektor menguraikannya dari nama host.
Untuk informasi lebih lanjut tentang otentikasi di Aurora DSQL, lihat. Otentikasi dan otorisasi untuk Aurora DSQL
Pembuatan token
-
Kumpulan koneksi: Tugas latar belakang menyegarkan token pada 80% dari durasi token. Panggil
pool.close().awaituntuk menghentikan tugas penyegaran dan melepaskan sumber daya kumpulan. -
Koneksi tunggal: Konektor menghasilkan token baru pada waktu koneksi.
-
Pembuatan Token adalah operasi presigning SiGv4 lokal dengan biaya yang dapat diabaikan.
Admin vs pengguna biasa
-
Pengguna bernama “admin” secara otomatis menggunakan token otentikasi admin
-
Semua pengguna lain menggunakan token otentikasi reguler
-
Konektor menghasilkan token secara dinamis untuk setiap koneksi