Azure hizmetlerine erişmek için Rust kasaları için Azure SDK kullanma

Rust kasaları için Azure SDK, Rust uygulamalarından Azure hizmetlere erişmenize yardımcı olur. Bu makalede kimlik doğrulaması, desteklenen hizmetler ve en iyi yöntemler de dahil olmak üzere bu kasaların nasıl kullanılacağı açıklanmaktadır.

Crates | API başvuru belgeleri | Source kodu

Kasalarla geliştirme önkoşulları

Tavsiye

En iyi geliştirme deneyimi için Rust'ın en son kararlı sürümünün yüklü olduğundan emin olun.

Kimlik doğrulama bilgilerini sağlayın

Azure bileşenlerinin Microsoft Entra ID'ye kimlik doğrulaması yapmak için kimlik bilgilerine ihtiyacı vardır. Azure hizmetleri, bağlantı için farklı kimlik doğrulama yöntemleri sağlar. Kimlik doğrulaması için azure_identity paketini kullanmanızı öneririz. Rust kasaları için Azure SDK için kimlik doğrulama hakkında daha fazla bilgi edinin.

İstemci nesneleri

Azure hizmetleriyle etkileşime geçmek için istemci nesnelerini kullanırsınız. Bir hizmetin kasasından her istemci nesnesi belirli bir Azure hizmetine karşılık gelir ve bu hizmette işlem gerçekleştirme yöntemleri sağlar. Örneğin, azure_security_keyvault_secrets::SecretClient Azure Key Vault gizli dizilerle etkileşime geçmek için kullanılır.

İstemci nesnelerini oluşturduğunuzda, hizmetle etkileşimleri özelleştirmek için bir ClientOptions parametre sağlayabilirsiniz. Zaman aşımları, yeniden deneme ilkeleri ve diğer yapılandırmalar gibi öğeleri ayarlamak için kullanın ClientOptions .

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

Hata yönetimi

Bir hizmet çağrısı başarısız olduğunda, döndürülen Yanıt öğesini statusiçerir.

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

Sayfa sonuçları

Bir hizmet çağrısı sayfalarda birden çok değer döndürürse, Result<Pager<T>>, bir ResultPager olarak döndürülür.

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

Öğelerin her sayfasını işlemek için sayfalandırma

Tüm öğeleri sayfalandırılmış bir yanıtta yinelemek için, döndürülen into_pages() üzerinde Pager yöntemini kullanın. Bu yöntem, zaman uyumsuz bir sayfa akışını olarak PageIteratordöndürür, böylece her sayfayı kullanılabilir hale geldikçe işleyebilirsiniz.

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

Örnek kodu

Bu makalede gösterilen kod https://github.com/azure-samples/azure-sdk-for-rust-docs/ üzerinde mevcuttur.

Sonraki Adımlar