目次

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 月)がリリース
  • グラフモデル設計・プロトタイプ実装のテンプレート提供

学習リソース

公式ドキュメント

AWS ブログ・記事

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 公式ドキュメント

  1. Amazon Neptune User Guide
  2. Neptune Analytics Documentation
  3. Neptune Pricing
  4. Feature Overview

AWS ブログ・アナウンス

  1. AWS Database Blog - Neptune
  2. Amazon Neptune Database Integrates with GraphStorm
  3. Neptune Analytics Integrates with Mem0
  4. Use Graph ML to Detect Fraud

OSSプロジェクト

  1. Apache TinkerPop
  2. openCypher Project
  3. GraphStorm GitHub
  4. AWS Neptune Samples GitHub
  5. W3C SPARQL Specification
  6. RDF Tutorial
  7. Mem0 GitHub

最終更新:2026-04-26 バージョン:v2.0