Bagikan melalui


Menggunakan Azure SDK untuk peti Rust untuk mengakses layanan Azure

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

Peti | Dokumentasi | referensi APIKode 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 ke ID Microsoft Entra. Layanan Azure menyediakan metode autentikasi yang berbeda untuk koneksi. Sebaiknya gunakan peti azure_identity untuk autentikasi. Pelajari selengkapnya tentang autentikasi untuk Azure SDK untuk peti 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 halaman

Jika panggilan layanan mengembalikan beberapa nilai dalam halaman, panggilan akan Result<Pager<T>> ditampilkan 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(())
}

Penomoran halaman untuk memproses setiap halaman item

Untuk melakukan iterasi melalui semua item dalam respons paginated, gunakan into_pages() metode 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