Använd Azure SDKs för Rust-paket för att få åtkomst till Azure-tjänsterna

Med Azure SDKs för Rust-lådor kan du komma åt Azure tjänster från Rust-program. Den här artikeln beskriver hur du använder dessa paket, som inkluderar autentisering, stödda tjänster och bästa praxis.

Crates | API-referensdokumentation | Källakod

Förutsättningar för att utvecklas med lådor

Tips/Råd

Se till att du har den senaste stabila versionen av Rust installerad för bästa möjliga utveckling.

Ange autentiseringsuppgifter

Azure-kistorna behöver autentiseringsuppgifter för att autentisera mot Microsoft Entra ID. Azure tjänster tillhandahåller olika autentiseringsmetoder för anslutning. Vi rekommenderar att du använder azure_identity lådan för autentisering. Lär dig mer om autentisering för Azure SDKs för Rust-paket.

Klientobjekt

Du använder klientobjekt för att interagera med Azure tjänster. Varje klientobjekt, från en tjänsts låda, motsvarar en specifik Azure-tjänst och tillhandahåller metoder för att utföra åtgärder på den tjänsten. Till exempel används azure_security_keyvault_secrets::SecretClient för att interagera med Azure Key Vault hemligheter.

När du skapar klientobjekten kan du ange en ClientOptions parameter för att anpassa interaktionerna med tjänsten. Använd ClientOptions för att ange timeouter, återförsöksprinciper och andra konfigurationer.

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(())
}

Felhantering

När ett tjänstanrop misslyckas innehåller det returnerade svaretstatus.

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_model()?.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(())
}

Sidresultat

Om ett tjänstanrop returnerar flera värden i sidor returneras Result<Pager<T>> som en Result av Pager.

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_model()?;
        println!("items_in_page: {}", page.value.len());
    }

    Ok(())
}

Paginering för att behandla varje sida med objekt

Om du vill iterera igenom alla objekt i ett sidnumrerat svar använder du into_pages() metoden på den returnerade Pager. Den här metoden returnerar en asynkron dataström med sidor som en PageIterator, så att du kan bearbeta varje sida när den blir tillgänglig.

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(())
}

Exempelkod

Koden som visas i den här artikeln är tillgänglig på https://github.com/azure-samples/azure-sdk-for-rust-docs/.

Nästa steg