Compartir a través de


Integración de Azure Cosmos DB para Cassandra con Service Conectar or

En esta página se muestran los métodos de autenticación y los clientes admitidos y se muestra el código de ejemplo que puede usar para conectar Azure Cosmos DB para Apache Cassandra a otros servicios en la nube mediante service Conectar or. Es posible que todavía pueda conectarse a Azure Cosmos DB for Cassandra en otros lenguajes de programación sin usar Service Connector. Esta página también muestra los nombres y valores predeterminados de las variables de entorno o la configuración de Spring Boot que se obtiene al crear la conexión de servicio.

Servicios de proceso admitidos

Service Conectar or se puede usar para conectar los siguientes servicios de proceso a Azure Cosmos DB para Apache Cassandra:

  • Azure App Service
  • Azure Functions
  • Azure Container Apps
  • Azure Spring Apps

Tipos de autenticación y tipos de cliente admitidos

En la tabla siguiente se muestran las combinaciones de tipos de cliente y métodos de autenticación que se admiten para conectar el servicio de proceso a Azure Cosmos DB para Apache Cassandra mediante Service Conectar or. Un valor "Sí" indica que se admite la combinación, mientras que "No" indica que no se admite.

Tipo de cliente Identidad administrada asignada por el sistema Identidad administrada asignada por el usuario Secreto/cadena de conexión Entidad de servicio
.NET
Go
Java
Java: Spring Boot No No No
Node.js
Python
None

Esta tabla indica que se admiten todas las combinaciones de tipos de cliente y métodos de autenticación de la tabla, excepto el tipo de cliente Java - Spring Boot, que solo admite el método Secret /cadena de conexión. Todos los demás tipos de cliente pueden usar cualquiera de los métodos de autenticación para conectarse a Azure Cosmos DB para Apache Cassandra mediante service Conectar or.

Nombres de variables de entorno predeterminados o propiedades de aplicación y código de ejemplo

Consulte los detalles de conexión y el código de ejemplo de las tablas siguientes, según el tipo de autenticación y el tipo de cliente de la conexión, para conectar los servicios de proceso a Azure Cosmos DB para Apache Cassandra. Para obtener más información sobre las convenciones de nomenclatura, consulte el artículo Service Conectar or internals (Interno de service Conectar).

Identidad administrada asignada por el sistema

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_COSMOS_LISTKEYURL Dirección URL para obtener la cadena de conexión https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Ámbito de la identidad administrada https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Punto de conexión del recurso https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Punto de contacto de Azure Cosmos DB for Apache Cassandra <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Puerto de conexión de Cassandra 10350
AZURE_COSMOS_KEYSPACE Espacio de claves de Cassandra <keyspace>
AZURE_COSMOS_USERNAME Nombre de usuario de Cassandra <username>

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Cosmos DB para Cassandra mediante una identidad administrada asignada por el sistema.

  1. Instalar dependencias

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Obtenga un token de acceso para la identidad administrada o la entidad de servicio mediante la biblioteca cliente Azure.Identity. Use el token de acceso y AZURE_COSMOS_LISTKEYURL para obtener la contraseña. Obtenga la información de conexión de las variables de entorno agregadas por Service Conectar or y conéctese a Azure Cosmos DB para Cassandra. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

    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 Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
            // Uncomment the following lines according to the authentication type.
            // 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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Identidad administrada asignada por el usuario

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_COSMOS_LISTKEYURL Dirección URL para obtener la cadena de conexión https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Ámbito de la identidad administrada https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Punto de conexión del recurso https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Punto de contacto de Azure Cosmos DB for Apache Cassandra <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Puerto de conexión de Cassandra 10350
AZURE_COSMOS_KEYSPACE Espacio de claves de Cassandra <keyspace>
AZURE_COSMOS_USERNAME Nombre de usuario de Cassandra <username>
AZURE_COSMOS_CLIENTID Id. de cliente <client-ID>

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Cosmos DB para Cassandra mediante una identidad administrada asignada por el usuario.

  1. Instalar dependencias

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Obtenga un token de acceso para la identidad administrada o la entidad de servicio mediante la biblioteca cliente Azure.Identity. Use el token de acceso y AZURE_COSMOS_LISTKEYURL para obtener la contraseña. Obtenga la información de conexión de las variables de entorno agregadas por Service Conectar or y conéctese a Azure Cosmos DB para Cassandra. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

    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 Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
            // Uncomment the following lines according to the authentication type.
            // 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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Cadena de conexión

Tipo de cliente SpringBoot

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
spring.data.cassandra.contact-points Punto de contacto de Azure Cosmos DB for Apache Cassandra <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
spring.data.cassandra.port Puerto de conexión de Cassandra 10350
spring.data.cassandra.keyspace-name Espacio de claves de Cassandra <keyspace>
spring.data.cassandra.username Nombre de usuario de Cassandra <username>
spring.data.cassandra.password Contraseña de Cassandra <password>
spring.data.cassandra.local-datacenter Región de Azure <Azure-region>
spring.data.cassandra.ssl Estado SSL true

Otros tipos de cliente

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_COSMOS_CONTACTPOINT Punto de contacto de Azure Cosmos DB for Apache Cassandra <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Puerto de conexión de Cassandra 10350
AZURE_COSMOS_KEYSPACE Espacio de claves de Cassandra <keyspace>
AZURE_COSMOS_USERNAME Nombre de usuario de Cassandra <username>
AZURE_COSMOS_PASSWORD Contraseña de Cassandra <password>

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Cosmos DB para Cassandra mediante un cadena de conexión.

  1. Instalar dependencias

    dotnet add package CassandraCSharpDriver --version 3.19.3
    
  2. Obtenga la información de conexión de las variables de entorno agregadas por Service Conectar or y conéctese a Azure Cosmos DB para Cassandra.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Cassandra;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var password = Environment.GetEnvironmentVariable("AZURE_COSMOS_PASSWORD");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
    
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Para más información, consulte Compilación de una aplicación de Apache Cassandra con el SDK de .NET y Azure Cosmos DB.

Entidad de servicio

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_COSMOS_LISTKEYURL Dirección URL para obtener la cadena de conexión https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Ámbito de la identidad administrada https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Punto de conexión del recurso https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Punto de contacto de Azure Cosmos DB for Apache Cassandra <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Puerto de conexión de Cassandra 10350
AZURE_COSMOS_KEYSPACE Espacio de claves de Cassandra <keyspace>
AZURE_COSMOS_USERNAME Nombre de usuario de Cassandra <username>
AZURE_COSMOS_CLIENTID Id. de cliente <client-ID>
AZURE_COSMOS_CLIENTSECRET Secreto de cliente <client-secret>
AZURE_COSMOS_TENANTID El identificador de inquilino <tenant-ID>

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Cosmos DB para Cassandra mediante una entidad de servicio.

  1. Instalar dependencias

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Obtenga un token de acceso para la identidad administrada o la entidad de servicio mediante la biblioteca cliente Azure.Identity. Use el token de acceso y AZURE_COSMOS_LISTKEYURL para obtener la contraseña. Obtenga la información de conexión de las variables de entorno agregadas por Service Conectar or y conéctese a Azure Cosmos DB para Cassandra. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

    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 Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
            // Uncomment the following lines according to the authentication type.
            // 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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Pasos siguientes

Para más información sobre Service Connector, siga los tutoriales que se enumeran a continuación.