Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le casse di Azure SDK per Rust consentono di accedere ai servizi di Azure dalle applicazioni Rust. Questo articolo illustra come usare questi crate, tra cui l'autenticazione, i servizi supportati e le procedure consigliate.
Casse | Documentazione | Codice sorgente
Prerequisiti per lo sviluppo con crate
- Rust 1.85 o versione successiva. La versione è specificata in Azure SDK per Rust crates Cargo.toml.
- Una sottoscrizione di Azure. È possibile crearne uno gratuitamente.
- CLI di Azure
- CLI per sviluppatori di Azure
- Crate di Azure SDK per Rust
Suggerimento
Per un'esperienza di sviluppo ottimale, assicurarsi di avere installato la versione stabile più recente di Rust.
Specificare le credenziali di autenticazione
Le casse di Azure necessitano di credenziali per l'autenticazione all'ID Microsoft Entra. I servizi di Azure forniscono metodi di autenticazione diversi per la connessione. È consigliabile usare la azure_identity cassa per l'autenticazione. Altre informazioni sull'autenticazione per Azure SDK per i crate Rust.
Oggetti client
Gli oggetti client vengono usati per interagire con i servizi di Azure. Ogni oggetto client, dal crate di un servizio, corrisponde a un servizio di Azure specifico e fornisce metodi per eseguire operazioni su tale servizio. Ad esempio, azure_security_keyvault_secrets::SecretClient viene usato per interagire con i segreti di Azure Key Vault.
Quando si creano gli oggetti client, è possibile specificare un ClientOptions parametro per personalizzare le interazioni con il servizio. Usare ClientOptions per impostare elementi come timeout, criteri di ripetizione dei tentativi e altre configurazioni.
use azure_identity::AzureCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let credential = AzureCliCredential::new(None)?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
Ok(())
}
Gestione degli errori
Quando una chiamata al servizio ha esito negativo, la risposta restituita contiene l'oggetto status.
use azure_core::{error::ErrorKind, http::StatusCode};
use azure_identity::AzureCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let credential = AzureCliCredential::new(None)?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
match client.get_secret("secret-0", None).await {
Ok(secret) => println!("Secret value: {}", secret.into_body()?.value.unwrap_or_default()),
Err(e) => match e.kind() {
ErrorKind::HttpResponse { status, error_code, .. } if *status == StatusCode::NotFound => {
if let Some(code) = error_code {
println!("ErrorCode: {}", code);
} else {
println!("Secret not found, but no error code provided.");
}
},
_ => println!("An error occurred: {e:?}"),
},
}
Ok(())
}
Risultati pagina
Se una chiamata al servizio restituisce più valori nelle pagine, restituisce Result<Pager<T>> come .ResultPager
use azure_identity::AzureCliCredential;
use azure_security_keyvault_secrets::SecretClient;
use futures::TryStreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let credential = AzureCliCredential::new(None)?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
let mut pager = client.list_secret_properties(None)?.into_pages();
while let Some(page) = pager.try_next().await? {
let page = page.into_body()?;
println!("items_in_page: {}", page.value.len());
}
Ok(())
}
Paginazione per elaborare ogni pagina di elementi
Per scorrere tutti gli elementi in una risposta impaginata, usare il into_pages() metodo sull'oggetto restituito Pager. Questo metodo restituisce un flusso asincrono di pagine come PageIterator, in modo da poter elaborare ogni pagina quando diventa disponibile.
use azure_identity::AzureDeveloperCliCredential;
use azure_security_keyvault_secrets::{ResourceExt, SecretClient};
use futures::TryStreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let credential = AzureDeveloperCliCredential::new(None)?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let client = SecretClient::new(vault_url.as_str(), credential.clone(), None)?;
let mut pager = client.list_secret_properties(None)?;
while let Some(secret) = pager.try_next().await? {
let name = secret.resource_id()?.name;
println!("Found secret with name: {}", name);
}
Ok(())
}
Esempio di codice
Il codice illustrato in questo articolo è disponibile in https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Passaggi successivi
- Crate di Azure SDK in Crates.io - Elenco di crate di Azure SDK disponibili
- Linee guida per la progettazione di Azure SDK - Principi e modelli di progettazione
- Repository GitHub di Azure SDK per Rust - Problemi e codice sorgente
- Documentazione cargo - Informazioni di riferimento complete su Cargo