Hizmet Bağlayıcısı ile MongoDB için Azure Cosmos DB'yi tümleştirme

Bu makalede desteklenen kimlik doğrulama yöntemleri ve istemcileri gösterilir ve Hizmet Bağlayıcısı'nı kullanarak MongoDB için Azure Cosmos DB'yi diğer bulut hizmetlerine bağlamak için kullanabileceğiniz örnek kod gösterilir. Hizmet Bağlayıcısı'nı kullanmadan mongoDB için Azure Cosmos DB'ye diğer programlama dillerinde bağlanmaya devam edebilirsiniz. Bu sayfada, hizmet bağlantısını oluştururken elde ettiğiniz varsayılan ortam değişkeni adları ve değerleri (veya Spring Boot yapılandırması) da gösterilir.

Desteklenen işlem hizmetleri

Hizmet Bağlayıcısı, aşağıdaki işlem hizmetlerini MongoDB için Azure Cosmos DB'ye bağlamak için kullanılabilir:

  • Azure App Service
  • Azure Container Uygulamaları
  • Azure İşlevleri
  • Azure Kubernetes Hizmeti (AKS)
  • Azure Spring Apps

Desteklenen kimlik doğrulama türleri ve istemci türleri

Aşağıdaki tabloda, hizmet bağlayıcısı kullanarak işlem hizmetinizi MongoDB için Azure Cosmos DB'ye bağlamak için hangi istemci türlerinin ve kimlik doğrulama yöntemlerinin desteklendiği gösterilmektedir. Evet, birleşimin desteklendiğini, Hayır ise desteklenmediğini belirtir.

İstemci türü Sistem tarafından atanan yönetilen kimlik Kullanıcı atamalı yönetilen kimlik Gizli anahtar / bağlantı dizesi Servis Principal
.NET Yes Yes Yes Yes
Java Yes Yes Yes Yes
Java - Spring Boot Hayır Hayır Yes Hayır
Node.js Yes Yes Yes Yes
Python Yes Yes Yes Yes
Go Yes Yes Yes Yes
Hiçbiri Yes Yes Yes Yes

Bu tablo, Java - Spring Boot istemci türü dışında tablodaki tüm istemci türlerinin ve kimlik doğrulama yöntemlerinin bileşimlerinin desteklendiğini gösterir. Bu istemci türü yalnızca Gizli/ bağlantı dizesi yöntemini destekler. Diğer tüm istemci türleri, Hizmet Bağlayıcısı'nı kullanarak MongoDB için Azure Cosmos DB'ye bağlanmak için herhangi bir kimlik doğrulama yöntemini kullanabilir.

Uyarı

Cosmos DB, yönetilen kimlik aracılığıyla kimlik doğrulamayı yerel olarak desteklemez. Bu nedenle, Hizmet Bağlayıcısı bağlantı dizesini almak için yönetilen kimliği kullanır ve bu bağlantı dizesi kullanılarak bağlantı kurulur.

Varsayılan ortam değişkeni adları veya uygulama özellikleri ve örnek kod

İşlem hizmetlerini Azure Cosmos DB'ye bağlamak için aşağıdaki bağlantı ayrıntılarını kullanın. Bu sayfada, hizmet bağlantısını oluştururken elde ettiğiniz varsayılan ortam değişkeni adları ve değerleri (veya Spring Boot yapılandırması) ve örnek kod da gösterilir. Bu örneklerin her biri için , , <mongo-db-admin-user>, <password><Azure-Cosmos-DB-API-for-MongoDB-account>, , <subscription-ID>, <resource-group-name>ve <client-secret> yer tutucu metinlerini <tenant-id>kendi bilgilerinizle değiştirin. Adlandırma kuralları hakkında daha fazla bilgi için Hizmet Bağlayıcısı iç bilgileri makalesine bakın.

Sistem tarafından atanan yönetilen kimlik

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Bağlantı dizesini almak için bir URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Yönetilen kimlik kapsamınız https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Kaynak uç noktanız https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

Örnek kod

Sistem tarafından atanan yönetilen kimliği kullanarak MongoDB için Azure Cosmos DB'ye bağlanmak için aşağıdaki adımlara ve örnek koda bakın.

Cosmos DB, yönetilen kimlik aracılığıyla kimlik doğrulamasını yerel olarak desteklemediğinden, aşağıdaki kod örneğinde bağlantı dizesini almak için yönetilen kimliği kullanırız ve bu bağlantı dizesi kullanılarak bağlantı kurulur.

  1. Bağımlılıkları yükleme

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. Azure.Identity istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alın. Erişim belirtecini ve AZURE_COSMOS_LISTCONNECTIONSTRINGURL kullanarak bağlantı dizesini alın. Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın ve MongoDB için Azure Cosmos DB'ye bağlanın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    // you can retrieve the endpoint of the resource with the following env variable:
    // Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID")
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.PostAsync(new Uri(listConnectionStringUrl), null);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

Kullanıcı atamalı yönetilen kimlik

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Bağlantı dizesini almak için URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Yönetilen kimlik kapsamınız https://management.azure.com/.default
AZURE_COSMOS_CLIENTID İstemci kimliğiniz <client-ID>
AZURE_COSMOS_RESOURCEENDPOINT Kaynak uç noktanız https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

Örnek kod

Kullanıcı tarafından atanan yönetilen kimliği kullanarak MongoDB için Azure Cosmos DB'ye bağlanmak için aşağıdaki adımlara ve örnek koda bakın.

Cosmos DB, yönetilen kimlik aracılığıyla kimlik doğrulamasını yerel olarak desteklemediğinden, aşağıdaki kod örneğinde bağlantı dizesini almak için yönetilen kimliği kullanırız ve bu bağlantı dizesi kullanılarak bağlantı kurulur.

  1. Bağımlılıkları yükleme

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. Azure.Identity istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alın. Erişim belirtecini ve AZURE_COSMOS_LISTCONNECTIONSTRINGURL kullanarak bağlantı dizesini alın. Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın ve MongoDB için Azure Cosmos DB'ye bağlanın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    // you can retrieve the endpoint of the resource with the following env variable:
    // Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID")
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.PostAsync(new Uri(listConnectionStringUrl), null);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

Bağlantı dizesi

Uyarı

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Bu yordamda açıklanan kimlik doğrulama akışı, uygulamada yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca yönetilen kimlikler gibi diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.

Spring Boot istemci türü

Varsayılan ortam değişkeni adı Açıklama Örnek değer
spring.data.mongodb.database Veritabanınız <database-name>
spring.data.mongodb.uri Veritabanı URI'niz mongodb://<mongo-db-admin-user>:<password>@<mongo-db-server>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@<mongo-db-server>@

Diğer istemci türleri

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_COSMOS_CONNECTIONSTRING MongoDB API bağlantı dizesi mongodb://<mongo-db-admin-user>:<password>@<mongo-db-server>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@<mongo-db-server>@

Örnek kod

MongoDB için Azure Cosmos DB'ye bağlantı dizesi kullanarak bağlanmak için aşağıdaki adımlara ve örnek koda bakın.

  1. Bağımlılığı yükleyin.

    dotnet add package MongoDb.Driver
    
  2. Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden bağlantı dizesi alın ve MongoDB için Azure Cosmos DB'ye bağlanın.

    using MongoDB.Driver;
    
    var connectionString = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONNECTIONSTRING");
    var client = new MongoClient(connectionString);
    

Servis Principal

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Bağlantı dizesini almak için URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Yönetilen kimlik kapsamınız https://management.azure.com/.default
AZURE_COSMOS_CLIENTID İstemci kimliğiniz <client-ID>
AZURE_COSMOS_CLIENTSECRET İstemci şifreniz <client-secret>
AZURE_COSMOS_TENANTID Kiracı kimliğiniz <tenant-ID>
AZURE_COSMOS_RESOURCEENDPOINT Kaynak uç noktanız https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

Örnek kod

Hizmet sorumlusu kullanarak MongoDB için Azure Cosmos DB'ye bağlanmak için aşağıdaki adımlara ve örnek koda bakın.

  1. Bağımlılıkları yükleme

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. Azure.Identity istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alın. Erişim belirtecini ve AZURE_COSMOS_LISTCONNECTIONSTRINGURL kullanarak bağlantı dizesini alın. Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın ve MongoDB için Azure Cosmos DB'ye bağlanın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    // you can retrieve the endpoint of the resource with the following env variable:
    // Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID")
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.PostAsync(new Uri(listConnectionStringUrl), null);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

Sonraki adımlar

Service Connector hakkında daha fazla bilgi edinmek için aşağıdaki öğreticiye bakın.