適用於 Rust 的 Azure SDK Crate 可協助您從 Rust 應用程式存取 Azure 服務。 本文說明如何使用這些 Crate,包括驗證、支援的服務和最佳做法。
使用板條箱開發的先決條件
- Rust 1.85 或更高版本。 版本是在適用於 Rust 的 Azure SDK Crates Cargo.toml 中指定。
- Azure 訂用帳戶。 您可以免費建立一個訂用帳戶。
- Azure CLI
- Azure 開發人員命令列介面
- 適用於 Rust 的 Azure SDK
小提示
為了獲得最佳開發體驗,請確保您安裝了最新的穩定版本的 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(())
}
錯誤處理
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/找到。
後續步驟
- Crates.io 上的 Azure SDK 箱 - 可用的 Azure SDK 箱清單
- Azure SDK 設計指導方針 - 設計原則和模式
- 適用於 Rust GitHub 存放庫的 Azure SDK - 問題和原始程式碼
- 貨物文件 - 完整的貨物參考