概要
こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集の Day15 になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
| 項目 | 内容 |
|---|---|
| 所要時間 | 約60〜80分 |
| 利用サービス | Neptune + VPC + CloudShell |
| 学べること | Neptuneの基本構成と接続確認方法 |
| 必要な前提知識 | 特になし |
| 利用料 | 約30円(Neptune使用1時間想定) |
⚠️ Neptuneは起動中も課金されます。
本ハンズオンではNeptuneインスタンスを作成するため、最後に必ず削除まで実施してください。
削除を忘れると課金が継続します。
課題内容
AWSマネジメントコンソールを使って、
Amazon Neptuneクラスタを構築し、AWS CloudShellから接続してクエリを実行します。
EC2を立てずにNeptuneを操作できるので、コストを抑えた学習が可能です。
アーキテクチャ図
実装機能
- Neptuneクラスターを構築しよう!
- Neptuneのコンソール画面からNeptuneクラスターを構築
- Neptuneを実際に扱ってみよう!
- CloudShellを使ってNeptuneへ接続
- Gremlinクエリを実行してデータ登録・取得を確認
実装のヒント
Neptuneとは?
Amazon Neptuneは、グラフデータベースのマネージドサービスです。
頂点(ノード)とエッジ(関係)を扱い、SNS・知識グラフ・レコメンドなどに使われます。
Gremlin(TinkerPop)やSPARQLでデータをクエリします。
CloudShellとは?
AWS CloudShellは、AWSアカウントに標準で付属するブラウザ内のLinux環境です。
CLI操作や簡単なPythonスクリプト実行が可能で、追加課金も不要です。
完成後のチェックポイント
- Neptuneクラスタが起動している
- CloudShellからNeptuneへ接続できる
- Gremlinクエリでデータ登録・取得ができる
- Neptuneクラスタを削除して課金が止まっている
使用資材
このハンズオンではCloudFormationは使わず、すべてAWSコンソール操作で進めます。
CloudShellからの接続確認に必要なコードは、以下に記載します。
リファレンスリンク
解答・構築手順(クリックで開く)
解答と構築手順を見る
ステップ1:VPCの作成
- コンソールで「VPC」を検索し、「VPCを作成」をクリック
- 「VPCとその他のリソースを作成」を選択
- 設定を以下の通りにします:
| 設定項目 | 値 |
|---|---|
| 名前タグ | NeptuneVPC |
| CIDRブロック | 10.0.0.0/16 |
| パブリックサブネット | 1つ(例:10.0.1.0/24) |
| DNSホスト名 | 有効化 |
| インターネットゲートウェイ | 自動で作成してアタッチ |
| アベイラビリティゾーン (AZ) の数 | 2 |
- 「VPCを作成」をクリック
ステップ2:セキュリティグループの作成
- サービス → 「VPC」→「セキュリティグループ」
- 「セキュリティグループを作成」をクリック
- 以下のように設定:
| 設定項目 | 値 |
|---|---|
| 名前タグ | NeptuneSecurityGroup |
| VPC | NeptuneVPC |
| インバウンドルール | TCP 8182 ポートを許可(ソース:CloudShellのIP ※1) |
| アウトバウンドルール | 全て許可 |
※1 以下コマンドをCloidShell上で実行し、IPアドレスを確認する
curl -s https://checkip.amazonaws.com
- 「セキュリティグループを作成」をクリック
ステップ3:Neptuneクラスタとインスタンスの作成
- コンソールで「Neptune」を検索 → 「Neptuneクラスターを作成」
- 以下の設定を行います:
| 項目 | 設定内容 |
|---|---|
| DBエンジンのタイプ | Amazon Neptune |
| DBエンジンのバージョン | Neptune 1.4.6.0 以降を選択 |
| DBインスタンスクラス | db.t3.medium |
| ストレージタイプ | 汎用SSD |
| VPC | NeptuneVPC |
| サブネットグループ | 自動作成または手動で選択 |
| セキュリティグループ | NeptuneSecurityGroup |
| 可用性ゾーン | どちらでも可 |
| パブリックアクセス | 有効(CloudShellから接続するため) |
- 「クラスターを作成」をクリック
- 状態が「利用可能 (available)」になるまで待機
ステップ4:CloudShellを起動
-
AWSコンソール右上の「>_ CloudShell」アイコンをクリック
-
新しいターミナルがブラウザ下部に開きます
-
以下コマンドで環境確認:
aws sts get-caller-identity python3 --version
→ AWSアカウント情報とPythonバージョンが表示されればOK
ステップ5:CloudShellからNeptuneに接続
-
Neptuneコンソールで「クラスタエンドポイント」をコピー
例:neptune-cluster-xxxxxxxx.cluster-abcdefgh.ap-northeast-1.neptune.amazonaws.com -
CloudShellでGremlinクライアントをインストール:
pip3 install gremlinpython
pip3 install gremlinpython boto3 botocore
- 以下コマンドを実行し、スクリプトを作成(例:neptune_test.py):
cat > neptune_test.py << 'EOF'
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.process.traversal import T
from gremlin_python.process.graph_traversal import __
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
from botocore.session import Session
# Neptuneエンドポイント
neptune_endpoint = "<Neptuneエンドポイント>"
neptune_port = 8182
region = "ap-northeast-1"
# IAM認証用のヘッダー生成
def get_auth_headers():
service = 'neptune-db'
method = 'GET'
session = Session()
credentials = session.get_credentials()
request = AWSRequest(
method=method,
url=f"wss://{neptune_endpoint}:{neptune_port}/gremlin",
headers={'host': neptune_endpoint}
)
SigV4Auth(credentials, service, region).add_auth(request)
return dict(request.headers)
# 接続
headers = get_auth_headers()
connection_url = f"wss://{neptune_endpoint}:{neptune_port}/gremlin"
g = traversal().withRemote(
DriverRemoteConnection(
connection_url,
'g',
headers=headers
)
)
# 頂点を追加
g.addV('Person').property('name', 'Alice').next()
g.addV('Person').property('name', 'Bob').next()
# エッジを追加(__を使用)
g.V().has('Person', 'name', 'Alice').addE('knows').to(__.V().has('name', 'Bob')).next()
# 登録確認
result = g.V().values('name').toList()
print(result)
EOF
- 実行:
python3 neptune_test.py
出力例:
['Alice', 'Bob']
→ 接続成功&データ登録確認!
ステップ6:リソース削除(重要)
- Neptuneクラスタ削除
- Neptuneコンソール → クラスタを選択 → 「削除」
- スナップショットは不要なら「作成しない」を選択
- VPC削除
- 関連サブネット、ルートテーブル、インターネットゲートウェイを削除
- 最後にVPC本体を削除
おつかれさまでした!
この課題では、AWSマネジメントコンソール+CloudShellのみで
Neptuneの構築からデータ登録までを体験しました。
EC2を使わないことで、
- コストを最小限に
- 削除ミスのリスクをゼロに
- すぐ試せるハンズオン
を実現しています。
この課題を通じて、Neptuneの基本概念と使い方を理解し、自動化の重要性を実感していただければ幸いです。
次は登録したデータをグラフ構造で可視化する応用編などにも挑戦しましょう!
