Skip to content

Apache Superset の構築 ​

第2版作成 最終更新 (日本時間)

Apache Superset は OSS のデータ可視化・BI プラットフォームです。直感的な UI でダッシュボードやチャートを作成でき、多様なデータソースに接続できます。 このページでは、Superset を Azure の PaaS 上に構築する手順をまとめます。Superset 本体は App Service の Linux コンテナで動かし、メタデータ DB に Azure Database for PostgreSQL、セッション・キャッシュに Azure Cache for Redis を使います。設定ファイル superset_config.py はカスタム Docker イメージに含め、Azure Container Registry(ACR)経由で App Service に配置します。

構成 ​

図を読み込み中…

コンポーネントAzure サービス役割
Superset 本体App Service (Linux コンテナ)Web UI・API サーバー
メタデータ DBAzure Database for PostgreSQLダッシュボード定義・ユーザー情報の保存
セッション/キャッシュAzure Cache for Redisセッション管理・クエリキャッシュ

構築の流れは次のとおりです。

図を読み込み中…

事前準備 ​

  • Azure CLI(az コマンド)
  • Azure サブスクリプション
bash
az group create \
  --name rg-superset \
  --location japaneast

Azure Database for PostgreSQL ​

フレキシブルサーバーを作成し、Superset 用のデータベースを作ります。App Service からの接続を許可するため、Azure サービスからのアクセスを有効にします。

bash
# サーバーの作成
az postgres flexible-server create \
  --resource-group rg-superset \
  --name psql-superset \
  --location japaneast \
  --admin-user supersetadmin \
  --admin-password "<パスワード>" \
  --sku-name Standard_B1ms \
  --tier Burstable \
  --version 16 \
  --storage-size 32

# データベースの作成
az postgres flexible-server db create \
  --resource-group rg-superset \
  --server-name psql-superset \
  --database-name superset

# ファイアウォール設定
az postgres flexible-server firewall-rule create \
  --resource-group rg-superset \
  --name psql-superset \
  --rule-name AllowAllAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

WARNING

0.0.0.0 から 0.0.0.0 へのルールは「Azure サービスへのアクセスを許可」を意味します。本番環境では App Service の送信 IP を固定し、IP 制限を厳密に設定してください。

Azure Cache for Redis ​

インスタンスを作成し、後で App Service の環境変数に設定するアクセスキーを取得しておきます。

bash
az redis create \
  --resource-group rg-superset \
  --name redis-superset \
  --location japaneast \
  --sku Basic \
  --vm-size c0

az redis list-keys \
  --resource-group rg-superset \
  --name redis-superset \
  --query primaryKey \
  --output tsv

App Service ​

プランと Web アプリの作成 ​

Linux コンテナ用のプランを作成し、公式 Docker イメージ(apache/superset)で Web アプリを作ります。

bash
az appservice plan create \
  --resource-group rg-superset \
  --name plan-superset \
  --location japaneast \
  --is-linux \
  --sku B2

az webapp create \
  --resource-group rg-superset \
  --plan plan-superset \
  --name app-superset \
  --deployment-container-image-name apache/superset:latest

環境変数 ​

Superset の動作に必要な環境変数をアプリケーション設定として登録します。

変数名値
DATABASE_URLpostgresql+psycopg2://supersetadmin:<パスワード>@psql-superset.postgres.database.azure.com/superset
REDIS_URLrediss://:<Redisアクセスキー>@redis-superset.redis.cache.windows.net:6380/0
SECRET_KEY任意のランダム文字列(32 文字以上推奨)
bash
az webapp config appsettings set \
  --resource-group rg-superset \
  --name app-superset \
  --settings \
    DATABASE_URL="postgresql+psycopg2://supersetadmin:<パスワード>@psql-superset.postgres.database.azure.com/superset" \
    REDIS_URL="rediss://:<Redisアクセスキー>@redis-superset.redis.cache.windows.net:6380/0" \
    SECRET_KEY="<ランダムな秘密鍵>"

INFO

Azure Cache for Redis への接続は TLS が必須のため、スキームは redis:// ではなく rediss://(s 付き)を使います。ポートも 6379 ではなく 6380 になります。

設定ファイル superset_config.py ​

PostgreSQL と Redis を使う設定を記述します。値はすべて上の環境変数から読みます。

python
import os

# データベース接続
SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL")

# Redis キャッシュ設定
CACHE_CONFIG = {
    "CACHE_TYPE": "RedisCache",
    "CACHE_DEFAULT_TIMEOUT": 300,
    "CACHE_KEY_PREFIX": "superset_",
    "CACHE_REDIS_URL": os.environ.get("REDIS_URL"),
}

# セルリー(非同期タスク)設定
class CeleryConfig:
    broker_url = os.environ.get("REDIS_URL")
    result_backend = os.environ.get("REDIS_URL")

CELERY_CONFIG = CeleryConfig

# セッション設定
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = "Lax"

# Superset のシークレットキー
SECRET_KEY = os.environ.get("SECRET_KEY")

カスタムイメージで設定ファイルを渡す ​

設定ファイルをコンテナに渡すには、カスタム Docker イメージを作るのが最もシンプルです。

dockerfile
FROM apache/superset:latest

USER root
COPY superset_config.py /app/pythonpath/superset_config.py
USER superset

ビルドしたイメージを ACR に Push し、App Service で使います。

bash
# ACR の作成
az acr create \
  --resource-group rg-superset \
  --name acrsuperset \
  --sku Basic

# Docker イメージのビルドと Push
az acr build \
  --registry acrsuperset \
  --image superset-custom:latest .

# App Service でカスタムイメージを使用
az webapp config container set \
  --resource-group rg-superset \
  --name app-superset \
  --docker-custom-image-name acrsuperset.azurecr.io/superset-custom:latest \
  --docker-registry-server-url https://acrsuperset.azurecr.io

App Service から ACR へのアクセスには、マネージド ID を使うのがベストプラクティスです。

bash
# システム割り当てマネージド ID を有効化
az webapp identity assign \
  --resource-group rg-superset \
  --name app-superset

# ACR の AcrPull ロールを付与
PRINCIPAL_ID=$(az webapp identity show \
  --resource-group rg-superset \
  --name app-superset \
  --query principalId \
  --output tsv)

ACR_ID=$(az acr show \
  --resource-group rg-superset \
  --name acrsuperset \
  --query id \
  --output tsv)

az role assignment create \
  --assignee $PRINCIPAL_ID \
  --role AcrPull \
  --scope $ACR_ID

Superset の初期設定 ​

App Service の SSH コンソール(Azure Portal → App Service → SSH)または az webapp ssh コマンドで接続し、初期化コマンドを実行します。

bash
# データベースのマイグレーション
superset db upgrade

# 初期データのロード
superset init

# 管理者ユーザーの作成
superset fab create-admin \
  --username admin \
  --firstname Admin \
  --lastname User \
  --email admin@example.com \
  --password "<管理者パスワード>"

App Service の URL(https://app-superset.azurewebsites.net)にアクセスし、作成した管理者アカウントでログインできることを確認します。ログイン後、「Settings → Database Connections」からデータソースを追加し、ダッシュボードを作成できれば構築完了です。

本番運用に向けて検討すること ​

  • App Service のスケールアップ・スケールアウト設定
  • PostgreSQL・Redis のファイアウォール規則の厳格化
  • VNet 統合による通信の閉域化
  • Key Vault を使ったシークレット管理
  • Celery Worker の追加(非同期クエリの実行)

関連ページ ​

変更履歴

第2版記事のファイル名に並び順の番号を付け、元記事リンクを frontmatter の sources に移行
第1版「外部連携・AI」に NocoDB・Apache Superset・POP 受信を追加し、Fess の Azure 構築と Chatwork ログ検索を追記