Conexión de una aplicación externa
Sus aplicaciones y controladores utilizan series de conexión para realizar una conexión con IBM Cloud® Databases for MongoDB. Cada despliegue tiene series de conexión específicamente para controladores y aplicaciones. Las cadenas de conexión se muestran en el panel Endpoints de la vista general de la implantación y también se pueden recuperar desde el complemento CLI de Cloud Databases y la API de Cloud Databases.
Las cadenas de conexión pueden ser utilizadas por cualquiera de los usuarios que cree en su implantación. Aunque puede utilizar el usuario administrador para todas las conexiones y aplicaciones, quizás sea mejor crear usuarios específicamente para conectarse a las aplicaciones. Para obtener más información, consulte Obtención de cadenas de conexión.
Al conectar una aplicación externa, utilice únicamente controladores compatibles con MongoDB o MongoDB's Bibliotecas destacadas apoyadas por la comunidad. Cloud Databases no admite ningún controlador que no sea compatible con MongoDB.
Utilización de la información de conexión
Toda la información que necesita un controlador para establecer una conexión con tu despliegue se encuentra en la sección "MongoDB" de una credencial creada en la página Credenciales de servicio. La tabla contiene un desglose para referencia.
Nombre de campo | Índice | Descripción |
---|---|---|
Type |
Tipo de conexión: para MongoDB, es "URI" | |
Scheme |
Esquema para un URI: para MongoDB, es "mongodb" | |
Path |
Vía de acceso para un URI: para MongoDB, es el nombre de la base de datos. Al suministrar una instancia de MongoDB por primera vez, la base de datos predeterminada para que el usuario se conecte es admin . |
|
Authentication |
Username |
El nombre de usuario que utiliza para conectarse. |
Authentication |
Password |
Una contraseña para el usuario; puede mostrarse como $PASSWORD |
Authentication |
Method |
Cómo se realiza la autenticación; la autenticación "directa" la maneja el controlador. Mongo 3.6 utiliza SCRAM SHA 1, mientras que Mongo 4.2 utiliza SHA 256 |
Hosts |
0... |
Un nombre de host y un puerto a los que conectarse |
Composed |
0... |
Un URI que combina Esquema, Autenticación, Host, Vía de acceso y Nombre del conjunto de réplicas. |
Certificate |
Name |
El nombre asignado para el certificado propietario del servicio para el despliegue de la base de datos |
Certificate |
Base64 | Una versión codificada en base64 del certificado. |
0...
indica que puede haber una o varias de estas entradas en una matriz.
Muchos controladores ' MongoDB ' son capaces de conectarse a su despliegue cuando se les da la cadena de conexión con formato URI que se encuentra en el campo "composed" de la información de conexión. Cloud Databases proporciona una instancia de alta disponibilidad de ' MongoDB,, así que asegúrate de incluir todos los miembros en la cadena de conexión. Por ejemplo:
mongodb://admin:$PASSWORD@d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-0.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-1.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-2.databases.appdomain.cloud:30484/<database name>?authSource=admin&replicaSet=replset
El parámetro de consulta replicaSet
contiene el nombre de conjunto de réplicas del despliegue. Probablemente es replset
. Algunos controladores y aplicaciones necesitan que se les pase por separado.
El ejemplo siguiente utiliza la información de la serie de conexión y el Controlador Java de MongoDB para conectarse a la base de datos.
public class MongodbConnect {
private static Logger log = LoggerFactory.getLogger(LoggerFactory.class);
public static void main(String[] args) {
System.setProperty("javax.net.ssl.trustStore", "path/to/keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "store_password");
// make sure you append ssl=true to the connection URI
final String mongoURI = "mongodb://user:password@host:port,host:port/?authSource=admin&replicaSet=replset&ssl=true";
MongoClient mongoClient = MongoClients.create(mongoURI);
boolean testDB = false;
// this loop will continue attempting to connect to the database until the admin database is found
while (!testDB) {
try {
// check if you can connect to the database by checking for
// the presence of the admin database. If the admin databases isn't found
// then you're not connected.
MongoIterable<String> databases = mongoClient.listDatabaseNames();
for (String name: databases) {
if (name.contains("admin")) {
System.out.println("admin found...");
testDB = true;
}
}
} catch (Exception e) {
log.info(e.getMessage());
}
}
// close connection
mongoClient.close();
}
}
El ejemplo siguiente utiliza información de la serie de conexión y del controlador Python pymongo para conectarse a la base de datos. Esto es sólo un ejemplo sencillo de conexión, sin gestión errores ni la lógica de reintento, y puede que no sea adecuado en entornos de producción.
import pymongo
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
client = MongoClient(
"mongodb://admin:$PASSWORD@host.databases.appdomain.cloud:30484/<database name>?authSource=adminreplicaSet=replset",
ssl=True,
ssl_ca_certs="/path/to/cert/ca-certificate.crt"
)
try:
db_list = client.list_database_names()
print("List of databases:")
print(db_list)
except ConnectionFailure as err:
print("Unable to connect to database")
Este ejemplo final utiliza el controlador MongoDB Node.js
const MongoClient = require("mongodb").MongoClient;
let connectionString = "mongodb://<username>:<password>@<host>:<port>,<host>:<port>/<database>?authSource=admin&replicaSet=replset";
let options = {
tls: true,
tlsCAFile: `/path/to/cert`,
useUnifiedTopology: true
};
// connects to a MongoDB database
MongoClient.connect(connectionString, options, function (err, db) {
if (err) {
console.log(err);
} else {
// lists the databases that exist in the deployment
db.db('example').admin().listDatabases(function(err, dbs) {
console.log(dbs.databases);
db.close();
});
}
});
Soporte de TLS para controladores y certificados propietarios de servicios
Todas las conexiones a Databases for MongoDB tienen habilitado TLS 1.2, por lo que el controlador que se utiliza para conectar tiene que admitir el cifrado.
Los siguientes suites de cifrado están soportados por Databases for MongoDB Enterprise Edition:
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES256-GCM-SHA384
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- DHE-RSA-AES128-GCM-SHA256
- DHE-RSA-AES256-GCM-SHA384
Su implantación también incluye un certificado propietario del servicio para que el controlador pueda verificar el servidor en el momento de la conexión.
Para obtener más información, consulte Cloud Databases FAQ de certificados.
Utilización del certificado propietario del servicio
- Copie la información del certificado del panel Puntos finales o del campo Base64 de la información de conexión.
- Si es necesario, decodifique la serie Base64 en texto.
- Guarde el certificado en un archivo. (Puede utilizar el Nombre que se proporciona o su propio nombre de archivo). *
- Proporcione al controlador o al cliente la vía de acceso al certificado.
*Para MacOS, asegúrese de tener el certificado importado en el almacén de confianza y marque el certificado como trust always
.
Compatibilidad del complemento CLI con el certificado propietario del servicio
Puede mostrar el certificado decodificado para el despliegue con el plugin de CLI con el mandato ibmcloud cdb deployment-cacert "your-service-name"
. Decodifica la serie base64 a texto. Copie y guarde la salida del mandato
en un archivo y proporcione la vía de acceso del archivo al controlador.
Otros controladores de lenguaje
MongoDB tiene una amplia gama de controladores de lenguaje. En la tabla se incluyen algunos de los más comunes. Si busca más idiomas, pruebe la lista de controladores de MongoDB.org.