目次
Amazon Neptune 完全ガイド v2.0
グラフデータベース・関係性分析の全実装解説
概要
Amazon Neptune は AWS が提供する フルマネージド・高可用性グラフデータベース です。ノード(頂点)とエッジ(関係)を高速にトラバーサルし、複雑な関係性クエリを数百万規模のグラフで秒単位で実行できます。Property Graph(Gremlin / openCypher)と RDF(SPARQL)の両モデルをサポートし、SNS フォロー関係・不正検知・知識グラフ・レコメンデーションエンジンなど、「関係性」がコアの用途に最適化されています。
定義と本質
Amazon Neptune は以下を約束するグラフ DB:
- グラフトラバーサル:多段 JOIN が不要、ホップ数に関係なく一定の性能で接続を探索
- リアルタイム:数百万ノード・数十億エッジで、クエリレイテンシ< 500 ms
- 高可用性:3 AZ × 2 コピー、リードレプリカ最大 15 台、フェイルオーバー < 30 秒
- マルチモデル:Property Graph と RDF の両言語を同一インスタンスでサポート
初心者向けメモ
Neptune は「関係性を高速に探索する DB」です。RDS で「A が B をフォローし、B が C をフォローする場合、C を返す」には 2 段階 JOIN が必要ですが、Neptune のグラフトラバーサルなら 1 行のクエリで済みます。グラフが大きいほど、RDS との差は顕著になります。
Neptune が解決する課題
| 課題 | 従来の方法 | Neptune の解決 |
|---|---|---|
| 多ホップ探索が複雑・遅い | RDS で 3〜5 段 JOIN | Gremlin / openCypher で 1 行で記述 |
| 不正検知パターン検出が手動 | 複数テーブルの相関分析 | グラフパターンマッチで自動検出 |
| レコメンデーションエンジン構築が難しい | 協調フィルタリング実装が複雑 | グラフアルゴリズム(PageRank等)で簡潔 |
| ナレッジグラフの管理が困難 | RDB の正規化では表現困難 | RDF トリプルで自然に表現 |
| SNS フォロー関係のスケール問題 | キャッシュ層が必須 | Neptune が数百万ノードを高速処理 |
主な特徴(Feature Matrix)
| 特徴 | 説明 | v2.0 キーポイント |
|---|---|---|
| Property Graph | Gremlin / openCypher による柔軟グラフモデル | Neo4j 互換の openCypher が標準 |
| RDF(SPARQL) | W3C 標準トリプル形式、知識グラフ向き | オントロジー・LOD(Linked Open Data)対応 |
| Neptune Analytics | インメモリグラフ分析、アルゴリズム実行 | 2025 年さらに強化、GraphStorm 統合 |
| Neptune ML | GNN(グラフニューラルネットワーク)学習 | ノード分類・リンク予測 |
| GraphStorm 統合(2025) | 大規模 GNN トレーニング・デプロイ | 数十億エッジのモデル化が可能 |
| Mem0 統合(2025) | GenAI エージェントメモリとしてのグラフ | AI エージェントの記憶層 |
| リードレプリカ | 最大 15 台、読み取り分散 | ストレージ共有で低ラグ |
| PITR・バックアップ | ポイントイン・タイムリカバリ 1〜35 日 | 自動スナップショット対応 |
| IAM 認証 | SigV4 署名による API 認証 | パスワード不要 |
| Neptune Streams | グラフ変更の ログストリーム | リアルタイムイベント駆動 |
アーキテクチャ
図1:Neptune クラスター・ストレージアーキテクチャ
graph TB
subgraph Client["クライアント層"]
Gremlin["Gremlin / openCypher<br/>ポート 8182"]
SPARQL["SPARQL<br/>ポート 8182/sparql"]
end
subgraph Compute["コンピュート層"]
Primary["プライマリインスタンス<br/>db.r5.xlarge 等<br/>読み書き"]
Replica1["リードレプリカ 1<br/>読み取り"]
Replica2["リードレプリカ 2<br/>読み取り"]
ReplicaN["リードレプリカ N<br/>最大 15"]
end
subgraph Storage["共有ストレージ層<br/>クラスターボリューム"]
AZ1["AZ-a<br/>Segment"]
AZ2["AZ-c<br/>Segment"]
AZ3["AZ-d<br/>Segment"]
end
Gremlin --> Primary
SPARQL --> Primary
Gremlin --> Replica1
SPARQL --> Replica2
Primary --> AZ1
Primary --> AZ2
Primary --> AZ3
Replica1 --> AZ1
Replica2 --> AZ2
ReplicaN --> AZ3
style Primary fill:#ff6b6b
style Replica1 fill:#4dabf7
style Replica2 fill:#4dabf7
style ReplicaN fill:#4dabf7
図2:グラフモデル比較(Property Graph vs RDF)
graph LR
subgraph PG["Property Graph"]
A["ノード(Alice)<br/>type: Person<br/>age: 30"]
B["ノード(Bob)<br/>type: Person<br/>age: 28"]
E["エッジ(FOLLOWS)<br/>since: 2023-01-01"]
A -->|FOLLOWS| E
E -->|→| B
end
subgraph RDF["RDF"]
S["Subject<br/>Alice"]
P["Predicate<br/>follows"]
O["Object<br/>Bob"]
L["Literal<br/>2023-01-01"]
S -->|─→| P
P -->|─→| O
S -->|─→| L
end
style A fill:#51cf66
style E fill:#ffd93d
クエリ言語詳細
1. Gremlin(Apache TinkerPop)
Apache TinkerPop の標準言語。手続き的・命令型のグラフトラバーサル。
// Alice のフォロワーを取得
g.V().has('Person', 'name', 'Alice')
.out('FOLLOWS')
.values('name')
// 2 ホップ先の知人を取得(相互フォロー)
g.V().has('Person', 'name', 'Alice')
.out('FOLLOWS').as('follower')
.out('FOLLOWS')
.where(neq('follower'))
.values('name')
.dedup()
// PageRank スコアリング(一般的)
g.V().as('v')
.both('FOLLOWS').count()
.group()
.by('v')
.by(count())
.order(local)
.by(values, decr)
// パス探索(最短経路)
g.V().has('Person', 'name', 'Alice')
.repeat(out('FOLLOWS'))
.until(has('name', 'Bob'))
.path()
.by('name')
2. openCypher(Neo4j 互換)
SQL に似た宣言型構文。読みやすさが特徴。
// Alice のフォロワー取得
MATCH (alice:Person {name: 'Alice'})-[:FOLLOWS]->(follower:Person)
RETURN follower.name
// 2 ホップ先の知人
MATCH (alice:Person {name: 'Alice'})-[:FOLLOWS]->()-[:FOLLOWS]->(friend:Person)
WHERE friend.name <> alice.name
RETURN DISTINCT friend.name
// PageRank の簡易実装
MATCH (p:Person)-[:FOLLOWS]->()
WITH p, count(*) AS followers
RETURN p.name, followers
ORDER BY followers DESC
// 複数ホップの経路(推奨構文)
MATCH path = (alice:Person {name: 'Alice'})-[:FOLLOWS*1..3]->(target:Person)
UNWIND relationships(path) AS rel
RETURN path, length(path) AS hops
3. SPARQL(RDF 標準)
W3C 標準。トリプルクエリ言語。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.com/>
# Alice のフォロワーを取得
SELECT ?name
WHERE {
ex:Alice foaf:knows ?follower .
?follower foaf:name ?name .
}
# 複数ホップ(SPARQL 1.1 の +)
SELECT ?name
WHERE {
ex:Alice foaf:knows+ ?distant .
?distant foaf:name ?name .
}
# グラフパターンマッチング
SELECT ?person ?age
WHERE {
?person rdf:type foaf:Person ;
foaf:age ?age ;
foaf:knows ?other .
?other foaf:age ?otherAge .
FILTER (?age > ?otherAge)
}
Neptune Analytics(グラフ分析エンジン)
用途
インメモリでグラフ全体をロードし、複雑なアルゴリズムを実行。OLAP ワークロード向き。
Neptune Database(トランザクション)
↓ グラフエクスポート
Neptune Analytics(インメモリ分析)
├── PageRank アルゴリズム
├── コミュニティ検出(Louvain)
├── 最短経路(Dijkstra)
├── 類似度スコア(Cosine)
└── 影響度分析(Betweenness)
Neptune Analytics NQL(Neptune Query Language)
// PageRank 実行
CALL pagerank(numIterations=20)
YIELD node, rank
RETURN node.id AS person, rank
ORDER BY rank DESC LIMIT 10
// コミュニティ検出
CALL community_detection(numCommunities=5)
YIELD node, community
RETURN node.id AS person, community
ORDER BY community
// 最短経路
CALL shortest_path(source='Alice', target='Bob', relationshipType='FOLLOWS')
YIELD path, length
RETURN path, length
コスト・容量
- 料金:グラフメモリ GB/時 + I/O クエリ料金
- スケール:数十億エッジのグラフを メモリで分析可能
- 推奨:Neptune Database でホットデータ保持、Analytics で大規模分析を分離
Neptune ML(グラフ機械学習)
GraphStorm 統合(2025 新機能)
AWS と GraphStorm コミュニティが統合し、大規模 GNN(グラフニューラルネットワーク)のトレーニングとデプロイが可能に。
# GraphStorm で GNN モデルを訓練
import graphstorm as gs
from graphstorm.pytorch.nn import GSGraphConv
# Neptune から グラフをロード
graph_data = gs.load_from_neptune(
endpoint='my-cluster.xxxx.ap-northeast-1.neptune.amazonaws.com'
)
# GCN モデル定義
model = gs.nn.GraphSageModel(
input_dim=128,
hidden_dim=64,
output_dim=32,
num_layers=3
)
# 訓練
trainer = gs.Trainer(model)
trainer.train(graph_data, epochs=100)
# Neptune ML エンドポイントにデプロイ
model.save_to_neptune_ml(
model_name='fraud_detector',
instance_type='ml.p3.2xlarge'
)
# リアルタイム推論
predictions = endpoint.predict(
nodes=[user_id_1, user_id_2],
features=['age', 'account_age']
)
2025 年の新用途:GenAI エージェントメモリ(Mem0)
Neptune Analytics が Mem0 と統合し、AI エージェントの「記憶」をグラフで保存・検索。
from mem0 import Memory
import neptune_ml
# Neptune を記憶層として初期化
memory = Memory.from_neptune(
endpoint='my-cluster.xxxx.ap-northeast-1.neptune.amazonaws.com'
)
# エージェントが学習情報を追加
agent.memory.add(
"User123 は 2024 年 3 月に購入した PC 初心者",
metadata={'user_id': 'User123', 'topic': 'computing'}
)
# レコメンデーション取得
recommendations = agent.memory.search_by_graph_pattern(
pattern="User-[:HAS_INTEREST]->Topic",
filters={'user_id': 'User123'}
)
Neptune Streams(イベント駆動)
グラフ変更のリアルタイムキャプチャ
Neptune Database
↓ (ノード/エッジ追加・削除)
Neptune Streams
├── Lambda → リアルタイム異常検知
├── OpenSearch → グラフデータ同期
├── Kinesis → ダウンストリーム処理
└── CloudWatch Logs → 監査ログ
実装例
import boto3
import json
streams_client = boto3.client('neptunedata')
# ストリーム開始位置を取得
response = streams_client.get_engine_status()
commit_num = response['EngineStatus']['CommitNum']
# Streams イベントをポーリング
while True:
response = streams_client.get_neptune_stream_events(
StreamInstanceId='stream-instance-id',
Limit=10,
ExpireAfterInSeconds=3600
)
for record in response['StreamRecords']:
event_type = record['EventType'] # "Add" / "Delete" / "Update"
if event_type == 'Add':
# 新規ノード検出 → リアルタイム処理
process_new_node(record)
セキュリティ・運用
ネットワークセキュリティ
# VPC プライベートサブネット配置(推奨)
aws neptune create-db-cluster \
--db-cluster-identifier my-graph \
--db-subnet-group-name default \
--vpc-security-group-ids sg-xxxxx \
--storage-encrypted \
--kms-key-id arn:aws:kms:ap-northeast-1:...
# IAM 認証有効化
--enable-iam-database-authentication
# VPC エンドポイント(PrivateLink)
aws ec2 create-vpc-endpoint \
--service-name com.amazonaws.ap-northeast-1.neptune \
--vpc-id vpc-xxxxx
暗号化
- 保存時:AWS KMS(CMK 推奨)
- 転送中:TLS 1.2 以上(WSS / HTTPS)
- レプリカ間:自動暗号化
バックアップ・PITR
# 自動バックアップ(1〜35 日)
aws neptune modify-db-cluster \
--backup-retention-period 35
# ポイントイン・タイムリカバリ
aws neptune restore-db-cluster-from-db-cluster-snapshot \
--db-cluster-identifier restored-cluster \
--source-db-cluster-snapshot-identifier snapshot-id \
--restore-type copy-on-write
主要ユースケース(15+)
| # | ユースケース | データモデル | Neptune 機能 |
|---|---|---|---|
| 1 | SNS フォロー/推奨 | Property Graph | Gremlin / PageRank |
| 2 | 不正検知・詐欺検出 | Property Graph | パターンマッチング |
| 3 | ナレッジグラフ | RDF + SPARQL | トリプルストア |
| 4 | レコメンデーション | Property Graph | 協調フィルタリング |
| 5 | サプライチェーン | Property Graph | 最短経路・影響範囲 |
| 6 | IT インフラ管理 | Property Graph | 依存関係グラフ |
| 7 | 医療・創薬 | RDF | Gene / Protein / Disease ナレッジグラフ |
| 8 | 金融ネットワーク | Property Graph | 取引相手関係分析 |
| 9 | マスターデータ管理(MDM) | RDF | エンティティ統合 |
| 10 | アクセス制御グラフ | Property Graph | 権限分析 |
| 11 | IoT センサーネットワーク | Property Graph | センサー相互接続 |
| 12 | GenAI エージェント記憶 | Property Graph | Mem0 統合(2025) |
| 13 | 機械学習準備 | Property Graph | GraphStorm 訓練 |
| 14 | ID 統合・マッチング | Property Graph | リンク予測 |
| 15 | ソーシャル分析 | Property Graph | コミュニティ検出 |
設定例(CLI / SDK / IaC)
AWS CLI
# Neptune クラスター作成
aws neptune create-db-cluster \
--db-cluster-identifier my-graph-prod \
--engine neptune \
--engine-version 1.2.0.0 \
--storage-encrypted \
--enable-iam-database-authentication \
--db-subnet-group-name default \
--region ap-northeast-1
# プライマリインスタンス
aws neptune create-db-instance \
--db-instance-identifier primary-node \
--db-cluster-identifier my-graph-prod \
--db-instance-class db.r5.large
# リードレプリカ 2 台
for i in 1 2; do
aws neptune create-db-instance \
--db-instance-identifier replica-node-$i \
--db-cluster-identifier my-graph-prod \
--db-instance-class db.r5.large
done
CloudFormation
Resources:
NeptuneCluster:
Type: AWS::Neptune::DBCluster
Properties:
IamAuthEnabled: true
StorageEncrypted: true
KmsKeyId: !GetAtt NeptuneKey.Arn
DBSubnetGroupName: default
VpcSecurityGroupIds:
- !Ref NeptuneSecurityGroup
Tags:
- Key: Environment
Value: production
NeptunePrimaryInstance:
Type: AWS::Neptune::DBInstance
Properties:
DBInstanceClass: db.r5.large
DBClusterIdentifier: !Ref NeptuneCluster
DBInstanceIdentifier: primary-node
NeptuneReplicaInstances:
Type: AWS::Neptune::DBInstance
Properties:
DBInstanceClass: db.r5.large
DBClusterIdentifier: !Ref NeptuneCluster
DBInstanceIdentifier: !Sub 'replica-${AWS::StackName}'
Terraform
resource "aws_neptune_cluster" "example" {
cluster_identifier = "my-graph-prod"
engine = "neptune"
backup_retention_period = 35
preferred_backup_window = "03:00-04:00"
iam_database_authentication_enabled = true
storage_encrypted = true
kms_key_arn = aws_kms_key.neptune.arn
tags = {
Environment = "production"
}
}
resource "aws_neptune_cluster_instance" "primary" {
cluster_identifier = aws_neptune_cluster.example.id
instance_class = "db.r5.large"
engine = "neptune"
identifier = "primary-node"
}
resource "aws_neptune_cluster_instance" "replicas" {
count = 2
cluster_identifier = aws_neptune_cluster.example.id
instance_class = "db.r5.large"
identifier = "replica-node-${count.index + 1}"
}
類似サービス比較(2025 年)
| 観点 | Neptune | Neo4j | JanusGraph | ArangoDB | TigerGraph |
|---|---|---|---|---|---|
| ホスティング | AWS マネージド | Aura / セルフ | セルフ | マルチ | Saas / セルフ |
| スケーリング | リードレプリカ | Clustering | 分散ストレージ | マルチモデル | 独立スケール |
| Gremlin | ✅ | ❌ | ✅ | ✅ | ❌ |
| openCypher | ✅ | ✅ | △(部分) | ✅ | ❌(独自) |
| SPARQL/RDF | ✅ | △ | △ | △ | ❌ |
| ML 統合 | ✅(GraphStorm) | △ | ❌ | △ | ✅(GraphML) |
| AWS 統合 | ★★★★★ | ★★ | ★★ | ★★ | ★★ |
| 初期コスト | 低(Serverless 検討) | 中~高 | 高(セルフ) | 低~中 | 高 |
ベストプラクティス(✅/❌)
グラフ設計
✅ DO:
- ノード・エッジに意味のあるラベル/プロパティを付与
- Property Graph でホット・頻繁なクエリ、RDF でメタデータ・オントロジー
- インデックスをプロパティに張る(検索高速化)
- Gremlin と openCypher を用途で使い分け
❌ DON’T:
- ノードをすべて同じタイプにする(検索効率低下)
- 重いプロパティを大量に格納(クエリ遅延)
- トランザクション内で深いトラバーサル(タイムアウト)
- リードレプリカ なしで本番運用
パフォーマンス
✅ DO:
- 頻繁なトラバーサルパスに インデックス作成
- Concurrency Scaling で 並行クエリ対応
- Neptune Analytics で 大規模アルゴリズム実行
- Streams で イベント駆動処理
❌ DON’T:
- 全ノード・全エッジのスキャン
- キャッシュなしで同じパターン繰り返し実行
- ホットノードへの単一スレッド アクセス
- Neptune Database で大規模グラフ分析(Analytics を使用)
トラブルシューティング
| 症状 | 原因 | 解決策 |
|---|---|---|
| クエリが遅い(数秒以上) | インデックスなし、グラフが深い | インデックス作成、クエリ構造見直し |
| メモリ不足エラー | 大規模トラバーサル | LIMIT 追加、Analytics で分析 |
| 接続タイムアウト | VPC / SG 設定、認証エラー | VPC、SG、IAM ロール確認 |
| リードレプリカが遅い | ストレージ書き込み多い | プライマリ負荷低減、レプリカ数増加 |
| バックアップ失敗 | ストレージ容量満杯 | 古いスナップショット削除 |
2025-2026 最新動向
GraphStorm 統合(2025 年重点)
- Neptune Database と Neptune Analytics が統合対応
- 数十億エッジのグラフで GNN 訓練可能
- 詐欺検知・リンク予測で実績増加
GenAI エージェント向け Mem0 統合
- Neptune Analytics が Mem0 と統合
- AI エージェントの「記憶」をグラフで保存
- ChatGPT プラグインでのアクセス対応
Sample GenAI Agents
- Amazon Neptune Sample GenAI Agents(2026 年 2 月)がリリース
- グラフモデル設計・プロトタイプ実装のテンプレート提供
学習リソース
公式ドキュメント
- Amazon Neptune User Guide
- Neptune Analytics Documentation
- Gremlin Traversal Steps
- openCypher Specification
AWS ブログ・記事
- AWS Database Blog - Neptune
- Use Graph Machine Learning to Detect Fraud with Amazon Neptune Analytics and GraphStorm
- Amazon Neptune Database Integrates with GraphStorm
- Mem0 Integration with Neptune Analytics
OSSリファレンス
実装例
小規模(SNS プロトタイプ)
構成:Neptune db.r5.large(1 ノード)
コスト:$300~500/月
用途:100 万ユーザー フォロー関係
Gremlin クエリ:
g.V().has('User', 'id', user_id)
.out('FOLLOWS')
.values('name')
.limit(10)
中規模(不正検知プラットフォーム)
構成:Neptune db.r5.2xlarge(3 ノード) + Analytics
コスト:$3,000~5,000/月
用途:取引ネットワーク分析、詐欺パターン検知
流れ:
1. 取引データを Property Graph で モデル化
2. リアルタイム → Neptune Streams へ
3. Lambda で リング構造検出(詐欺パターン)
4. Neptune Analytics で PageRank → 疑いスコア
大規模(ナレッジグラフ・企業内 MDM)
構成:Neptune RDF モード + Serverless Analytics
コスト:$10,000+/月
用途:全社マスターデータ統合
流れ:
1. RDF Turtle で オントロジー定義
2. SPARQL で エンティティ統合クエリ
3. GraphStorm で 類似度スコア学習
4. クロスリージョン Data Sharing で 地域別アクセス
導入ロードマップ
フェーズ 1:PoC(1~2 週間)
- [ ] Neptune クラスター作成(1 ノード)
- [ ] サンプルグラフロード(10 万ノード程度)
- [ ] Gremlin / openCypher クエリテスト
- [ ] Neptune Analytics トライアル
フェーズ 2:パイロット(2~4 週間)
- [ ] 本番クラスター構築(3 ノード推奨)
- [ ] グラフスキーマ設計・検証
- [ ] Neptune ML / GraphStorm 検討
- [ ] VPC / IAM セキュリティ設定
- [ ] バックアップ・PITR テスト
フェーズ 3:本番化(1~2 か月)
- [ ] 本番データ移行
- [ ] Streams イベント処理設定
- [ ] 監視・アラート設定(CloudWatch)
- [ ] 災害復旧計画(RTO/RPO)
フェーズ 4:最適化(継続)
- [ ] GraphStorm で GNN モデル訓練
- [ ] Mem0 統合で GenAI エージェント構築
- [ ] マルチリージョン Data Sharing 展開
まとめ
Amazon Neptune は グラフデータベースの決定版 です。Property Graph(Gremlin / openCypher)と RDF(SPARQL)の両モデルで、SNS・不正検知・知識グラフ・レコメンデーション・GenAI 記憶層などの、「関係性」がコアの用途を高速に実現します。
2025 年の GraphStorm・Mem0 統合により、大規模グラフ機械学習と AI エージェントメモリの実装が一段階進化。数十億エッジのグラフでも秒単位のレイテンシで複雑な探索ができる、未来のアプリケーションプラットフォームとなります。
参考文献
AWS 公式ドキュメント
AWS ブログ・アナウンス
- AWS Database Blog - Neptune
- Amazon Neptune Database Integrates with GraphStorm
- Neptune Analytics Integrates with Mem0
- Use Graph ML to Detect Fraud
OSSプロジェクト
- Apache TinkerPop
- openCypher Project
- GraphStorm GitHub
- AWS Neptune Samples GitHub
- W3C SPARQL Specification
- RDF Tutorial
- Mem0 GitHub
最終更新:2026-04-26 バージョン:v2.0