kakakakakku blog

Weekly Tech Blog: Keep Learning!

Terraform バックエンド「Stategraph」の Quickstart を試す

Terraform のステートをデータベースで管理して tfstate 管理のボトルネック解消を目指す Stategraph という新プロダクトがある.ウェブサイトに書いてある Plans in seconds, not minutes はインパクトがある🔥2026年2月25日に開催された Stategraph Demo Day に参加して興味を持った.

なお tfstate 管理以外にも「並列 apply」「インベントリ」「MQL クエリ」「ドリフト検出」など Terraform プロジェクトであると便利な機能がいくつもある.詳しくはドキュメント参照❗️

stategraph.com

Quickstart (Docker Compose)

まずは Docker Compose ベースの Stategraph で Quickstart を試してみる.

stategraph.com

stategraph.com

1. Create a project directory

$ mkdir stategraph && cd stategraph

2. Create the docker-compose.yml file

ドキュメントでは docker-compose.yml になってるけど,現時点で推奨される compose.yaml にした.Docker Compose で Stategraph と PostgreSQL のコンテナが立ち上がるようになっていた.

services:
  db:
    image: postgres:17-alpine
    user: postgres
    environment:
      POSTGRES_PASSWORD: "stategraph"
      POSTGRES_USER: "stategraph"
      POSTGRES_DB: "stategraph"
    healthcheck:
      test: ["CMD", "pg_isready", "-d", "stategraph", "-U", "stategraph"]
      interval: 3s
      timeout: 3s
      retries: 5
    volumes:
      - db:/var/lib/postgresql/data/
    networks:
      - stategraph

  server:
    image: ghcr.io/stategraph/stategraph-server:latest
    environment:
      # Database configuration
      DB_HOST: "db"
      DB_PORT: "5432"
      DB_USER: "stategraph"
      DB_PASS: "stategraph"
      DB_NAME: "stategraph"

      # Required: Your public URL
      STATEGRAPH_UI_BASE: "http://localhost:8080"
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health/live"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 120s
    depends_on:
      db:
        condition: service_healthy
    networks:
      - stategraph

networks:
  stategraph:

volumes:
  db:

3. Start Stategraph

$ docker compose up -d
 ✔ Network stategraph_stategraph  Created
 ✔ Volume stategraph_db           Created
 ✔ Container stategraph-db-1      Healthy
 ✔ Container stategraph-server-1  Started

4. Verify the deployment

ちゃんと起動してそう👌

$ docker compose ps
NAME                  IMAGE                                         COMMAND                  SERVICE   CREATED              STATUS                        PORTS
stategraph-db-1       postgres:17-alpine                            "docker-entrypoint.s…"   db        About a minute ago   Up About a minute (healthy)   5432/tcp
stategraph-server-1   ghcr.io/stategraph/stategraph-server:latest   "runsvdir /etc/servi…"   server    About a minute ago   Up About a minute (healthy)   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp

$ curl http://localhost:8080/health/live
ok
$ curl http://localhost:8080/health/ready

5. Access the UI

http://localhost:8080 にアクセスするとライセンスキーの入力を求められる.今回はメールアドレスを登録すると Your Stategraph License Key というメールが届いてライセンスキーを取得できた.

そしてライセンスキーを入力すると Stategraph の管理画面(ローカル)に入れた❗️

Quickstart (State Backend)

次に Terraform 側の設定に進む.

stategraph.com

まずは Stategraph CLIstategraph コマンド)をインストールしておく.

stategraph.com

$ brew tap stategraph/stategraph
$ brew install stategraph

Step 1: Create an API Key

Stategraph の管理画面で API キーを発行して環境変数に設定する.

$ export TF_HTTP_USERNAME="session"
$ export TF_HTTP_PASSWORD="xxxxx"

Step 2: Create a State

次に stategraph states create コマンドでステートを作って,レスポンスに含まれる group_id をコピーしておく.

$ export STATEGRAPH_API_BASE="http://localhost:8080"
$ export STATEGRAPH_API_KEY="$TF_HTTP_PASSWORD"

$ stategraph states create --tenant xxxxx --name "sandbox-stategraph"
{
  "created_at": "2026-02-27T02:14:25Z",
  "group_id": "xxxxx",
  "id": "xxxxx",
  "name": "sandbox-stategraph",
  "workspace": "default"
}

Step 3: Configure Terraform Backend

そして group_id 付きの URL を backend.tf の http バックエンドに設定すれば OK👌

terraform {
  backend "http" {
    address = "http://localhost:8080/api/v1/states/backend/xxxxx"
  }
}

Step 4: Initialize Terraform

あとは適当に main.tf を実装しておく.今回はサンプルとして Amazon S3 バケットと Amazon SQS キューをデプロイする.

  • aws_s3_bucket
  • aws_s3_bucket_versioning
  • aws_sqs_queue
resource "aws_s3_bucket" "stategraph" {
  bucket = "kakakakakku-sandbox-stategraph"
}

resource "aws_s3_bucket_versioning" "stategraph" {
  bucket = aws_s3_bucket.stategraph.id

  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_sqs_queue" "stategraph" {
  name = "kakakakakku-sandbox-stategraph"
}

そして init を実行する.

$ terraform init

Step 5: Verify

あとは通常通りに planapply を実行すると AWS アカウントに Amazon S3 バケットと Amazon SQS キューをデプロイできた.

$ terraform plan
$ terraform apply

ここで Stategraph の管理画面で States を確認するとリソースを確認できた❗️

ちなみに Stategraph の管理画面で Download ボタンを押すと sandbox-stategraph.tfstate を取得できた.これならもし Stategraph をやめて S3 バックエンドに戻るっていう場合も安心できそう.

MQL

Stategraph では MQL というクエリ言語を使ってステートに対してクエリを実行できる.

stategraph.com

試してみたクエリ1

SELECT address, attributes FROM instances LIMIT 10

試してみたクエリ2

SELECT address, name, type, mode FROM resources
WHERE type = 'aws_s3_bucket'

まとめ

Stategraph の Quickstart を試してみた❗️Stategraph を使うイメージが掴めて良かった.しかし Stategraph の強みである「高速な plan 実行」などは体験できてなく,もう少し規模の大きな Terraform プロジェクトが必要になりそう.

有料プランに切り替えれば他の機能も使えるらしく気になる👀

stategraph.com

引き続き Stategraph のアップデートを追いかけていこうと思う \( 'ω')/

Stategraph Demo Day

2026年2月25日に開催された Stategraph Demo Day の動画も公開されているので Stategraph の公式デモを見るならこちらから❗️

www.youtube.com

関連ポスト