共有

はじめに

データベースに接続するサーバーは、データベースをバックエンドとするアプリケーションを設計・構成する際に最初に達成する必要があるタスクの1つです。アプリケーションにアドレス、リスニングポート、資格情報、その他の詳細を提供する方法は多数ありますが、接続URI(接続文字列または接続URLとも呼ばれます)は、複雑な構成をコンパクトな形式で指定するための最も強力で柔軟な方法の1つです。

このガイドでは、MongoDBデータベース情報と認証の詳細を使用して接続URIをフォーマットする方法について説明します。接続URIはセクションに分かれているため、各部分を順に説明していきます。

パーセントエンコード値

始める前に、MongoDB接続URIがパーセントエンコードされた値を期待していることを述べておくべきです。これは、URL内で特別な意味を持つ文字は、ライブラリやアプリケーションがそれらを正しく解釈できるように、パーセントエンコードされた対応する文字に変換する必要があることを意味します。

パーセントエンコードすべき文字は以下の通りです

  • :: %3A
  • /: %2F
  • ?: %3F
  • #: %23
  • [: %5B
  • ]: %5D
  • @: %40

これらは接続URI内で特別な意味を持ちます。

したがって、パスワードが...の場合

pe@ce&lo\/3

...接続URI内では次のように指定する必要があります

pe%40ce&lo\%2F3

ある文字をパーセントエンコードすべきかどうかわからない場合は、とにかくエンコードするのが通常は最善です。例えば、\文字が予約されているかどうかわからない場合でも、安全のためにパーセントエンコードされた等価物である%5Cを使用できます。

pe%40ce%26lo%5C%2F3

接続URIを作成する際には、このことを念頭に置いてください。

簡単な概要

詳細に入る前に、MongoDB接続URIの仕様を見てみましょう。

mongodb://[username:password@]host[:port][,...hostN[:port]][/[database][?parameter_list]]
\________/\__________________/\___________________________/\__________/\________________/
| | | | |
|- schema |- auth credentials | | |- parameter list
| |
| |- default authentication database
|
|- host specifier

角括弧内の部分はオプションの部分を示します。URIのほとんどの部分がオプションであることに気づかれたかもしれません。URIには多くの情報をエンコードできることも明らかでしょう。

各個々のコンポーネントの簡単な説明

  • mongodb://: 文字列がMongoDB接続URIであることを識別するために使用されるスキーマ識別子。
  • 認証情報: URIのオプションコンポーネントで、接続するユーザーとパスワードを指定するために使用できます。
    • ユーザー名: オプションのユーザー名。含める場合、2番目のスラッシュ (/) の後に始まり、コロン (:) まで続きます。含める場合、パスワードを伴う必要があります。
    • パスワード: オプションのパスワード。含める場合、コロン (:) の後に始まり、アットマーク (@) まで続きます。含める場合、ユーザー名を伴う必要があります。
  • ホスト指定子: 接続する1つ以上のホスト名とポートを指定するために使用される必須コンポーネント。
    • ホスト: 接続するサーバーのIPアドレス、DNS名、またはローカルで解決可能な名前。ホストはコロン (:) (ポートが含まれる場合)、複数のホストが指定されている場合はコンマ (,)、それ以外の場合はスラッシュ (/) まで続きます。少なくとも1つのホストを指定する必要があります。
    • ポート: MongoDBがホスト上でリッスンしているポートを示すオプションのポート指定。ポートはコロン (:) で始まり、別のホストが提供されている場合はコンマ (,) まで、それ以外の場合はスラッシュ (/) まで続きます。
  • デフォルトの認証データベース: パラメータリストでより具体的なauthSourceが提供されていない場合に認証するデータベースの名前。ここにデータベースが指定されていない場合、またはauthSourceが指定されていない場合、MongoDBは標準のadminデータベースに認証を試みます。
  • パラメータリスト: 接続動作に影響を与えることができる追加パラメータのオプションリスト。パラメータリストは疑問符 (?) で始まります。デフォルトの認証データベースが提供されていない場合、最後のホスト定義の後にはスラッシュと疑問符の両方 (/?) でパラメータリストを開始する必要があります。
    • パラメータペア: パラメータリストはキーと値のペアで構成されます。各ペア内のキーと値は等号 (=) で区切られ、各ペアはアンパサンド (&) で次のペアと区切られます。

これらすべてのコンポーネントを組み込んだMongoDB接続URIの例を以下に示します。

mongodb://sally:sallyspassword@dbserver.example:5555/userdata?tls=true&connectionTimeout=5000
^ ^ ^ ^ ^ ^ ^
|- schema | |- password |- host | | |- parameter list
| | |
|- username | |- default authentication database
|
|- port

URIタイプの指定

接続URIの項目は通常、プロトコル仕様またはアプリケーションタイプです。URIはMongoDBデータベースへの接続と認証に使用されるため、使用するアプリケーションとライブラリにそれを意味する識別子を使用する必要があります。

MongoDBプロジェクトは、有効なURIスキーマ指定子としてmongodbのみを受け入れます。したがって、常に接続URIを次のように開始する必要があります。

mongodb://

スキーマ指定子により、それに続く情報が正しいコンテキストで解釈されることが保証されます。

ユーザー名とパスワードの指定

URIの次の部分はユーザー認証情報です。ユーザー認証情報はオプションですが、アプリケーションまたはデータベースによって構成されたデフォルトに依存しない場合は、通常は必要です。

ユーザー認証情報を含めるには、スキーマ識別子の後にユーザー名、続けてコロン (:)、パスワード、最後にアットマーク (@) を指定します。

mongodb://username:password@

ユーザー認証情報はオプションですが、含める場合はユーザー名とパスワードの両方のコンポーネントを指定する必要があります。

サーバーがリッスンしている場所の指定

ユーザー資格情報の後に、サーバーがリッスンしている場所を定義するホスト指定子が来ます。ホスト指定子内には1つ以上のホストを定義できますが、ホスト指定子は**必須**であるため、少なくとも1つのホストを指定する必要があります。

各ホスト定義は、ホストとオプションのポートで構成されます。ホストは、ローカルで解決可能なホスト名、DNSなどの外部名システムによって解決される名前、またはIPアドレスやその他の直接アドレスのいずれかです。ポートは、MongoDBがリッスンしているホスト上のポート番号を示します。

アプリケーションがローカルコンピューター上のデフォルトのMongoDBポート(27017)に接続を試みるように指定するには、次を使用できます。

mongodb://

ユーザー名とパスワードを含める必要がある場合は、その情報が最初に来て、アットマークで区切られます。

mongodb://username:password@localhost

非標準ポートで実行されているリモートサーバーを指定するには、それらの詳細をコロンで区切ります。たとえば、198.51.100.22のホストでポート3333に接続するには、次を使用できます。

mongodb://username:password@198.51.100.22:3333

複数のホストとポートのペアを定義するには、セットをコンマ (,) で区切って、最初のサーバーに到達できない場合にアプリケーションに後続のサーバーを試すように指示します。たとえば、前の例を拡張して、198.51.100.33のポート5555でリッスンしているフォールバックサーバーを含めるには、次を使用できます。

mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555

準拠するクライアントとアプリケーションは、まず198.51.100.22:3333でリッスンしているサーバーへの接続を試みます。それが失敗した場合、198.51.100.33:5555でリッスンしているMongoDBデータベースに到達しようとします。

デフォルトの認証データベースの提供

ホスト指定子の後、次のデータはデフォルトの認証データベースです。すべてのデータベース管理システムに当てはまるわけではありませんが、MongoDBでは、接続を確立する際に特定のデータベースに対して認証を行う必要があります。

データベース名はスラッシュ (/) で始まり、行の終わりまたは疑問符 (?) まで続きます。パラメータリストにauthSourceオプションが提供されていない場合、デフォルトの認証データベースが使用されます。どちらも提供されていない場合、クライアントはadminデータベースに対して認証を行います。

198.51.100.22:3333でリッスンしているMongoDBサーバーでホストされているsalesというデータベースに接続するには、次のように入力します。

mongodb://username:password@198.51.100.22:3333/sales

追加パラメータの指定

接続URIの最後の部分は、接続に追加パラメータを提供するために使用されます。パラメータリストは先頭の疑問符 (?) で始まり、行の終わりまで続きます。デフォルトの認証データベースが提供されていない場合、ホスト仕様の終わりを示す末尾のスラッシュは疑問符 (/?) の直前に来る必要があります。

リストされている各パラメータは、等号 (=) で結合されたキーと値のペアとして定義されます。最初のパラメータペアの後、各追加のキーと値のペアはアンパサンド (&) で区切られます。

たとえば、以前に定義していた接続にクライアントが10秒のタイムアウトを適用するように指定するには、次を使用できます。

mongodb://username:password@198.51.100.22:3333/sales?connectTimeoutMS=10000

追加のパラメーターを提供したい場合は、各ペアの間にアンパサンド (&) を付けて後に追加します。たとえば、SSLを必須にし、指定されたホストが接続したいレプリカセットのメンバーであることを追加で指定できます。

mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555/sales?connectTimeoutMS=10000&tls=true&replicaSet=someReplicaSet

MongoDBドキュメントには、詳細を知るために読むことができるパラメータの完全なリストがあります。

結論

このガイドでは、MongoDB接続URIとは何か、さまざまなコンポーネントを解釈する方法、および一連の接続情報から独自のURIを構築する方法について説明しました。接続URIは、特定のデータベースに接続するために必要なすべての情報を単一の文字列内にエンコードします。この柔軟性と広範な採用により、これらの文字列を解析および構築する方法を理解することは非常に役立ちます。

著者について
Justin Ellingwood

ジャスティン・エリングウッド

ジャスティンは2013年からデータベース、Linux、インフラ、開発者ツールについて執筆しています。現在は妻と2匹のウサギと共にベルリンに住んでいます。彼は通常、三人称で書く必要がないので、関係者全員にとって安心です。
© . All rights reserved.