Sdílet prostřednictvím


Použití sady Azure SDK pro crates Rust pro přístup ke službám Azure

Sada Azure SDK for Rust vám pomůže získat přístup ke službám Azure z aplikací Rust. Tento článek vysvětluje, jak tyto bedny používat, včetně ověřování, podporovaných služeb a osvědčených postupů.

Bedny | Referenční dokumentace | k rozhraní APIZdrojový kód

Předpoklady pro vývoj s využitím krabic

Návod

Abyste dosáhli co nejlepšího vývojového prostředí, ujistěte se, že máte nainstalovanou nejnovější stabilní verzi Rustu.

Zadání přihlašovacích údajů pro ověřování

Služba Azure Crates potřebuje přihlašovací údaje k ověření v Microsoft Entra ID. Služby Azure poskytují různé metody ověřování pro připojení. Pro ověřování doporučujeme použít azure_identity bednu. Přečtěte si další informace o ověřování pro azure SDK for Rust crates.

Klientské objekty

K interakci se službami Azure používáte klientské objekty. Každý objekt klienta z crate služby odpovídá konkrétní službě Azure a poskytuje metody pro provádění operací s danou službou. Slouží například azure_security_keyvault_secrets::SecretClient k interakci s tajnými kódy služby Azure Key Vault.

Při vytváření klientských objektů můžete poskytnout ClientOptions parametr pro přizpůsobení interakcí se službou. Slouží ClientOptions k nastavení věcí, jako jsou vypršení časových limitů, zásady opakování a další konfigurace.

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

Zpracování chyb

Pokud volání služby selže, vrácená odpověď obsahuje 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_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(())
}

Výsledky stránky

Pokud volání služby vrátí více hodnot na stránkách, vrátí Result<Pager<T>> se jako Result hodnota 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(())
}

Stránkování pro zpracování každé stránky položek

Chcete-li iterovat všechny položky ve stránkované odpovědi, použijte into_pages() metodu pro vrácenou Pager. Tato metoda vrátí asynchronní datový proud stránek jako , PageIteratortakže můžete zpracovat každou stránku, jakmile bude k dispozici.

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

Ukázkový kód

Kód uvedený v tomto článku je k dispozici na .https://github.com/azure-samples/azure-sdk-for-rust-docs/

Další kroky