Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O SDK do Azure para caixas Rust ajuda você a acessar os serviços do Azure a partir de aplicativos Rust. Este artigo explica como usar essas caixas, incluindo autenticação, serviços suportados e práticas recomendadas.
Caixas | Documentação | Código fonte
Pré-requisitos para desenvolver com caixas
- Ferrugem 1,85 ou posterior. A versão é especificada no SDK do Azure para caixas Rust Cargo.toml.
- Uma assinatura do Azure. Você pode criar um gratuitamente.
- CLI do Azure
- CLI do Azure para Desenvolvedores
- SDK do Azure para caixas Rust
Sugestão
Para obter a melhor experiência de desenvolvimento, certifique-se de ter a versão estável mais recente do Rust instalada.
Fornecer credenciais de autenticação
As caixas do Azure precisam de credenciais para se autenticarem no Microsoft Entra ID. Os serviços do Azure fornecem diferentes métodos de autenticação para conexão. Recomendamos o uso da azure_identity caixa para autenticação. Saiba mais sobre a autenticação para caixas do SDK do Azure para Rust.
Objetos de cliente
Você usa objetos de cliente para interagir com os serviços do Azure. Cada objeto de cliente, da caixa de um serviço, corresponde a um serviço específico do Azure e fornece métodos para executar operações nesse serviço. Por exemplo, azure_security_keyvault_secrets::SecretClient é usado para interagir com segredos do Cofre de Chaves do Azure.
Ao criar os objetos cliente, você pode fornecer um ClientOptions parâmetro para personalizar as interações com o serviço. Use ClientOptions para definir coisas como tempos limites, políticas de repetição e outras configurações.
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(())
}
Tratamento de erros
Quando uma chamada de serviço falha, a Resposta retornada contém o 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(())
}
Resultados da página
Se uma chamada de serviço retornar vários valores em páginas, ela retornará Result<Pager<T>> como um Result de 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(())
}
Paginação para processar cada página de itens
Para iterar todos os itens em uma resposta paginada, use o into_pages() método no .Pager Esse método retorna um fluxo assíncrono de páginas como um PageIterator, para que você possa processar cada página à medida que ela se torna disponível.
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(())
}
Código de exemplo
O código mostrado neste artigo está disponível em https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Próximos passos
- Azure SDK crates on Crates.io - Lista de caixas disponíveis do SDK do Azure
- Diretrizes de design do SDK do Azure - Princípios e padrões de design
- Azure SDK for Rust GitHub repository - Problemas e código-fonte
- Documentação da carga - Referência completa da carga