IBM Cloud Docs
外部アプリケーションの接続

外部アプリケーションの接続

アプリケーションとドライバーは、接続文字列を使用して、IBM Cloud® Databases for MongoDB との接続を確立します。 デプロイメントごとに、ドライバーとアプリケーションのための専用の接続文字列があります。 接続文字列は配置の [概要][エンドポイント] パネルに表示され、Cloud Databases CLI プラグインと Cloud Databases API からも取得できます。

接続文字列は、配置で作成したどのユーザでも使用できます。 すべての接続およびアプリケーションで管理ユーザーを使用することが可能ですが、使用するアプリケーションに接続するための専用のユーザーを作成する方がよい場合もあります。 詳細は 接続文字列の取得 を参照してください。

外部アプリケーションを接続する場合は、サポートされているドライバのみを使用してください。MongoDBまたは MongoDB's注目のコミュニティ支援ライブラリ。 Cloud Databasesサポートされていないドライバーはサポートされません。MongoDB。

接続情報の使用方法

ドライバがデプロイメントに接続するために必要な情報はすべて、Service credentials ページで作成したクレデンシャルの "MongoDB" セクションにあります。 参照用に、接続文字列の構成要素を次の表に示します。

mongodb/URI 接続情報
フィールド名 索引 説明
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を参照してください。

サービス独自証明書の使用

  1. *「エンドポイント」*パネルまたは接続情報の Base64 フィールドから証明書情報をコピーします。
  2. 必要に応じて、Base64 ストリングをテキストにデコードします。
  3. 証明書をファイルに保存します (指定された名前または独自のファイル名を使用できます)。*
  4. ドライバーまたはクライアントに証明書へのパスを提供します。

*MacOS の場合は、証明書をトラストストアにインポートしてから、「trust always」とマークしてください。

サービス独自証明書のCLIプラグインサポート

コマンド ibmcloud cdb deployment-cacert "your-service-name" を使用して、デプロイメントのデコードされた証明書を CLI プラグインと共に表示することができます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。

その他の言語のドライバー

MongoDB には、さまざまな言語のドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。 その他の言語をお探しの場合は、 MongoDB.org ドライバーリストをお試しください。