Azure SDK for Rust クレートは、Rust アプリケーションから Azure サービスにアクセスするのに役立ちます。 この記事では、認証、サポートされているサービス、ベスト プラクティスなど、これらのクレートを使用する方法について説明します。
クレート | API リファレンス ドキュメント | ソースコード
クレートを使用して開発するための前提条件
- Rust 1.85 以降。 このバージョンは、Azure SDK for Rust クレート Cargo.toml で指定されています。
- Azure サブスクリプション。 無料で作成できます。
- Azure CLI
- Azure Developer CLI
- Rust クレート用 Azure SDK
ヒント
最適な開発エクスペリエンスを実現するために、最新の安定したバージョンの Rust がインストールされていることを確認します。
認証資格情報を指定する
Azure クレートには、Microsoft Entra ID に対する認証に資格情報が必要です。 Azure サービスは、接続にさまざまな認証方法を提供します。 認証には azure_identity クレートを使用することをお勧めします。
Rust クレート用 Azure SDK の認証の詳細について説明します。
クライアント オブジェクト
クライアント オブジェクトを使用して 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(())
}
エラー処理
サービス呼び出しが失敗した場合、返される 応答 には 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として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 ドキュメント - 完全な Cargo リファレンス