専用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 MongoDBのOracle 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を有効にするには:
-
Autonomous AI Databaseの「詳細」ページで、「ツール構成」タブを選択します。
-
「ツール構成の編集」をクリックします。
-
「MongoDB API」行で、「ツールの有効化」列を選択し、「有効」を表示します。
-
「適用」をクリックします。MongoDBが有効になるまでライフサイクル状態が更新中に変わります。
インスタンスをプロビジョニングまたはクローニングするときに、「拡張オプションの表示」を選択し、「ツール」タブを選択して、MongoDB APIを有効にすることもできます。
MongoDBを手動で有効にするには:
-
ords install adbコマンドを使用してORDSをインストールおよび構成します。詳細は、『Oracle REST Data Servicesインストレーションおよび構成ガイド』のAutonomous AIデータベースでの顧客管理ORDSのインストールおよび構成に関する項を参照してください。
-
ORDS対応ユーザーを作成します。
-
MongoDBシェルを使用してORDSに接続します。
前述のステップのデモンストレーションについては、『Oracle REST Data Servicesインストレーションおよび構成ガイド』のスタート・ガイドを参照してください。
MongoDBアプリケーションの接続
MongoDB APIを有効にした後、MongoDBユーザーを作成し、接続文字列を使用してAutonomous AI Databaseに接続できます。
MongoDB API接続文字列では、MongoDBシェル(コマンドライン・ユーティリティ)を使用して、データを接続および問合せできます。
Oracle Cloud Infrastructure Consoleから接続文字列を取得できます。MongoDB API接続文字列を取得するには:
-
Autonomous AI Databaseの「詳細」ページで、「ツール構成」タブを選択します。
-
「MongoDB API」行の「アクセスURL」で、「コピー」をクリックします。
Exadata Cloud@Customer上のAutonomous AI DatabaseでMongoDB APIを使用している場合、ネットワーク/DNSチームは、任意のMongoDB接続文字列ホスト名がクラスタのSCANに解決されることを確認する必要があります。これがないと、MongoDBクライアントはデータベースに接続できません。ワイルドカードDNSレコードを使用してクラスタ内のすべてのAutonomous AIデータベースへの接続を許可するか、特定のAutonomous AIデータベースを許可できます:
MongoDB接続のテスト
MongoDB用のテストAutonomous AIデータベース・ユーザーの作成
テスト目的で、テスト・ユーザーまたは同様に認証されたユーザーを作成できます。
-
Autonomous AI DatabaseのOCIコンソールを開きます。
-
「データベース・アクション」をクリックします。
-
「データベース・アクション」起動パッドで、「管理」→「データベース・ユーザー」をクリックします。
-
「データベース・ユーザー」ページで「+ユーザーの作成」をクリックします。
-
テスト・ユーザーの「ユーザー名」および「パスワード」を入力します。「Webアクセス」をクリックし、表領域DATAの割当て制限を設定します。
-
「付与されたロール」タブをクリックします。
-
デフォルト・ロールに加えて、ユーザーの
SODA_APPロールを選択して追加します。 -
「ユーザーの作成」をクリックします。
コマンドラインを使用した接続のテスト
-
テスト・ユーザーでログインします。手順については、前の例のステップに従ってください。
$ 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** > -
コレクションを作成し、コレクションにドキュメントを挿入します。
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> -
データベース・アクションなどのSQLクライアントを使用してコレクションを問い合せます。
SELECT f.json_document.name, f.json_document.count, f.json_document.color FROM fruit f;
Node.jsアプリケーションを使用した接続のテスト
-
Node.jsをダウンロードします。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。
$ wget https://nodejs.org/dist/latest-v14.x/node-v14.17.5-linux-x64.tar.xz -
Node、jsアーカイブの内容を抽出します。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。
$ tar -xf node-v14.17.5-linux-x64.tar.xz -
PATH環境変数を構成します。ご使用の環境のNode.jsをすでにダウンロードまたはインストールしている場合は、このステップをスキップできます。$ export PATH="`pwd`"/node-v14.17.5-linux-x64/bin:$PATH -
Javascriptの例を使用して接続をテストします。
a. 新規ディレクトリを作成
$ mkdir autonomous_mongodb $ cd autonomous_mongodb $ npm init -yb. mongodb依存関係をインストールします。
$ npm install mongodbc.
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接続文字列の一部としてではなく、別のパラメータとしてユーザー名とパスワードを指定できる場合があります。その場合、含まれている予約文字をエンコードする必要はありません。