グラフノートブックでの Amazon Neptune の使用
Neptune グラフを操作するには、Neptune グラフノートブックを使用するか、CloudFormation テンプレートを使用して新しい Neptune データベースを作成します。
グラフを初めて使用する、詳細を知り試してみたい、使用経験がありクエリを改良したいという場合に、Neptune Workbench は、グラフアプリケーションを構築する際の生産性を向上させるインタラクティブ開発環境 (IDE) を提供します。Neptune Workbench には、Neptune データベースの操作、クエリの記述、データの視覚化のための使いやすいインターフェイスが用意されています。
CloudFormation テンプレートを使用して Neptune データベースをセットアップし、Neptune Workbench を使用してグラフアプリケーションを開発することで、追加のツールを必要とせずに Neptune を迅速かつ効率的に開始できます。これにより、基盤となるインフラストラクチャの設定ではなく、アプリケーションの構築に集中できます。
注記
Amazon SageMaker AI で管理される Neptune ノートブックは、現在、アジアパシフィック (マレーシア) (ap-southeast-5) リージョンでは利用できません。ただし、非マネージド型の代替オプションを使用して Neptune ノートブックをデプロイすることはできます。ノートブックを手動でデプロイするには、「Neptune ノートブックを手動でセットアップする」を参照してください。
Neptune は、GitHub 上のオープンソースの Neptune グラフノートブック
これらのノートブックはいくつかの方法でホストできます。
-
Neptune ワークベンチを使用すると、Amazon SageMaker AI でホストされるフルマネージド環境で Jupyter Notebook を実行し、Neptune グラフノートブックプロジェクト
の最新リリースを自動的にロードできます。新しい Neptune データベースを作成するときに、Neptune コンソール でワークベンチを簡単にセットアップできます。 注記
Neptune ノートブックインスタンスを作成するときのネットワークアクセスのオプションには、Amazon SageMaker AI を介した直接アクセス (デフォルト) と VPC を介したアクセスの 2 つがあります。どちらのオプションでも、ノートブックは Neptune Workbench をインストールするためのパッケージの依存関係を取得するためにインターネットにアクセスする必要があります。インターネットアクセスがなければ、Neptune ノートブックインスタンスの作成は失敗します。
Jupyter をローカルにインストールすることもできます。これにより、Neptune またはオープンソースのグラフデータベースのローカルインスタンスに接続されたラップトップからノートブックを実行することもできます。後者の場合、無料でグラフテクノロジーを好きなだけ試してみることができます。準備ができたら、Neptune が提供するマネージドプロダクション環境にスムーズに移行できます。
Neptune ワークベンチを使用して Neptune ノートブックをホストする
Neptune は、1 時間あたり 0.10 ドル未満で開始できる T3 および T4g インスタンスタイプを提供します。ワークベンチのリソースに対しては、Neptune の請求とは別に、 Amazon SageMaker AI を通じて請求されます。Neptune の料金ページ
Neptune ワークベンチを使用して Jupyter または JupyterLab ノートブックを作成するには、AWS マネジメントコンソール で次の 2 つの方法のいずれかを使用します。
新しい Neptune DB クラスターを作成するときは、[ノートブック設定] メニューを使用してください。このためには、「AWS マネジメントコンソール を使用して Neptune DB クラスターを起動する」のステップに従います。
DB クラスターが作成された後、左側のナビゲーションペインの [ノートブック] メニューを使用してください。そのためには、以下の手順を実行します。
[ノートブック] メニューを使用して Jupyter または JupyterLab ノートブックを作成するには
AWS マネジメントコンソールにサインインして Amazon Neptune コンソール (https://console.aws.amazon.com/neptune/home
) を開きます。 左側のナビゲーションペインで、[Notebooks (ノートブック)] を選択します。
[Create notebook (ノートブックの作成)] を選択します。
Neptune サービスとして[データベース]を選択します。
[Cluster] (クラスター) リストで、Neptune DB クラスターを選択します。DB クラスターをまだ作成していない場合は、[Create cluster (クラスターの作成)] を選択して作成します。
[ノートブックインスタンスタイプ] を選択します。
ノートブックに名前を付け、必要に応じて説明を入力します。
-
ノートブックのAWS Identity and Access Management (IAM) ロールをまだ作成していない場合は、[Create an IAM role] (IAM ロールの作成) を選択し、IAM ロール名を入力します。
注記
以前のノートブック用に作成した IAM ロールを再利用する場合、ロールポリシーに、使用している Neptune DB クラスターにアクセスするための正しいアクセス許可が含まれている必要があります。これを確認するには、
neptune-db:*アクションのリソース ARN 内のコンポーネントがそのクラスターと一致することを確認します。アクセス許可の設定を誤ると、notebook magic コマンドを実行しようとすると接続エラーが発生します。 [Create notebook (ノートブックの作成)] を選択します。作成プロセスでは、すべての準備が整うまでに 5 ~ 10 分かかる場合があります。
ノートブックが作成されたら、そのノートブックを選択し、[Jupyter を開く] または [JupyterLab を開く] を選択します。
コンソールでは、ノートブックの AWS Identity and Access Management (IAM) ロールを作成することも、自分でロールを作成することもできます。このロールのポリシーには、次のものを含める必要があります。
上記のポリシーの 2 番目のステートメントには、1 つ以上の Neptune クラスターリソース ID がリストされていることに注意してください。
また、ロールは次の信頼関係を確立する必要があります。
繰り返しますが、すべての準備ができるまで、5 ~ 10 分かかることがあります。
「Neptune ML 用の Neptune ノートブックの手動設定」で説明されているように、新しいノートブックを Neptune ML と連携するように設定できます。
Python を使用して汎用 SageMaker AI ノートブックを Neptune に接続する
Neptune Magics をインストールしていればノートブックを Neptune に接続するのは簡単ですが、Neptune ノートブックを使っていなくても、Python を使って SageMaker AI ノートブックを Neptune に接続することができます。
SageMaker AI ノートブックセルで Neptune に接続するための手順
-
Gremlin Python クライアントをインストールします。
!pip install gremlinpythonNeptune ノートブックは Gremlin Python クライアントをインストールするため、この手順はプレーンな SageMaker AI ノートブックを使用している場合にのみ必要です。
-
Gremlin クエリを接続して発行するには、次のようなコードを記述します。
from gremlin_python import statics from gremlin_python.structure.graph import Graph from gremlin_python.process.graph_traversal import __ from gremlin_python.process.strategies import * from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection from gremlin_python.driver.aiohttp.transport import AiohttpTransport from gremlin_python.process.traversal import * import os port = 8182 server = '(your server endpoint)' endpoint = f'wss://{server}:{port}/gremlin' graph=Graph() connection = DriverRemoteConnection(endpoint,'g', transport_factory=lambda:AiohttpTransport(call_from_event_loop=True)) g = graph.traversal().withRemote(connection) results = (g.V().hasLabel('airport') .sample(10) .order() .by('code') .local(__.values('code','city').fold()) .toList()) # Print the results in a tabular form with a row index for i,c in enumerate(results,1): print("%3d %4s %s" % (i,c[0],c[1])) connection.close()
注記
3.5.0 より古いバージョンの Gremlin Python クライアントを使用している場合は、次の行を使用します。
connection = DriverRemoteConnection(endpoint,'g', transport_factory=lambda:AiohttpTransport(call_from_event_loop=True))
ちょうど次のようになります。
connection = DriverRemoteConnection(endpoint,'g')
Neptune ノートブックでの CloudWatch ログの有効化
Neptune ノートブックで CloudWatch ログがデフォルトで有効になりました。CloudWatch ログを生成していない古いノートブックを使用している場合は、次の手順に従って手動で有効にします。
AWS マネジメントコンソール にサインインして、SageMaker AI コンソール
を開きます。 左側のナビゲーションペインで [ノートブック] を選択し、[ノートブックインスタンス] を選択します。ログを有効にする Neptune ノートブックの名前を探します。
そのノートブックインスタンスの名前を選択して、詳細ページに移動します。
ノートブックインスタンスが実行中の場合は、ノートブックの詳細ページの右上にある [停止] ボタンを選択します。
[アクセス許可と暗号化] に、IAM ロール ARN のフィールドがあります。このフィールドのリンクを選択して、このノートブックインスタンスが実行される IAM ロールに移動します。
-
以下のポリシーを作成します。
この新しいポリシーを保存し、ステップ 4 で確認した IAM ロールにアタッチします。
SageMaker AI ノートブックインスタンスの詳細ページの右上にある [開始] をクリックします。
ログが流れ始めると、詳細ページの [ノートブックインスタンス設定] セクションの左下にある [ライフサイクル設定] というラベルの付いたフィールドの下に [ログを表示] リンクが表示されます。
ノートブックが起動しない場合、SageMaker AI コンソールのノートブック詳細ページに、ノートブックインスタンスの起動に 5 分以上かかったことを示すメッセージが表示されます。この問題に関連する CloudWatch ログは、次の名前で確認できます。
(your-notebook-name)/LifecycleConfigOnStart
ローカルマシンでのグラフノートブックの設定
グラフノートブックプロジェクトには、ローカルマシンで Neptune ノートブックを設定する手順が記載されています。
ローカルノートブックは、Neptune DB クラスター、またはオープンソースのグラフデータベースのローカルインスタンスまたはリモートインスタンスに接続できます。
Neptune ノートブックを Neptune クラスターで使用する
バックエンドで Neptune クラスターに接続する場合は、Amazon SageMaker AI でノートブックを実行することをお勧めします。SageMaker AI から Neptune への接続は、ノートブックのローカルインストールよりも便利で、Neptune ML を使えば、より簡単に作業できます。
SageMaker AI でのノートブックのセットアップ方法については、Amazon SageMaker を使用してグラフノートブックを起動する
Neptune 自体の設定およびセットアップ方法については、Amazon Neptune のセットアップ を参照してください。
Neptune ノートブックのローカルインストールを Neptune DB クラスターに接続することもできます。Amazon Neptune DB クラスターは、外部から隔離された Amazon Virtual Private Cloud (VPC) でのみ作成できるため、これはやや複雑になる可能性があります。VPC を外部から VPC に接続するには、さまざまな方法があります。1 つは、ロードバランサーを使用することです。もう 1 つは VPC ピアリングを使用する方法です (Amazon Virtual Private Cloud ピアリングガイドを参照)。
ただし、ほとんどの人にとって最も便利な方法は、接続して VPC 内に Amazon EC2 プロキシサーバーをセットアップし、SSH トンネリングadditional-databases/neptune フォルダにあるグラフノートブックをローカルで Amazon Neptune に接続する
Neptune ノートブックをオープンソースのグラフデータベースで使用する
グラフテクノロジーを無償で開始するには、バックエンドでさまざまなオープンソースデータベースを備えた Neptune ノートブックを使用することもできます。例としては TinkerPop Gremlin サーバー
Gremlin Server をバックエンドデータベースとして使用するには、以下の手順に従ってください。
グラフノートブック Gremlin サーバーに接続する
GitHub フォルダ。 グラフノートブック Gremlin 構成
GitHub フォルダ。
バックエンドデータベースとして Blazegraph
Blazegraph クイックスタート手順
を確認して、Blazegraph インスタンスの実行に必要な基本的なセットアップと設定を理解します。 Blazegraph のローカルインスタンスの設定に必要なファイルと手順を含むグラフノートブック Blazegraph 設定
の GitHub フォルダにアクセスします。 GitHub リポジトリ内で「blazegraph」ディレクトリに移動し、提供された手順に従って Blazegraph のローカルインスタンスをセットアップします。この作業には、Blazegraph ソフトウェアのダウンロード、必要なファイルの設定、Blazegraph サーバーの起動の手順が含まれます。
Blazegraph のローカルインスタンスを実行したら、グラフベースのデータとクエリのバックエンドデータベースとしてアプリケーションと統合できます。アプリケーションを Blazegraph インスタンスに接続する方法については、グラフノートブックリポジトリにあるドキュメントとサンプルコードを参照してください。
Neptune ノートブックを JupyterLab 4.x に移行する
このセクションでは、Neptune ノートブックを JupyterLab 4.x 以降の Amazon Linux 環境に移行するためのさまざまなアプローチの概要を説明します。JupyterLab バージョニングの詳細については、「Amazon SageMaker AI JupyterLab Versioning」を参照してください。
移行アプローチ
新規インストール
既存のワークスペースファイルまたは設定を保持する必要がない場合は、次のことができます。
-
JupyterLab 4.x を実行する新しいノートブックインスタンスを作成する (notebook-al2-v3)
-
サービスが期待どおりに動作することを確認する
-
古いノートブックインスタンスを停止および削除する
File Transfer による移行
この方法では、ローカルシステムまたは Amazon S3 を中間ストレージとして使用します。
次の用途に適しています
-
中程度のデータ量の移行
-
ワークスペース設定全体ではなく、特定のファイルを保持。
方法 1: JupyterLab UI の使用
次の用途に適しています
-
少数のファイルが対象である場合
-
移行するファイルが絞られている場合
-
シンプルなドラッグアンドドロップ操作を優先する場合
ステップ
-
ソース JupyterLab インスタンスからファイルをダウンロード
-
JupyterLab の新しいインスタンスに移行するファイルに移動して選択します。
-
右クリックして [ダウンロード] を選択
-
-
新しい JupyterLab インスタンスにアップロード
-
JupyterLab のアップロードボタンを使用して、新しいインスタンスにコピーするすべてのファイルを選択
-
(または) ファイルを直接ドラッグアンドドロップ
-
方法 2: Amazon S3 の使用
次の用途に適しています
-
多数のファイルが対象である場合
-
フォルダ構造を保持したい場合
-
一括で移行する場合
前提条件
ノートブックに関連付けられたロールに、Amazon S3 バケットをアップロードしてアクセスするための適切なアクセス許可があることを確認する
{ "Effect": "Allow", "Action": ["s3:PutObject", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::your-bucket-name/*", "arn:aws:s3:::your-bucket-name"] }
注記
AWS CLI
ステップ
-
JupyterLab でターミナルを開くか、
!プレフィックスが付いたノートブックセルにターミナルコマンドを入力します。 -
Amazon S3 cp または Amazon S3 sync CLI コマンドを使用して、古い JupyterLab インスタンスから S3 にファイルをコピーします。
# using AWS s3 cp aws s3 cp /home/ec2-user/SageMaker/your-folder s3://your-bucket/backup/ --recursive # (OR) using AWS s3 sync aws s3 sync /home/ec2-user/SageMaker/your-folder s3://your-bucket/backup/ -
S3 から新しい JupyterLab インスタンスにファイルをコピーします。
# using AWS s3 cp aws s3 cp s3://your-bucket/backup/ /home/ec2-user/SageMaker/your-folder --recursive # (OR) using AWS s3 sync aws s3 sync s3://your-bucket/backup/ /home/ec2-user/SageMaker/your-folder
注記
sync は、フォルダ構造の維持と増分更新に使用します。cp は 1 回限りの転送に使用します。
Amazon EFS の移行
次の用途に適しています
-
VPC のみのネットワーク設定を行う場合
-
データボリュームが大きい場合
ステップ
ブログ「 Mount an EFS file system to an Amazon SageMaker AI notebook
さらに、Neptune ノートブックを新しい環境に移行する場合に特に適用される手順が他にもいくつかあります。
-
コンソールで Neptune ノートブックを作成するときに、ライフサイクル設定で[新しいライフサイクル設定を作成する]を選択します。
-
テンプレートライフサイクル設定で、install.sh スクリプトの後に Amazon EFS マウントコマンド (
sudo mount -t nfs ...) を追加します。
この操作で、ノートブックインスタンスが起動または再起動するたびに Amazon EFS ファイルシステムが自動的にマウントされます。マウントの問題のトラブルシューティングについては、「Amazon EFS トラブルシューティングドキュメント」を参照してください。
利点
-
インスタンス間でのファイルへのシームレスなアクセス
-
中間転送なしの直接ファイルアクセス
-
大規模なデータセットの効率的な処理
Amazon EBS ボリュームの移行
以下を保持する必要がある場合に最適
-
全体的なワークスペース設定
-
隠しファイル
-
システム設定
-
全体的なワークスペース設定、非表示ファイル、システム設定の保持
Amazon AWS EBS ボリュームの SageMaker AI 移行ガイドに従って、ノートブックインスタンスに関連付けられた Amazon EBS ボリュームからファイルを転送します。
さらに、Neptune ノートブックを新しい環境に移行する場合に特に適用される手順が他にもいくつかあります。
Neptune 固有の前提条件
ソース Neptune ノートブックの IAM ロールに、以下のすべてのアクセス許可を追加します。
{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::(your ebs backup bucket name)", "arn:aws:s3:::(your ebs backup bucket name)/*" ] }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags" ], "Resource": [ "*" ] }
バックアップに使用する S3 バケットの正しい ARN を必ず指定してください。
Neptune 固有のライフサイクル設定
ブログ記事で説明されているように、(on-create.sh から) バックアップを復元するための 2 つ目のライフサイクル設定スクリプトを作成する場合、ライフサイクル名は aws-neptune-* 形式に従う必要があります (aws-neptune-sync-from-s3 など)。これにより、Neptune コンソールでノートブックを作成する際に LCC を選択できるようになります。
スナップショットから新しいインスタンスへの Neptune 固有の同期
スナップショットから新しいインスタンスへの同期に関するブログ記事で説明されている手順には、Neptune 固有の変更点があります。
ステップ 4 で、notebook-al2-v3 を選択します。
ステップ 5 で、ソース Neptune ノートブックの IAM ロールを再利用します。
-
ステップ 7 と 8 の間:
[ノートブックインスタンス設定] で、
aws-neptune-*形式を使用する名前を設定します。[ネットワーク] 設定アコーディオンを開き、ソースノートブックと同じ VPC、サブネット、およびセキュリティグループを選択します。
新しいノートブックが作成された後の Neptune 固有のステップ
ノートブックの [Jupyter を開く] ボタンを選択します。メインディレクトリに
SYNC_COMPLETEファイルが表示されたら、次のステップに進みます。SageMaker AI コンソールのノートブックインスタンスページに移動します。
ノートブックを停止します。
[Edit] (編集) を選択します。
ノートブックインスタンス設定で、ソース Neptune ノートブックの元のライフサイクルを選択して、[ライフサイクル設定] フィールドを編集します。これは EBS バックアップライフサイクルではないことに注意してください。
[ノートブック設定の更新] を選択します。
ノートブックを再起動します。
ブログ記事で説明されている手順にここで説明されている変更を加えると、グラフノートブックは Amazon Linux 2 と JupyterLab 4 環境を使用する新しい Neptune ノートブックインスタンスに移行されるはずです。これらは、AWS マネジメントコンソール の Neptune ページに、アクセスと管理のために表示され、[Jupyter を開く] または [JupyterLab を開く] を選択して、中断したところから作業を続けることができます。
Amazon SageMaker AI インスタンスで Neptune ノートブックを作成する
Amazon SageMaker AI コンソール (https://console.aws.amazon.com/sagemaker/
) を開きます。 ナビゲーションペインで [ノートブック] を展開し、それから [ノートブックインスタンス] を選択します。
[Create notebook instance] (ノートブックインスタンスの作成) を選択します。
[ノートブックインスタンス設定] の [ノートブックインスタンス名] で、
aws-neptune-というプレフィックス (例:aws-neptune-my-test-notebook) が付いた名前をノートブックに付けます。[プラットフォーム識別子] で、Amazon Linux 2、JupyterLab 4 を選択します。
[追加設定] を選択します。
[ライフサイクル設定] で、[新しいライフサイクル設定の作成] を選択します。
[設定] で、[名前] にステップ 4 のノートブックインスタンス名を入力します。
-
[スクリプト] の [ノートブックの開始] で、既存のスクリプトを次のように置き換えます。
#!/bin/bash sudo -u ec2-user -i <<'EOF' echo "export GRAPH_NOTEBOOK_AUTH_MODE=IAM" >> ~/.bashrc echo "export GRAPH_NOTEBOOK_SSL=True" >> ~/.bashrc echo "export GRAPH_NOTEBOOK_SERVICE=neptune-db for Neptune, or neptune-graph for Neptune Analytics" >> ~/.bashrc echo "export GRAPH_NOTEBOOK_HOST=(Neptune Analytics graph endpoint, public or private)" >> ~/.bashrc echo "export GRAPH_NOTEBOOK_PORT=8182" >> ~/.bashrc echo "export NEPTUNE_LOAD_FROM_S3_ROLE_ARN=" >> ~/.bashrc echo "export AWS_REGION=(AWS region)" >> ~/.bashrc aws s3 cp s3://aws-neptune-notebook-(AWS region)/graph_notebook.tar.gz /tmp/graph_notebook.tar.gz rm -rf /tmp/graph_notebook tar -zxvf /tmp/graph_notebook.tar.gz -C /tmp /tmp/graph_notebook/install_jl4x.sh EOF [起動設定の作成] を選択します。
[アクセス許可と暗号化] の [IAM ロール] で、上記で作成したロールを選択します。
-
[ネットワーク] でプライベートグラフエンドポイントを使用している場合
[VPC] で、Neptune Analytics のグラフが存在する VPC を選択します。
[サブネット] で、Neptune Analytics のグラフに関連付けられたサブネットを選択します。
[セキュリティグループ] で、Neptune Analytics のグラフに関連付けられているすべてのセキュリティグループを選択します。
[Create notebook instance] (ノートブックインスタンスの作成) を選択します。
5 分から 10 分後、新しいノートブックが
Readyステータスになったら選択します。[Jupyter で開く] または [JupyterLab で開く] を選択します。
Neptune ノートブックを手動でセットアップする
グラフノートブックおよびグラフエクスプローラーで使用できる AWS オープンソースパッケージを使用して、Neptune ノートブック環境を設定することもできます。オープンソースパッケージを使用してノートブックをセットアップする方法は複数ありますが、推奨されるアプローチは次のとおりです。
-
ローカルマシンにグラフノートブック
を設定し、ローカルマシンを Amazon EC2 インスタンスと同じ VPC 上の Neptune クラスターに接続する Amazon EC2 SSH トンネルを設定します。 -
VPC 内の Amazon EC2 インスタンスに グラフエクスプローラー
を設定します。
オープンソースの グラフノートブック
セキュリティ設定
環境設定時は、次のセキュリティ設定が適切に設定されていることを確認してください。
-
Neptune クラスターセキュリティグループ - Amazon EC2 インスタンスのセキュリティグループからのポート 8182 での受信 TCP トラフィックを許可します。
-
Amazon EC2 インスタンスセキュリティグループ - グラフエクスプローラーのアクセスが有効になるようにインバウンド HTTPS ルールを設定します。
Neptune クラスターと Amazon EC2 インスタンスの両方に単一のセキュリティグループを使用することをお勧めします。これにより設定が簡素化され、接続に関する潜在的な問題が軽減されます。ただし、グループ内リソース間の通信を許可する自己参照ルールを必ず追加してください。