View a markdown version of this page

Konektor Aurora DSQL untuk Karat SQLx - Amazon Aurora DSQL

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 yang dibangun di atasnya SQLxyang mengintegrasikan otentikasi IAM untuk menghubungkan aplikasi Rust ke cluster Amazon Aurora DSQL.

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 di GitHub.

Panduan memulai cepat

Persyaratan

  • Rust 1.80 atau lebih baru

  • Memulai dengan Aurora DSQL

  • 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().await untuk 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