外部アプリケーションの接続
アプリケーションとドライバーは、接続文字列を使用して、IBM Cloud® Databases for MongoDB との接続を確立します。 デプロイメントごとに、ドライバーとアプリケーションのための専用の接続文字列があります。 接続文字列は配置の [概要] の [エンドポイント] パネルに表示され、Cloud Databases CLI プラグインと Cloud Databases API からも取得できます。
接続文字列は、配置で作成したどのユーザでも使用できます。 すべての接続およびアプリケーションで管理ユーザーを使用することが可能ですが、使用するアプリケーションに接続するための専用のユーザーを作成する方がよい場合もあります。 詳細は 接続文字列の取得 を参照してください。
外部アプリケーションを接続する場合は、サポートされているドライバのみを使用してください。MongoDBまたは MongoDB's注目のコミュニティ支援ライブラリ。 Cloud Databasesサポートされていないドライバーはサポートされません。MongoDB。
接続情報の使用方法
ドライバがデプロイメントに接続するために必要な情報はすべて、Service credentials ページで作成したクレデンシャルの "MongoDB" セクションにあります。 参照用に、接続文字列の構成要素を次の表に示します。
フィールド名 | 索引 | 説明 |
---|---|---|
Type |
接続のタイプ - MongoDB の場合は「URI」 | |
Scheme |
URI のスキーム - MongoDB の場合は「mongodb」 | |
Path |
URI のパス - MongoDB の場合はデータベース名。 MongoDB インスタンスを初めてプロビジョニングする場合、ユーザーが接続する先のデフォルト・データベースは admin です。 |
|
Authentication |
Username |
接続に使用するユーザー名。 |
Authentication |
Password |
ユーザーのパスワード。$PASSWORD と表示される場合があります。 |
Authentication |
Method |
認証が行われる方法。「direct」認証はドライバーによって処理されます。 Mongo 3.6 は SCRAM SHA 1 を使用しますが、Mongo 4.2 は SHA 256 を使用します。 |
Hosts |
0... |
接続するホスト名とポート |
Composed |
0... |
スキーム、認証、ホスト、パス、およびレプリカ・セット名をつなげた URI。 |
Certificate |
Name |
データベース配備用のサービス専有証明書に割り当てられた名前 |
Certificate |
Base64 | base64 でエンコードされたバージョンの証明書 |
0...
は、1 つの配列にこれらのエントリーが 1 つ以上ある可能性があることを示しています。
多くのMongoDBドライバは、接続情報の "composed" フィールドにある URI 形式の接続文字列を指定すると、デプロイメントに接続できます。Cloud Databasesは MongoDB,の可用性の高いインスタンスを提供するので、接続文字列にすべてのメンバーを含めるようにしてください。 以下に例を示します。
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
replicaSet
照会パラメーターには、デプロイメントのレプリカ・セット名が入ります。 例えば、replset
などです。 ドライバーやアプリケーションによっては、レプリカ・セットを別にして渡す必要があるものもあります。
以下の例では、接続文字列および MongoDB Java ドライバー からの情報を使用して、データベースに接続します。
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();
}
}
次の例では、接続文字列と Python ドライバー ピモンゴ からの情報を使用して、データベースに接続します。 これは、単なる単純接続の例であり、エラー処理も再試行ロジックもなく、実動に適していない場合もあります。
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")
この最後の例では、 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();
});
}
});
ドライバーTLSおよびサービス独自証明書のサポート
Databases for MongoDB への接続はすべて TLS 1.2 が有効になっているので、接続に使用するドライバーは、暗号化をサポートできるものでなければなりません。
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
また、ドライバが接続時にサーバを検証できるように、配備にはサービス専有証明書も付属しています。
詳しくは、 Cloud Databases Certificates FAQを参照してください。
サービス独自証明書の使用
- *「エンドポイント」*パネルまたは接続情報の Base64 フィールドから証明書情報をコピーします。
- 必要に応じて、Base64 ストリングをテキストにデコードします。
- 証明書をファイルに保存します (指定された名前または独自のファイル名を使用できます)。*
- ドライバーまたはクライアントに証明書へのパスを提供します。
*MacOS の場合は、証明書をトラストストアにインポートしてから、「trust always
」とマークしてください。
サービス独自証明書のCLIプラグインサポート
コマンド ibmcloud cdb deployment-cacert "your-service-name"
を使用して、デプロイメントのデコードされた証明書を CLI プラグインと共に表示することができます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。
その他の言語のドライバー
MongoDB には、さまざまな言語のドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。 その他の言語をお探しの場合は、 MongoDB.org ドライバーリストをお試しください。