AWS 製のグラフ DB 可視化ツールの Graph Explorer を試してみた

Graph Explorer はクライアントから DB へ直接アクセスが必要だったり、証明書のエラーを処理する必要があるので注意してください

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

先日 JAWS-UG 横浜支部でグラフデータベースの可視化ツールである Graph Explorer の紹介をしました。実際に使用する時に、若干トリッキーな部分があったので設定を含めてご紹介します。

Graph Explorer

Graph Explorer は AWS 製のグラフデータの可視化ツールで、re:Invent 2022 のNeptune Serverless に関する Deep dive セッションの中でアナウンスされていたものです。

aws/graph-explorer

公式ドキュメントによると、『グラフクエリを記述しなくても、グラフデータベース内のラベル付きプロパティグラフ (LPG) またはリソース記述フレームワーク (RDF) データを参照』できるのでグラフクエリ言語を学習製図ともインタラクティブにデータを探索できるツールということです。ライセンスは Apache-2.0 license になっています。

以下の図のように、クライアントからグラフ DB へ直接アクセスする必要があるため、ネットワーク経路に注意が必要です。

試してみる

READMEを元に試してみます。

操作環境は、以下を想定しています。Neptune Serverless の起動方法はこちらのエントリを参照ください。

  • サーバー環境:Amazon Linux 2(on Amazon EC2)
  • グラフデータベース:Neptune Serverless

またサンプルデータは以下のハンズオンのデータを使用します。

Amazon Neptune でゲームの友人レコメンドエンジンを構築する

事前準備

前提のパッケージ類とグラフデータを準備します。

まずは Git と Docker をインストールします。

$ sudo yum install git docker -y
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core            
・
・
・

次に環境変数を設定します。Neptune のエンドポイントを設定します。

$ export NEPTUNE_ENDPOINT=<Neptune Endpoint>

Docker を起動します

$ sudo usermod -a -G docker ec2-user
$ sudo systemctl start docker
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

データ作成用のスクリプトのダウンロードと展開を行います。

$ curl -sL http://d118jxrmrxsq90.cloudfront.net/recommendations.tar | tar -xv

Node.js を入れるために nvm をインストールします。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

nvm の設定を読み込みます。

$ . ~/.nvm/nvm.sh

Node.js v16 をインストールします。(v18 は glibc のバージョンで問題が発生するため v16 を入れています)

$ nvm install 16

インストールを確認します。

$ node -e "console.log('Running Node.js ' + process.version)"
Running Node.js v16.19.0

依存パッケージをインストールします。

$ npm install --prefix scripts/ && npm install --prefix application

ここからサンプルデータを投入します。

まず頂点(vertex)を挿入します。

$ node scripts/insertVertices.js
Loaded vertices successfully!

次に辺(edge)を挿入します。

$ node scripts/insertEdges.js
Loaded edges successfully!

データを確認します。

$ node scripts/testDatabase.js
{ value: 56, done: false }

クライアントから Neptune へ接続できる経路を設定します。ここでは SSH の Port Forwarding で踏み台を設定します。

クライアントから SSH で接続します。

ssh -i path/to/<keypair file name> ec2-user@<EC2 Endpoint> -N -L 8182:<Neptune Endpoint>:8182

hosts で Neptune のエンドポイントを設定します。以下を hosts ファイルに追記します。

127.0.0.1   localhost   <Neptune Endpoint>

DNS のキャッシュをクリアしておきます。

# macOS
$ sudo killall -HUP mDNSResponder

# Windows
> Clear-DnsClientCache

クライアントから接続確認を行います。ここでブラウザからアクセスします。ドキュメントでは自己署名証明書を使用する手順になっていましたが、ここでは省きます。

https://<Neptune Endpoint>:8182/status

初回のアクセスで以下のようなエラーメッセージ(Chrome の場合)が表示されると思います。ここで詳細設定をクリックします。

<Neptune Endpoint>にアクセスする(安全ではありません) をクリックします。

ステータスの内容が表示されます。

Graph Explorer の導入

ここから Graph Explorer をインストールしていきます。

サーバー側でリポジトリをクローンします。

$ git clone https://github.com/aws/graph-explorer/

Docker イメージをビルドします。

$ cd graph-explorer/
$ sudo docker build --build-arg host=${NEPTUNE_ENDPOINT} -t graph-explorer .

ビルドしたイメージを起動します。

$ sudo docker run -dit -p 5173:5173 -p 8182:8182 --name neptune-client graph-explorer

クライアントからサーバーにブラウザでポート5173でアクセスします。

https://<EC2 Endpoint>:5173/

初回のアクセスで以下のようなエラーメッセージ(Chrome の場合)が表示されると思います。ここで詳細設定をクリックします。ドキュメントでは自己署名証明書を使用する手順になっていましたが、ここでは省きます。

<EC2 Endpoint>にアクセスする(安全ではありません) をクリックします。

グラフデータベースへのコネクションを設定します。ここではPublic or Proxy Endpointhttps://<Neptune Endpoint>:8182を入力して、Add Connectionをクリックします。

右上のOpen Graph Explorerをクリックします

上部にある検索欄をクリックしてみます。

すると、頂点の一覧が出てきます。その中の一つの右側にあるをクリックします。

右メニューのExpandを開き、右下のExpandをクリックします。

すると隣接する頂点が表示されます。

この様に、グラフデータの探索を行えます。

さいごに

クライアントから直接グラフデータベースへアクセスする必要があるため、Port Forwarding で経路を設定したり、証明書のエラーに対応する必要があったりと嵌るポイントが色々ありました。最初クライアントから Neptune へ直接アクセスする必要がないと思いこんでいて数日悩みましたが、Chrome の Developer Tool でブラウザがPublic or Proxy Endpointに対してアクセスを行っていたことを発見して、アクセス方法が理解できました。

Graph Explorer はまだまだこれから発展していくと思いますので、まずは試してみるとよいのではないかと思います。