Rust용 Azure SDK Rust 애플리케이션에서 Azure 서비스에 액세스하는 데 도움이 됩니다. 이 문서에서는 인증, 지원되는 서비스 및 모범 사례를 포함하여 이러한 상자를 사용하는 방법을 설명합니다.
Crates | API 참조 설명서 | 소스 코드
Important
새로운 개발을 위해 Rust 크레이트 릴리스에 안정적인 최신 Azure SDK 사용합니다. 각 크레이트는 독립적으로 버전이므로 애플리케이션이 의존하는 각 크레이트에 대해 안정적인 최신 릴리스를 사용합니다.
크레이트를 사용하여 개발하기 위한 필수 구성 요소
-
안정적인 최신 Rust 도구 체인입니다. 지원되는 최소 Rust 버전(MSRV)이 필요한 경우 Azure SDK Rust 작업 영역 매니페스트의 필드를 확인
rust-version합니다. - Azure 구독입니다. 무료로 하나를 만들 수 있습니다.
- Azure CLI
- Azure 개발자 명령줄 인터페이스
- Rust 크레이트용 Azure SDK
인증 자격 증명 제공
Azure 크레이트는 Microsoft Entra ID로 인증하려면 자격 증명이 필요합니다. Azure 서비스는 연결에 대해 서로 다른 인증 방법을 제공합니다. 인증에 azure_identity 모듈을 사용하는 것을 권장합니다. Rust 크레이트용 Azure SDK 인증 대해 자세히 알아봅니다.
클라이언트 개체
클라이언트 개체를 사용하여 Azure 서비스와 상호 작용합니다. 서비스의 상자에서 각 클라이언트 개체는 특정 Azure 서비스에 해당하며 해당 서비스에 대한 작업을 수행하는 메서드를 제공합니다. 예를 들어, Azure Key Vault 비밀 정보와 상호 작용하려면 azure_security_keyvault_secrets::SecretClient를 사용합니다. 또한 QueueClientAzure Queue Storage, KeyClientAzure Key Vault 키, CertificateClientAzure 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_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>>은/는 ResultPager로 반환됩니다.
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/에서 이용할 수 있습니다.
다음 단계
- Crates.io의 Azure SDK 크레이트 - 사용 가능한 Azure SDK 크레이트 목록
- Azure SDK 디자인 지침 - 디자인 원칙 및 패턴
- Rust GitHub 리포지토리용 Azure SDK - 문제 및 소스 코드
- 화물 설명서 - 전체 화물 참조