Rust용 Azure SDK 크레이트는 Rust 애플리케이션에서 Azure 서비스에 액세스하는 데 도움이 됩니다. 이 문서에서는 인증, 지원되는 서비스 및 모범 사례를 포함하여 이러한 상자를 사용하는 방법을 설명합니다.
상자 | API 참조 설명서 | 소스 코드
크레이트를 사용하여 개발하기 위한 필수 구성 요소
- 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 위해 상자를 사용하는 것이 좋습니다.
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 디자인 지침 - 디자인 원칙 및 패턴
- Rust GitHub 리포지토리용 Azure SDK - 문제 및 소스 코드
- 화물 설명서 - 전체 화물 참조