1.10.2 Autonomous Databaseを使用したOracle Graphの3層デプロイメント

3層デプロイメントでは、クライアント・グラフ・アプリケーションが中間層のPGXに接続し、PGXがAutonomous Databaseに接続します。

Oracle Cloudコンソールからダウンロードしたウォレットは、主にルーティング・ウォレットです。つまり、適切なデータベースに接続をルーティングしたり、接続を暗号化したりするために使用されます。ほとんどの場合、これらは自動ログイン・ウォレットではないため、実際の接続のパスワードは含まれません。通常、パスワードはウォレットの場所に個別に提供する必要があります。

グラフ・サーバーでは、クライアント・ファイル・システムに格納されているウォレットや、リモート・ユーザーが直接提供するウォレットはサポートされていません。これによって生じる高レベルでの影響は次のとおりです。

  • サーバー管理者はウォレットを提供して、サーバーのファイル・システムにウォレットを安全に格納します。
  • Java EE接続プールと同様に、リモート・ユーザーは接続時にそのウォレットを使用します。これは、サーバー管理者は、すべてのリモート・ユーザーがそのウォレットを使用すると信頼することを意味します。本番デプロイメントと同様に、PGXサーバーも、認証および認可を適用して信頼性を確立するように構成する必要があります。
  • リモート・ユーザーは依然として、非自律型データベースと同様に、グラフ読取りリクエストを送信するときにユーザー名とパスワードを指定する必要があります。
  • 各PGXサーバーには1つのウォレットのみ構成できます。

同じPGXサーバーを複数のAutonomous Databaseに接続することはサポートされていません。このユースケースがある場合、Autonomous Databaseごとに1つのPGXサーバーを起動します。

事前ロード済グラフ

サーバー起動時にAutonomous DatabaseからPGXにグラフを読み取るには、キーストアへのデータベース・パスワードの格納で説明されているステップに従います。

  1. データベース・パスワードを含むJavaキーストアを作成します
  2. ロードするグラフの場所およびプロパティを記述したPGXグラフ構成ファイルを作成します
  3. グラフ構成ファイルを参照するように/opt/oracle/graph/pgx.confファイルを更新します
rootユーザーとして、/etc/systemd/system/pgx.serviceにあるサービス・ファイルを編集し、[Service]ディレクティブの下に環境変数を指定します。
Environment="JAVA_OPTS=-Doracle.net.tns_admin=/etc/oracle/graph/wallets"

Oracle Graphユーザー(systemdの使用時にPGXサーバーを起動するユーザー)がディレクトリ(前のコードでは/etc/oracle/graph/wallets)を読取り可能なことを確認します。

また、ExecStartコマンドを編集して、パスワードを含むキーストアの場所を指定します。

ExecStart=/bin/bash start-server --secret-store /etc/keystore.p12

ノート:

これを機能させるため、/etc/keystore.p12をパスワードで保護しないでください。かわりに、oraclegraphユーザーのみが読取り可能なファイル・システム権限によってファイルを保護します。
ファイルを編集したら、次を使用して変更をリロードします。
systemctl daemon-reload
最後に、サーバーを起動します。
sudo systemctl start pgx

オンデマンド・グラフ・ロード

PGXのリモート・ユーザーが必要に応じてAutonomous Databaseから読み取ることができるようにするには、次の2つのアプローチから選択できます。

  • oracle.net.tns_adminシステム・プロパティを使用して、サーバー起動時にウォレットへのパスを提供します。リモート・ユーザーは、グラフ構成ファイルにTNSアドレス名、ユーザー名およびキーストア別名(パスワード)を提供する必要があります。ウォレットはグラフ・サーバーのファイル・システムに安全に格納され、サーバー管理者は、すべてのリモート・ユーザーがウォレットを使用してAutonomous Databaseに接続することを信頼します。

    たとえば、サーバー管理者は/etc/systemd/system/pgx.serviceにあるサービス・ファイルを編集し、[Service]ディレクティブの下に環境変数を指定します。

    Environment="JAVA_OPTS=-Doracle.net.tns_admin=/etc/oracle/graph/wallets"
    その後、次を使用してサーバーを起動します。
    systemctl start pgx

    /etc/oracle/graph/wallets/tnsnames.oraファイルには、次のようなアドレスが含まれています。

    sombrero_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=l8lgholga0ujxsa_sombrero_medium.adwc.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    これで、リモート・ユーザーは、次の接続プロパティを持つグラフ構成ファイルを送信することにより、サーバーにデータを読み込むことができます。

    {
      ...
      "jdbc_url": "jdbc:oracle:thin:@sombrero_medium",
      "username": "hr",
      "keystore_alias": "database1",
      ...
    }
    

    キーストアはクライアント側に引き続き存在し、構成オブジェクトで参照されるhrユーザーのパスワードを含んでいる必要があることに注意してください(キーストアへのデータベース・パスワードの格納を参照)。TomcatまたはWebLogic Serverデプロイメントにも同様のアプローチが適用されます。

  • Webアプリケーション・サーバーでJava EE接続プールを使用します。リモート・ユーザーは、グラフ構成ファイルにデータソース名を指定するだけで済みます。ウォレットおよび接続資格証明はWebアプリケーション・サーバーのファイル・システムに安全に格納され、サーバー管理者は、すべてのリモート・ユーザーがプールから接続を使用してAutonomous Databaseに接続することを信頼します。

    このようなデータ・ソースを設定する手順は、次の場所にあります。

    データソースにadb_dsという名前を付けた場合、次の接続プロパティを持つグラフ構成ファイルを送信してこれらを参照できます。

    {
      ...
      "datasource_id": "adb_ds",
      ...
    }