共用方式為


使用適用於 Rust 的 Azure SDK 來存取 Azure 服務

適用於 Rust 的 Azure SDK Crate 可協助您從 Rust 應用程式存取 Azure 服務。 本文說明如何使用這些 Crate,包括驗證、支援的服務和最佳做法。

板條箱 | API 參考文件 | 原始程式碼

使用板條箱開發的先決條件

小提示

為了獲得最佳開發體驗,請確保您安裝了最新的穩定版本的 Rust。

提供驗證認證

Azure 箱需要認證才能向 Microsoft Entra ID 進行驗證。 Azure 服務提供不同的連線驗證方法。 我們建議使用板條箱進行 azure_identity 身份驗證。 深入瞭解適用於 Rust 的 Azure SDK 箱的驗證

用戶端物件

您可以使用用戶端物件與 Azure 服務互動。 來自服務 crate 的每個用戶端物件都會對應至特定的 Azure 服務,並提供對該服務執行作業的方法。 例如,用 azure_security_keyvault_secrets::SecretClient 來與 Azure 金鑰保存庫秘密互動。

當您建立用戶端物件時,您可以提供參數 ClientOptions 來自訂與服務的互動。 用 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(())
}

錯誤處理

當服務呼叫失敗時,傳回的 回應 會包含 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_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(())
}

頁面結果

如果服務呼叫在頁面中傳回多個值,則會傳回Result<Pager<T>>Result為 of 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(())
}

分頁以處理項目的每一頁

若要逐一查看編頁回應中的所有項目,請使用 into_pages() 傳回 Pager的 . 這個方法會傳回頁面的非同步串流作為 PageIterator,因此您可以在每個頁面可用時處理它。

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

範例程式碼

本文中顯示的程式碼可在 上 https://github.com/azure-samples/azure-sdk-for-rust-docs/找到。

後續步驟