Gunakan Azure SDK untuk peti Rust untuk mengakses layanan Azure

Azure SDK untuk peti Rust membantu Anda mengakses layanan Azure dari aplikasi Rust. Artikel ini menjelaskan cara menggunakan peti ini, termasuk autentikasi, layanan yang didukung, dan praktik terbaik.

Crates | Dokumen referensiAPI | Kode sumber

Prasyarat untuk berkembang dengan peti

Petunjuk / Saran

Untuk pengalaman pengembangan terbaik, pastikan Anda menginstal Rust versi stabil terbaru.

Berikan kredensial autentikasi

Peti Azure memerlukan kredensial untuk mengautentikasi dengan Microsoft Entra ID. layanan Azure menyediakan metode autentikasi yang berbeda untuk koneksi. Sebaiknya gunakan peti azure_identity untuk autentikasi. Pelajari selengkapnya tentang otentikasi untuk paket Azure SDK Rust.

Objek klien

Anda menggunakan objek klien untuk berinteraksi dengan layanan Azure. Setiap objek klien, dari peti layanan, sesuai dengan layanan Azure tertentu dan menyediakan metode untuk melakukan operasi pada layanan tersebut. Misalnya, azure_security_keyvault_secrets::SecretClient digunakan untuk berinteraksi dengan rahasia Azure Key Vault.

Saat membuat objek klien, Anda dapat memberikan ClientOptions parameter untuk menyesuaikan interaksi dengan layanan. Gunakan ClientOptions untuk mengatur hal-hal seperti batas waktu, kebijakan coba lagi, dan konfigurasi lainnya.

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

Penanganan kesalahan

Ketika panggilan layanan gagal, Respons yang dikembalikan berisi 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(())
}

Hasil pencarian halaman

Jika pemanggilan layanan mengembalikan beberapa nilai dalam bentuk halaman, ini akan mengembalikan Result<Pager<T>> sebagai Result dari 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(())
}

Paginasi untuk memproses setiap halaman item

Untuk melakukan iterasi melalui semua item dalam respons paginated, gunakan metode into_pages() pada yang dikembalikan Pager. Metode ini mengembalikan aliran asinkron halaman sebagai PageIterator, sehingga Anda dapat memproses setiap halaman saat tersedia.

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

Contoh kode

Kode yang diperlihatkan dalam artikel ini tersedia di https://github.com/azure-samples/azure-sdk-for-rust-docs/.

Langkah selanjutnya