Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure SDK для контейнеров Rust помогают получить доступ к службам Azure из приложений Rust. В этой статье объясняется, как использовать эти ящики, включая проверку подлинности, поддерживаемые службы и рекомендации.
Crates | API справочная документация | Source code
Important
Используйте последнюю стабильную версию 1.x Azure SDK для выпусков crate rust для новой разработки. Каждая версия креста независимо, поэтому используйте последнюю стабильную версию 1.x для каждого ящика, от которой зависит ваше приложение.
Предварительные требования для разработки с ящиками
- Rust 1.85 или более поздней версии. Версия указана в Azure SDK для crates Rust Cargo.toml.
- Подписка Azure. Вы можете создать бесплатную учетную запись.
- Azure CLI;
- Azure CLI для разработчиков
- Azure SDK для ящиков Rust
Подсказка
Для оптимальной разработки убедитесь, что установлена последняя стабильная версия Rust.
Предоставьте учетные данные для аутентификации
Azure-контейнерам требуются учетные данные для проверки подлинности в Microsoft Entra ID. службы Azure предоставляют различные методы проверки подлинности для подключения. Рекомендуется использовать azure_identity crate для аутентификации. Дополнительные сведения об аутентификации для Azure SDK для пакетов Rust.
Клиентские объекты
Используйте клиентские объекты для взаимодействия со службами Azure. Каждый объект клиента из пакета службы соответствует определенной службе Azure и предоставляет методы для выполнения операций с этой службой. Например, используйте azure_security_keyvault_secrets::SecretClient для взаимодействия с Azure Key Vault секретами. Вы также можете использовать QueueClientи KeyClientCertificateClient для Хранилище очередей Azure, ключей Azure Key Vault и 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>> в виде 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_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/.
Дальнейшие шаги
- Azure SDK ящики на Crates.io — список доступных Azure SDK ящиков
- Azure SDK рекомендации по проектированию — принципы проектирования и шаблоны
- Azure SDK для репозитория Rust GitHub — проблемы и исходный код
- Документация по грузоперевозки — полный справочник по грузоперевозку