記事検索

検索ワードを入力してください。
Sky Tech Blog
【AWS】AWS上で​Neo4jを​構築してみる

【AWS】AWS上で​Neo4jを​構築してみる

この記事は、AWS上でNeo4jを構築し、Neo4jのグラフデータベースを操作するためのGUIであるNeo4j Browserを表示する手順について説明しています。

この記事ではAWS上でNeo4jを構築し、Neo4jのグラフデータベースを操作するためのGUIであるNeo4j Browserを表示するところまでをご紹介いたします。

Neo4jに​ついて

Neo4jはJavaベースの組み込み型のグラフデータベースエンジンでスウェーデンのNeo Technologyが提供するオープンソースソフトウェアです。
Neo4jはJavaベースのため、Javaの実行環境が必要になります。

前提条件

本記事を進めるにあたり、以下の環境が整っていることを前提とします。

  • AWSアカウントの取得済み
  • AWS CLIの設定済み
  • Terraformのインストール済み
  • Terraformの基本的な知識

構築する​アーキテクチャ

今回構築する環境と構成図は以下の通りです。

  • VPC : 独立したネットワーク環境
  • パブリックサブネット : インターネットからアクセス可能なサブネット
  • インターネットゲートウェイ : インターネット接続用
  • セキュリティグループ : Neo4j用ポート(7474、7687)を開放
  • EC2インスタンス : Amazon Linux 2023でNeo4jを実行
  • IAMロール : Systems Manager接続用

Terraformソースコード

以下が全体のソースコードです。

provider "aws" provider "aws" {
  region     = "ap-northeast-1"
  access_key = "YOUR_ACCESS_KEY"
  secret_key = "YOUR_SECRET_KEY"
}

terraform {
  backend "s3" {
    bucket  = "{tfstate管理用S3バケット名}"
    region  = "ap-northeast-1"
    key     = "neo4j.terraform.tfstate"
    encrypt = true
  }
}

# vpc
resource "aws_vpc" "this" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "neo4j-test-vpc"
  }
}

# subnet
# 今回はあくまで構築検証のため、パブリックサブネットにNeo4jを構築します。
resource "aws_subnet" "public" {
  vpc_id            = aws_vpc.this.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"
  tags = {
    Name = "neo4j-test-public-subnet"
  }
}

# internet gateway
resource "aws_internet_gateway" "this" {
  vpc_id = aws_vpc.this.id
  tags = {
    Name = "neo4-test-igw"
  }
}

# route table
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.this.id
  }  
  tags = {
    Name = "neo4-test-public-rtb"
  }
}

resource "aws_route_table_association" "public" {
  subnet_id      = aws_subnet.public.id
  route_table_id = aws_route_table.public.id
}

# security group
resource "aws_security_group" "neo4j_sg" {
  name        = "neo4-test-sg"
  description = "neo4 test security group"
  vpc_id      = aws_vpc.this.id
  
  # Neo4jのデフォルトHTTPポート
  # 実際は詳細のIPアドレスを設定してください。
  ingress {
    from_port = 7474
    to_port   = 7474
    protocol  = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }  
  
  # Boltプロトコルポート
  # 実際は詳細のIPアドレスを設定してください。 
  ingress {
    from_port   = 7687
    to_port     = 7687
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "neo4-test-sg"
  }
}

# ec2用IAMロール
resource "aws_iam_role" "this" {
  name = "neo4j-test-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      }
    ]
  }
)}

# ec2用IAMポリシー
resource "aws_iam_policy" "this" {
  name        = "neo4j-test-policy"
  description = "neo4j test policy"
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "s3:ListBucket",
          "s3:GetObject",
        ]
        Effect   = "Allow"
        Resource = "*"
      }
    ]
  }
)}

# 作成したIAMポリシーをアタッチ
resource "aws_iam_role_policy_attachment" "this" {
  role       = aws_iam_role.this.name
  policy_arn = aws_iam_policy.this.arn
}

# SSM用のマネージドポリシーをアタッチ
resource "aws_iam_role_policy_attachment" "ssm_managed_instance_core" {
  role       = aws_iam_role.this.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

# instance profile
resource "aws_iam_instance_profile" "this" {
  name = "neo4j-test-instance-profile"
  role = aws_iam_role.this.name
}

# ec2
resource "aws_instance" "this" {
  ami                  = "ami-xxxxxxxxxxxx"
  associate_public_ip_address = true
  instance_type        = "t3.medium"
  iam_instance_profile = aws_iam_instance_profile.this.name
  vpc_security_group_ids = [
    aws_security_group.neo4j_sg.id
  ]  
  subnet_id = aws_subnet.public.id
  user_data = <<-EOF
#!/bin/bash

yum update -y

# Java 21のインストール
yum install -y java-21-amazon-corretto

# Neo4jのインストール
cd /tmp
wget https://dist.neo4j.org/neo4j-community-5.26.4-unix.tar.gz
tar -xzf neo4j-community-5.26.4-unix.tar.gz
mv neo4j-community-5.26.4 /opt/neo4j

# 設定ファイル編集
sed -i 's/#server.default_listen_address=0.0.0.0/server.default_listen_address=0.0.0.0/' /opt/neo4j/conf/neo4j.conf

# neo4jユーザー作成
useradd -r -s /bin/false neo4j
chown -R neo4j:neo4j /opt/neo4j

# systemdサービス作成
cat > /etc/systemd/system/neo4j.service << 'EOL'
[Unit]
Description=Neo4j Graph Database
After=network-online.target
[Service]
ExecStart=/opt/neo4j/bin/neo4j
consoleRestart=on-failure
User=neo4jGroup=neo4j
Environment=NEO4J_HOME=/opt/neo4j
[Install]
WantedBy=multi-user.target
EOL

# サービス開始
systemctl daemon-reload
systemctl enable neo4j
systemctl start neo4j

# 初期パスワード設定
sleep 15
sudo -u neo4j /opt/neo4j/bin/neo4j-admin dbms set-initial-password "neo4j123"
systemctl restart neo4jecho "Neo4j installation completed." > /var/log/neo4j-install.log
EOF


  tags = {
    Name = "neo4-test-server"
  }
}

# パブリックIPアドレスを出力
output "neo4j_public_ip" {
  value       = aws_instance.this.public_ip
  description = "Neo4j server public IP address"
}

output "neo4j_url" {
  value       = "http://${aws_instance.this.public_ip}:7474"
  description = "Neo4j Browser URL"
}

デプロイ手順

1. 事前準備

まず、Terraformの状態管理用S3バケットを作成します。

# S3バケット作成(バケット名は一意である必要があります)
aws s3 mb s3://your-terraform-state-bucket --region ap-northeast-1

Terraformファイルの以下の部分に、取得済みのAWSアクセスキーを設定してください。

provider "aws" {
  region     = "ap-northeast-1"
  access_key = "YOUR_ACCESS_KEY"    # ← ここに実際のアクセスキーIDを設定
  secret_key = "YOUR_SECRET_KEY"    # ← ここに実際のシークレットアクセスキーを設定
}

2. Terraformファイルの​準備

上記のTerraformコードをneo4j.tfとして保存し、以下の値を環境に合わせて変更してください。

  • bucket : S3バケット名を実際の名前に変更
  • ami : 使用するリージョンの最新Amazon Linux 2023 AMI IDに変更

3. Terraformの​実行

# 初期化
terraform init
# 実行計画の確認
terraform plan
# リソースの作成
terraform apply

terraform apply実行時に yes と入力してデプロイを開始します。

4. デプロイ完了の​確認

デプロイが完了すると、以下のような出力が表示されます:

Outputs:

neo4j_public_ip = "xx.xx.xx.xx"
neo4j_url = "http://xx.xx.xx.xx:7474"

5. Neo4j Browserへの​アクセス

  1. 待機時間 : インスタンス起動後、Neo4jのインストールに約5~10分かかります。
  2. アクセス : 出力されたURLをブラウザで開きます。
  3. ログイン情報
    • ユーザー名 : neo4j
    • パスワード : neo4j123

6. 動作確認

Neo4j Browserにログイン後、以下のCypherクエリでサンプルデータを作成できます。

CREATE (alice:Person {name: 'Alice'})-[:KNOWS]->(bob:Person {name: 'Bob'})RETURN alice, bob

7. リソースの​削除

検証完了後は、以下のコマンドでリソースを削除してください。

terraform destroy

注意事項

  • インスタンス起動直後はNeo4jがまだインストール中の可能性があります。
  • アクセスできない場合は5~10分待ってから再試行してください。
  • 本番環境ではセキュリティグループの設定を適切に制限してください。

まとめ

本記事では、TerraformとAWSを使用してNeo4jグラフデータベースを構築する手順をご紹介しました。
この記事が、Neo4jやAWSインフラ構築に興味を持つ方々の参考になれば幸いです。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム