Dela via


Använda Azure SDK för Rust-lådor för att få åtkomst till Azure-tjänster

Azure SDK för Rust-lådor hjälper dig att komma åt Azure-tjänster från Rust-program. Den här artikeln beskriver hur du använder dessa lådor, inklusive autentisering, tjänster som stöds och metodtips.

Lådor | API-referensdokumentation | Källkod

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-lådorna behöver autentiseringsuppgifter för att autentisera till 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äs mer om autentisering för Azure SDK för Rust-lådor.

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. Används till exempel 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_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(())
}

Sidresultat

Om ett tjänstanrop returnerar flera värden på sidor returneras Result<Pager<T>> det 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_body()?;
        println!("items_in_page: {}", page.value.len());
    }

    Ok(())
}

Sidnumrering för att bearbeta 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