Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SDK do Azure para crates em Rust ajuda você a acessar os serviços da Azure a partir de aplicativos Rust. Este artigo explica como usar esses crates, incluindo autenticação, serviços com suporte e práticas recomendadas.
Crates | documentação de referência da API | Código-fonte
Importante
Use as versões estáveis mais recentes dos crates do SDK do Azure para Rust em novos desenvolvimentos. Cada crate tem versionamento independente, portanto use a versão estável mais recente de cada crate da qual sua aplicação depende.
Pré-requisitos para desenvolver com crates
- A cadeia de ferramentas estável mais recente do Rust. Se você precisar da versão mínima compatível do Rust (MSRV), verifique o campo
rust-versionno manifesto do workspace do SDK do Azure para Rust. - Uma assinatura Azure. É possível criar uma gratuitamente.
- CLI do Azure
- CLI para Desenvolvedores do Azure
- Crates do SDK do Azure para Rust
Fornecer credenciais de autenticação
Os crates do Azure precisam de credenciais para se autenticar no Microsoft Entra ID. Azure serviços fornecem métodos de autenticação diferentes para conexão. É recomendável usar o azure_identity crate para autenticação. Saiba mais sobre autenticação no SDK do Azure para crates Rust.
Objetos de cliente
Use objetos cliente para interagir com serviços de Azure. Cada objeto cliente, do crate de um serviço, corresponde a um serviço Azure específico e fornece métodos para executar operações nesse serviço. Por exemplo, use azure_security_keyvault_secrets::SecretClient para interagir com segredos do Azure Key Vault. Você também pode usar QueueClient, KeyClient e CertificateClient para Armazenamento de Filas do Azure, chaves do Azure Key Vault e certificados do Azure Key Vault.
Ao criar os objetos do cliente, você pode fornecer um ClientOptions parâmetro para personalizar as interações com o serviço. Use ClientOptions para definir coisas como tempos limite, 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_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(())
}
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_model()?;
println!("items_in_page: {}", page.value.len());
}
Ok(())
}
Paginação para processar cada página de itens
Para iterar por todos os itens em uma resposta paginada, use o método into_pages() no Pager retornado. Esse método retorna um fluxo assíncrono de páginas como um PageIterator, para que você possa processar cada página conforme 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óximas etapas
- Crates do SDK do Azure no Crates.io - Liste de disponíveis SDK do Azure crates
- diretrizes de design SDK do Azure – Princípios e padrões de design
- SDK do Azure para o repositório rust GitHub - problemas e código-fonte
- Documentação de carga – Referência completa de carga