用于 Rust 的 Azure SDK 箱可帮助你从 Rust 应用程序访问 Azure 服务。 本文介绍如何使用这些箱,包括身份验证、支持的服务和最佳做法。
使用箱进行开发的先决条件
- Rust 1.85 或更高版本。 版本在 Azure SDK for Rust 箱 Cargo.toml 中指定。
- 一份 Azure 订阅。 可以免费创建一个帐户。
- Azure CLI
- Azure 开发者命令行界面 (CLI)
- 用于 Rust 的 Azure SDK 箱
小窍门
为获得最佳开发体验,请确保已安装最新的稳定版本的 Rust。
提供身份验证凭据
Azure 箱需要凭据才能Microsoft Entra ID 进行身份验证。 Azure 服务为连接提供不同的身份验证方法。 建议使用 azure_identity 箱进行身份验证。 详细了解 Azure SDK for Rust 箱的身份验证。
客户端对象
使用客户端对象与 Azure 服务交互。 服务箱中的每个客户端对象对应于特定的 Azure 服务,并提供对该服务执行作的方法。 例如, azure_security_keyvault_secrets::SecretClient 用于与 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_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。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 设计指南 - 设计原则和模式
- Azure SDK for Rust GitHub 存储库 - 问题和源代码
- 货物文档 - 完整的 Cargo 参考