Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет SDK Azure для Rust помогает получить доступ к службам Azure из приложений Rust. В этой статье объясняется, как использовать эти ящики, включая проверку подлинности, поддерживаемые службы и рекомендации.
Ящики | Справочная документация по | APIИсходный код
Предварительные требования для разработки с ящиками
- Rust 1.85 или более поздней версии. Версия указана в пакете SDK Azure для Rust crates Cargo.toml.
- Подписка Azure. Вы можете создать бесплатную учетную запись.
- Azure CLI
- Интерфейс командной строки разработчика Azure
- Пакет SDK Azure для Rust
Подсказка
Для оптимальной разработки убедитесь, что установлена последняя стабильная версия Rust.
Предоставление учетных данных проверки подлинности
Для проверки подлинности в идентификаторе Microsoft Entra в ящиках Azure требуются учетные данные. Службы Azure предоставляют различные методы проверки подлинности для подключения. Рекомендуется использовать azure_identity ящик для проверки подлинности. Дополнительные сведения о проверке подлинности для пакета SDK Azure для 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(())
}
Обработка ошибок
При сбое вызова службы возвращаемый ответ содержит 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/
Дальнейшие шаги
- Ящики пакета SDK Azure для Crates.io — список доступных контейнеров Azure SDK
- Рекомендации по проектированию пакета SDK Для Azure. Принципы разработки и шаблоны
- Репозиторий Azure SDK для Rust GitHub — проблемы и исходный код
- Документация по грузоперевозки — полный справочник по грузоперевозку