Bibliothèque Azure Cosmos DB pour Rust
Bibliothèque client pour l'API NoSQL d'Azure Cosmos DB — opérations CRUD sur documents, conteneurs et données distribuées mondialement.
Utilisez cette skill quand :
- Une app doit stocker ou interroger des documents dans Cosmos DB à partir de Rust
- Vous avez besoin d'opérations CRUD sur des éléments avec des clés de partition
- Vous avez besoin d'un routage multi-région avec
RoutingStrategy - Vous avez besoin d'une authentification par clé comme alternative à Entra ID
IMPORTANT : Utilisez uniquement le crate officiel
azure_data_cosmospublié par l'utilisateur azure-sdk sur crates.io. N'utilisez PAS les crates communautaires non officielsazure_cosmosouazure_sdk_for_rust. Les crates officiels utilisent des underscores dans les noms et aucun n'a la version 0.21.0.
Installation
cargo add azure_data_cosmos azure_identity tokio
Ne pas ajouter
azure_coredirectement àCargo.toml. Il est réexporté parazure_data_cosmos.
Variables d'environnement
COSMOS_ENDPOINT=https://<account>.documents.azure.com/ # Requis pour toutes les opérations
Authentification
use azure_identity::DeveloperToolsCredential;
use azure_data_cosmos::{
CosmosClient, CosmosAccountReference, CosmosAccountEndpoint, RoutingStrategy,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Dev local : DeveloperToolsCredential. Production : utilisez ManagedIdentityCredential.
let credential: std::sync::Arc<dyn azure_core::credentials::TokenCredential> =
DeveloperToolsCredential::new(None)?;
let endpoint: CosmosAccountEndpoint = "https://<account>.documents.azure.com/"
.parse()?;
let account = CosmosAccountReference::with_credential(endpoint, credential);
let client = CosmosClient::builder()
.build(account, RoutingStrategy::ProximityTo("East US".into()))
.await?;
Ok(())
}
Hiérarchie des clients
| Client | Objectif | Accès |
|---|---|---|
CosmosClient |
Opérations au niveau du compte | CosmosClient::builder().build() |
DatabaseClient |
Opérations de base de données | client.database_client("db") |
ContainerClient |
Opérations de conteneur/élément | database.container_client("c").await? |
Flux de travail principal
use serde::{Serialize, Deserialize};
use azure_data_cosmos::CosmosClient;
#[derive(Serialize, Deserialize)]
struct Item {
pub id: String,
pub partition_key: String,
pub value: String,
}
async fn crud(client: CosmosClient) -> Result<(), Box<dyn std::error::Error>> {
let container = client
.database_client("myDatabase")
.container_client("myContainer")
.await?;
let item = Item {
id: "1".into(),
partition_key: "pk1".into(),
value: "hello".into(),
};
// Create
container.create_item("pk1", item, None).await?;
// Read
let resp = container.read_item("pk1", "1", None).await?;
let mut item: Item = resp.into_model()?;
// Update
item.value = "updated".into();
container.replace_item("pk1", "1", item, None).await?;
// Delete
container.delete_item("pk1", "1", None).await?;
Ok(())
}
Authentification par clé (Optionnel)
Activez l'authentification par clé de compte avec le flag de feature :
cargo add azure_data_cosmos --features key_auth
Rôles RBAC
Pour l'authentification Entra ID, assignez l'un de ces rôles Cosmos DB intégrés :
| Rôle | Accès |
|---|---|
Cosmos DB Built-in Data Reader |
Lecture seule |
Cosmos DB Built-in Data Contributor |
Lecture/écriture |
Bonnes pratiques
- Utilisez
DeveloperToolsCredentialpour le dev local,ManagedIdentityCredentialpour la production — le SDK Rust n'a pasDefaultAzureCredential - Ne codez jamais en dur les credentials — utilisez des variables d'environnement ou une identité gérée
- Réutilisez
CosmosClient— les clients sont thread-safe ; créez une fois, partagez entre les tâches - Utilisez
RoutingStrategy::ProximityTo— routez vers la région la plus proche pour la latence la plus faible - Spécifiez toujours la clé de partition pour les opérations sur éléments — Cosmos DB l'exige pour tous les CRUD
Liens de référence
| Ressource | Lien |
|---|---|
| Référence API | https://docs.rs/azure_data_cosmos |
| crates.io | https://crates.io/crates/azure_data_cosmos |