専用Exadataインフラストラクチャ上のOracle Autonomous AI DatabaseでのMongoDB APIの使用

Oracle Database API for MongoDBでは、MongoDBワイヤ・プロトコルが、Oracle Databaseによって実行されるSQL文に変換されます。MongoDBスキル・セットを持つ開発者は、MongoDBプロトコルを理解するドライバおよびツールを使用するOracle Database用のJSONドキュメント・ストア・アプリケーションを記述できます。このAPIの詳細は、Oracle Database API for MongoDBOracle Database API for MongoDBの概要を参照してください。

MongoDB APIの有効化

Autonomous AI DatabaseのMongoDB APIは、OCIコンソールから、またはOracle REST Data Services (ORDS)を使用して手動で有効にできます。

Autonomous AI DatabaseでMongoDB APIを使用するには、顧客管理Oracle REST Data Services (ORDS)を個別にインストールおよび構成する必要があり、ORDSのバージョンは22.3以上である必要があります。このAPIのアーキテクチャ概念の詳細は、Oracle REST Data Servicesインストレーションおよび構成ガイドOracle API for MongoDBサポートに関する項を参照してください。

OCIコンソールからMongoDB APIを有効にするには:

インスタンスをプロビジョニングまたはクローニングするときに、「拡張オプションの表示」を選択し、「ツール」タブを選択して、MongoDB APIを有効にすることもできます。

MongoDBを手動で有効にするには:

前述のステップのデモンストレーションについては、『Oracle REST Data Servicesインストレーションおよび構成ガイド』スタート・ガイドを参照してください。

MongoDBアプリケーションの接続

MongoDB APIを有効にした後、MongoDBユーザーを作成し、接続文字列を使用してAutonomous AI Databaseに接続できます。

MongoDB API接続文字列では、MongoDBシェル(コマンドライン・ユーティリティ)を使用して、データを接続および問合せできます。

Oracle Cloud Infrastructure Consoleから接続文字列を取得できます。MongoDB API接続文字列を取得するには:

  1. Autonomous AI Databaseの「詳細」ページで、「ツール構成」タブを選択します。

  2. 「MongoDB API」行の「アクセスURL」で、「コピー」をクリックします。

Exadata Cloud@Customer上のAutonomous AI DatabaseでMongoDB APIを使用している場合、ネットワーク/DNSチームは、任意のMongoDB接続文字列ホスト名がクラスタのSCANに解決されることを確認する必要があります。これがないと、MongoDBクライアントはデータベースに接続できません。ワイルドカードDNSレコードを使用してクラスタ内のすべてのAutonomous AIデータベースへの接続を許可するか、特定のAutonomous AIデータベースを許可できます:

MongoDB接続のテスト

MongoDB用のテストAutonomous AIデータベース・ユーザーの作成

テスト目的で、テスト・ユーザーまたは同様に認証されたユーザーを作成できます。

  1. Autonomous AI DatabaseのOCIコンソールを開きます。

  2. 「データベース・アクション」をクリックします。

  3. 「データベース・アクション」起動パッドで、「管理」→「データベース・ユーザー」をクリックします。

  4. 「データベース・ユーザー」ページで「+ユーザーの作成」をクリックします。

  5. テスト・ユーザーの「ユーザー名」および「パスワード」を入力します。「Webアクセス」をクリックし、表領域DATAの割当て制限を設定します。

  6. 「付与されたロール」タブをクリックします。

  7. デフォルト・ロールに加えて、ユーザーのSODA_APPロールを選択して追加します。

  8. 「ユーザーの作成」をクリックします。

コマンドラインを使用した接続のテスト

  1. テスト・ユーザーでログインします。手順については、前の例のステップに従ってください。

     $ mongosh --tls --tlsAllowInvalidCertificates 'mongodb://TESTUSER:<PASSWORD>@<database URL>.
     <OCI region>.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&loadBalanced=false'
     Current Mongosh Log ID: 614c9e2a01e3575c8c0b2ec7
     Connecting to:         mongodb://TESTUSER:<PASSWORD>@<database URL>.<OCIregion>.oraclecloudapps.com:27017/admin?
     authMechanism=PLAIN&authSource=$external&tls=true&loadBalanced=false
     Using MongoDB:                   3.6.2
     Using Mongosh:                   1.0.7
     For mongosh info see: https://docs.mongodb.com/mongodb-shell/admin
     > show dbs
    
     **testuser    0 B**
     >
    
  2. コレクションを作成し、コレクションにドキュメントを挿入します。

       testuser> show collections
    
       testuser> db.createCollection( 'fruit' )
       { ok: 1 }
        
       testuser> show collections
       fruit
        
       testuser> db.fruit.insertOne( {name:"orange", count:42} )
       {
         acknowledged: true,
         insertedId: ObjectId("614ca31fdab254f63e4c6b47")
       }
        
       testuser> db.fruit.insertOne( {name:"apple", count:12, color: "red"} )
       {
         acknowledged: true,
         insertedId: ObjectId("614ca340dab254f63e4c6b48")
       }
        
       testuser> db.fruit.insertOne( {name:"pear", count:5} )
       {
         acknowledged: true,
         insertedId: ObjectId("614ca351dab254f63e4c6b49")
       }
        
       testuser>
    
  3. データベース・アクションなどのSQLクライアントを使用してコレクションを問い合せます。

    SELECT
        f.json_document.name,
        f.json_document.count,
        f.json_document.color
    FROM fruit f;
    

Node.jsアプリケーションを使用した接続のテスト

  1. Node.jsをダウンロードします。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。

     $ wget https://nodejs.org/dist/latest-v14.x/node-v14.17.5-linux-x64.tar.xz
    
  2. Node、jsアーカイブの内容を抽出します。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。

     $ tar -xf node-v14.17.5-linux-x64.tar.xz
    
  3. PATH環境変数を構成します。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。

     $ export PATH="`pwd`"/node-v14.17.5-linux-x64/bin:$PATH
    
  4. Javascriptの例を使用して接続をテストします。

    a. 新規ディレクトリを作成

       $ mkdir autonomous_mongodb
       $ cd autonomous_mongodb
       $ npm init -y
    

    b. mongodb依存関係をインストールします。

       $ npm install mongodb
    

    c. connect.jsという名前のJavaScriptアプリケーションを作成します。

        const { MongoClient } = require("mongodb");
        const uri =
          "mongodb://TESTUSER:<PASSWORD>@<Database URI>.<OCI region>.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&loadBalanced=false";
    
        const client = new MongoClient(uri);
    
        async function run() {
          try {
                await client.connect();
    
                const database = client.db('admin');
                const movies = database.collection('movies');
    
                // Insert a movie
                const doc = { title: 'Back to the Future',
                              year: 1985, genres: ['Adventure', 'Comedy', 'Sci-Fi'] }
                const result = await movies.insertOne(doc);
    
                // Query for a movie that has the title 'Back to the Future' :)
                const query = { title: 'Back to the Future' };
                const movie = await movies.findOne(query);
    
                console.log(movie);
          } finally {
            // Ensures that the client will close when you finish/error
            await client.close();
          }
        }
        run().catch(console.dir);
    

d. この例を実行します。出力は次のようになります。

    $ node connect
    {
      _id: new ObjectId("611e3266005202371acf27c1"),
      title: 'Back to the Future',
      year: 1985,
      genres: [ 'Adventure', 'Comedy', 'Sci-Fi' ]
    }

予約文字のURIパーセント・エンコーディング

URIパーセント・エンコーディングを使用して、接続ストリングURI (特にユーザー名とパスワードの文字)の任意の予約文字を置換します。予約文字とそのパーセント・エンコーディングは次のとおりです。

予約文字 パーセント・エンコーディング
! %21
# %23
$ %24
% %25
& %26
%27
( %28
) %29
* %2A
+ %2B
, %2C
/ %2F
: %3A
; %3B
= %3D
? %3F
@ %40
[ %5B
] %5D

たとえば、ユーザー名がRUTHで、パスワードが@least1/2#?の場合、サーバー<server>へのMongoDB接続文字列は次のようになります。

   'mongodb://RUTH:%40least1%2F2%23%3F@<server>:27017/ruth/ ...'

使用するツールまたはドライバによっては、URI接続文字列の一部としてではなく、別のパラメータとしてユーザー名とパスワードを指定できる場合があります。その場合、含まれている予約文字をエンコードする必要はありません。

関連コンテンツ