MongoDB Java ドライバーを使用した Amazon DocumentDB への接続 MongoDB - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

MongoDB Java ドライバーを使用した Amazon DocumentDB への接続 MongoDB

このセクションでは、Java ドライバーを使用して Amazon DocumentDB に接続するためのstep-by-stepガイドを提供します。これにより、DocumentDB を Java アプリケーションに統合できるようになります。

ステップ 1: プロジェクトを設定する

  1. Maven を使用して、Java プロジェクトを作成します。

    mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  2. MongoDB Java ドライバーをプロジェクトの依存関係として「pom.xml」ファイルに追加します。

    <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>

ステップ 2: 接続文字列を作成する

Amazon DocumentDB 接続文字列は、アプリケーションと DocumentDB クラスター間の接続を確立するために不可欠です。この文字列は、クラスターエンドポイント、ポート、認証の詳細、さまざまな接続オプションなどの重要な情報をカプセル化します。DocumentDB 接続文字列を構築するには、通常、基本的な形式から始めます。

"mongodb://username:password@cluster-endpoint:port/?[connection options]"

「username」と「password」を実際の認証情報に置き換える必要があります。クラスターのエンドポイントとポート番号は、 AWS Management Console だけでなく、 からも確認できます AWS CLI。クラスターのクラスターエンドポイントを見つけるクラスターのエンドポイントの検索には、「」を参照してください。DocumentDB のデフォルトポートは 27017 です。

接続文字列の例

  • 転送中の暗号化を使用して DocumentDB に接続し、読み取りリクエストがリードレプリカに送信され、プライマリに書き込まれることを確認します。

    "mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
  • IAM 認証を使用して DocumentDB に接続する:

    "mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"

接続文字列で使用できるさまざまなオプションは次のとおりです。

TLS 証明書

tls=true|false — このオプションは Transport Layer Security (TLS) を有効または無効にします。デフォルトでは、転送中の暗号化は Amazon DocumentDB クラスターで有効になっているため、クラスターレベルで TLS が無効になっていない限り、このオプションの値は である必要がありますtrue

TLS を使用する場合、コードは DocumentDB クラスターへの接続を作成するときに SSL 証明書を提供する必要があります。クラスターへの安全な接続に必要な証明書をダウンロードします: global-bundle.pemglobal-bundle.pem ファイルを使用するには 2 つの方法があります。

  • オプション 1global-bundle.pem ファイルからすべての証明書を抽出し、Java の keytool を使用して、後でコードで使用できる.jksファイルに保存します。これを行う方法を示すスクリプトTLS が有効な場合の接続については、 の Java タブを参照してください。

  • オプション 2global-bundle.pemコードを動的に追加し、インメモリキーストアを構築しSSLContext、 を使用して接続の一部として証明書を提供します。

リードレプリカからの読み取り

replicaSet=rs0&readPreference=secondaryPreferred — これら 2 つのオプションを指定すると、すべての読み取りリクエストがリードレプリカにルーティングされ、書き込みリクエストがプライマリインスタンスにルーティングされます。接続文字列replicaSet=rs0で を使用すると、MongoDB ドライバーはクラスタートポロジの自動更新ビューを維持できるため、インスタンスの追加または削除時にアプリケーションが現在のノード設定の可視性を維持できます。これらのオプションを指定しない場合、または を指定しない場合、すべての読み取りと書き込みがプライマリインスタンスreadPreference=primaryに送信されます。のその他のオプションについてはreadPreference、「」を参照してください読み込み設定のオプション

懸念とジャーナリングを書き込む

書き込みに関する懸念は、書き込みオペレーションのためにデータベースからリクエストされた確認のレベルを決定します。MongoDB ドライバーは、書き込み懸念ファイルとジャーナルファイルを調整するオプションを提供します。Amazon DocumentDB では、書き込みの懸念とジャーナルを設定することは想定されておらず、 wj (writeConcern と ) に送信された値は無視されますjournal。DocumentDB は常に writeConcern: majorityおよび journal: でデータを書き込みます。trueそのため、クライアントに確認を送信する前に、書き込みはほとんどのノードに永続的に記録されます。

RetryWrites

retryWrites=false — DocumentDB は再試行可能な書き込みをサポートしていないため、この属性は常に に設定する必要がありますfalse

IAM 認証

authSource=%24external および authMechanism=MONGODB-AWS — この 2 つのパラメータは、 を使用した認証に使用されます AWS Identity and Access Management。IAM 認証は現在、インスタンスベースのクラスターバージョン 5.0 でのみ使用できます。詳細については、「IAM ID を使用した認証」を参照してください。

接続プール

これらのオプションは、接続プーリングで使用できます。

  • maxPoolSize — プールに作成できる接続の最大数を設定します。すべての接続が使用中で、新しいリクエストが入ると、接続が利用可能になるまで待機します。MongoDB Java ドライバーのデフォルトは 100 です。

  • minPoolSize — プールで常に維持する必要がある接続の最小数を示します。MongoDB Java ドライバーのデフォルトは 0 です。

  • maxIdleTimeMS — 接続をプールでアイドル状態のままにして閉じたり削除したりできる時間を決定します。MongoDB Java ドライバーのデフォルトは 100 ミリ秒です。

  • waitQueueTimeoutMS — プールが最大サイズに達したときに、スレッドが接続が利用可能になるまで待機する時間を設定します。この時間内に接続が利用できない場合は、例外がスローされます。MongoDB Java ドライバーのデフォルト値は 120,000 ミリ秒 (2 分) です。

接続タイムアウトパラメータ

タイムアウトは、オペレーションまたは接続の試行が失敗したと見なされるまでにかかる時間を制限するメカニズムです。次のタイムアウトパラメータは、無期限の待機を防ぎ、リソース割り当てを管理するために使用できます。

  • connectTimeoutMS — ドライバーがクラスターへの接続を確立するのを待機する時間を設定します。デフォルトは 10,000 ミリ秒 (10 秒) です。

  • socketTimeoutMS — ドライバーがサーバーからの非書き込みオペレーションのレスポンスを待機する時間を指定します。デフォルトは 0 (タイムアウトや無限) です。

  • serverSelectionTimeoutMS — ドライバーがクラスター内の使用可能なサーバーを見つけるまで待機する時間を指定します。この設定のデフォルト値は 30 秒で、フェイルオーバー中に新しいプライマリインスタンスを選択するために十分です。

ステップ 3: 接続コードを記述する

次のコード例は、Amazon DocumentDB への TLS 接続を行う方法を示しています。

  • Java の KeyStoreおよび SSLContext オブジェクトが作成されます。

  • また、MongoClientSettingsオブジェクトに渡すことでConnectionStringオブジェクトを作成します。TLS 接続を行うには、 MongoClientSettings オブジェクトを使用して connectionstringと をバインドする必要がありますsslcontext

  • を使用すると、 MongoClient オブジェクトMongoClientsを取得します。

public static MongoClient makeDbConnection(String dbName, String DbUserName, String DbPassword, String DbClusterEndPoint, String keyStorePass) throws Exception { MongoClient connectedClient; String connectionOptions = "?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false"; String connectionUrl = "mongodb://" + DbUserName + ":" + DbPassword + "@" + DbClusterEndPoint + ":27017/" + dbName + connectionOptions; try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("src/main/resources/certs/truststore.jks")) { trustStore.load(fis, keyStorePass.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); ConnectionString connectionString = new ConnectionString(connectionUrl); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connectionString) .applyToSslSettings(builder - > { builder.enabled(true); builder.context(sslContext); }) .build(); connectedClient = MongoClients.create(settings); } return connectedClient; } catch (MongoException e5) { throw new RuntimeException(e5); } catch (Exception e) { throw new RuntimeException(e); } }

ステップ 4: 接続例外を処理する

Java アプリケーションで DocumentDB を使用する場合、堅牢で信頼性の高いデータベースオペレーションを維持するには、接続例外の処理が不可欠です。これらの例外を適切に管理することで、問題を迅速に診断できるだけでなく、アプリケーションが一時的なネットワーク中断やサーバーの可用性を正常に処理できるため、安定性とユーザーエクスペリエンスが向上します。接続の確立に関連する重要な例外には、次のようなものがあります。

  • MongoException — 一般的な例外であり、より具体的な例外の対象ではないさまざまなシナリオで発行される場合があります。これは一般的なすべての MongoDB 例外のキャッチであるため、この例外は他のすべての特定の例外の後に処理されていることを確認してください。

  • MongoTimeoutException — オペレーションがタイムアウトしたときに発行されます。たとえば、存在しないクラスターエンドポイントをクエリします。

  • MongoSocketException — ネットワーク関連の問題に対して発行されます。例えば、オペレーション中の突然のネットワーク切断などです。

  • MongoSecurityException — 認証が失敗した場合に発行されます。たとえば、誤った認証情報で接続するなどです。

  • MongoConfigurationException — クライアント設定にエラーがある場合に発行されます。たとえば、無効な接続文字列を使用しているとします。

ステップ 5: コードを実行する

次のコードサンプルは、Amazon DocumentDB 接続を作成し、すべてのデータベースを出力します。

public static void TestConnection() { try (MongoClient mongoClient = makeDbConnection(DATABASE_NAME, DB_USER_NAME, DB_PASSWORD, DB_CLUSTER_ENDPOINT, KEYSTORE_PASSWORD)) { List < String > databases = mongoClient.listDatabaseNames().into(new ArrayList < > ()); System.out.println("Databases: " + databases); } catch (MongoException e) { System.err.println("MongoDB error: " + e.getMessage()); throw new RuntimeException(e); } }

接続のベストプラクティス

以下は、MongoDB Java ドライバーを使用して Amazon DocumentDB に接続するときに考慮すべきベストプラクティスです。 MongoDB

  • クライアントがリソースをリリースする必要がなくなったMongoClientら、必ず を閉じてください。

  • 例外を適切に処理し、適切なエラーログ記録を実装します。

  • 環境変数または を使用して AWS Secrets Manager 、ユーザー名やパスワードなどの機密情報を保存します。