Azure SDK for Rust crates 幫助你從 Rust 應用程式存取 Azure 服務。 本文說明如何使用這些 Crate,包括驗證、支援的服務和最佳做法。
Important
進行新開發時,請使用最新版且穩定的 Azure SDK for Rust crate 發行版本。 每個 crate 都各自獨立演進版本,因此請針對您的應用程式所依賴的每個 crate,使用其最新的穩定版本。
使用板條箱開發的先決條件
-
最新穩定的 Rust 工具鏈。 如果你需要最低支援的 Rust 版本(MSRV),請在 Azure SDK 裡的 Rust Workspace 清單欄位查詢
rust-version。 - 一個 Azure 訂閱。 您可以免費建立一個訂用帳戶。
- Azure CLI
- Azure 開發者 CLI
- Azure SDK 用於 Rust crates
提供驗證認證
Azure crates 需要憑證才能認證到 Microsoft Entra ID。 Azure 服務提供不同的連線認證方法。 我們建議使用 azure_identity crate 進行身份驗證。 了解更多關於 Azure SDK 中 Rust crate 的驗證。
用戶端物件
使用用戶端物件來與 Azure 服務互動。 每個客戶端物件來自服務的 crate 對應特定 Azure 服務,並提供執行該服務操作的方法。 例如,使用 azure_security_keyvault_secrets::SecretClient 與 Azure Key Vault 祕密互動。 你也可以使用 QueueClient、 KeyClient,以及 CertificateClient 用於 Azure 佇列儲存體、Azure Key Vault 金鑰和 Azure Key Vault 憑證。
當您建立用戶端物件時,您可以提供參數 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_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(())
}
頁面結果
如果服務呼叫在頁面中傳回多個值,則會將Result<Pager<T>>傳回作為Result的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(())
}
使用分頁來處理每一頁的項目
若要逐一遍歷編頁回應中的所有項目,請使用返回的 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/找到。
後續步驟
- Azure SDK 套件 Crates.io - 可用的 Azure SDK 套件列表
- Azure SDK 設計指引 - 設計原則與模式
- Azure SDK 用於 Rust GitHub 倉庫 - 問題與原始碼
- 貨物文件 - 完整的貨物參考