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.
Neste guia, você criará um aplicativo de console do Rust para se conectar a um cluster do Azure DocumentDB. O guia aborda a configuração do ambiente de desenvolvimento, usando o crate azure_identity do SDK do Azure para Rust para autenticação e gerenciamento de documentos no banco de dados.
Pré-requisitos
Uma assinatura do Azure
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita
Um cluster existente do Azure DocumentDB
- Se você não tiver um cluster, crie um novo cluster
Utilize o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se você estiver executando no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
Autenticação do Microsoft Entra configurada para o cluster com sua identidade concedida à função
root.- Para habilitar a autenticação do Microsoft Entra, examine o guia de configuração.
Versão mais recente do Python.
Configurar seu aplicativo de console
Em seguida, crie um novo projeto de aplicativo de console e importe as bibliotecas necessárias para autenticar no cluster.
Criar um novo projeto do Rust usando
cargo new.cargo new mongodb-app cd mongodb-appAdicione o crate
azure_coreàs suas dependências.cargo add azure_coreAdicione o crate
azure_identitypara autenticação.cargo add azure_identityAdicione o crate do driver
mongodbpara interagir com o cluster.cargo add mongodbPara operações assíncronas, adicione também os crates de suporte
tokio,futureseserde.cargo add tokio --features full cargo add futures cargo add serde --features derive
Conectar-se ao cluster
Agora, use a biblioteca Azure.Identity para obter uma TokenCredential a ser usada para conectar-se ao cluster. O driver oficial do MongoDB tem uma interface especial que deve ser implementada para obter tokens do Microsoft Entra para uso ao se conectar ao cluster.
Abra o arquivo main.rs e importe os crates e módulos necessários.
use azure_core::credentials::TokenCredential; use azure_identity::DefaultAzureCredential; use futures::{FutureExt, TryStreamExt}; use mongodb::{ Client, bson::doc, options::{ AuthMechanism, ClientOptions, Credential, oidc::{self, IdpServerResponse}, }, }; use serde::{Deserialize, Serialize};Crie a função assíncrona principal com o tratamento de erro necessário.
#[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { Ok(()) }Criar uma nova instância do struct
azure_identity::DefaultAzureCredential.let credential = DefaultAzureCredential::new()?;Crie um retorno de chamada de credencial para lidar com as solicitações de token do cliente MongoDB.
let azure_identity_token_credential = Credential::builder() .mechanism(AuthMechanism::MongoDbOidc) .oidc_callback(oidc::Callback::machine(move |_| { let azure_credential = credential.clone(); async move { let access_token = azure_credential .get_token(&["https://ossrdbms-aad.database.windows.net/.default"]) .await .map_err(|e| { mongodb::error::Error::custom(format!("Azure token error: {}", e)) })?; Ok(IdpServerResponse::builder() .access_token(access_token.token.secret().to_owned()) .build()) } .boxed() })) .build() .into();Defina um indicador de recurso uniforme (URI) do cluster usando seu nome, esquema e ponto de extremidade global.
let cluster_name = "<azure-documentdb-cluster-name>"; let uri = format!( "mongodb+srv://{}.global.mongocluster.cosmos.azure.com/", cluster_name );Construa uma
mongodb::ClientOptionsinstância usando a configuração de práticas recomendadas, seu URI e o callback de credenciais.let mut client_options = ClientOptions::parse(uri).await?; client_options.connect_timeout = Some(std::time::Duration::from_secs(120)); client_options.tls = Some(mongodb::options::Tls::Enabled(Default::default())); client_options.retry_writes = Some(true); client_options.credential = Some(azure_identity_token_credential);Crie uma nova instância de
mongodb::Clientusando as configurações construídas.let client = Client::with_options(client_options)?; println!("Client created");
Executar operações comuns
Por fim, use a biblioteca oficial para executar tarefas comuns com bancos de dados, coleções e documentos. Aqui, você usa as mesmas classes e métodos que usaria para interagir com MongoDB ou DocumentDB para gerenciar suas coleções e itens.
Crie um struct do Rust para representar seus documentos
Productcom suporte de serialização paraserde.#[derive(Serialize, Deserialize, Debug)] struct Product { _id: String, category: String, name: String, quantity: i32, price: f64, clearance: bool, }Obtenha uma referência ao banco de dados pelo nome.
let database = client.database("<database-name>"); println!("Database pointer created");Obtenha uma referência à sua coleção.
let collection = database.collection::<Product>("<collection-name>"); println!("Collection pointer created");Crie um documento usando
collection.update_onee insira-o na coleção.let document = Product { _id: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb".to_string(), category: "gear-surf-surfboards".to_string(), name: "Yamba Surfboard".to_string(), quantity: 12, price: 850.00, clearance: false, }; let response = collection .update_one( doc! { "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }, doc! { "$set": mongodb::bson::to_document(&document)? }, ) .upsert(true) .await?; println!("Documents upserted count:\t{}", response.modified_count);Leia um documento específico da coleção usando
collection.find_onee um filtro.let document = collection .find_one(doc! { "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }) .await?; println!("Read document _id:\t{:#?}", document.unwrap()._id);Consultar vários documentos correspondentes a um filtro usando
collection.find.let filter = doc! { "category": "gear-surf-surfboards" }; let mut cursor = collection.find(filter).await?; while let Some(document) = cursor.try_next().await? { println!("Found document:\t{:#?}", document); }