はじめに
Apache Superset は OSS のデータ可視化・BI プラットフォームです。直感的な UI でダッシュボードやチャートを作成でき、多様なデータソースに接続できます。
本記事では、Azure 上に Apache Superset を構築する手順を紹介します。構成は以下の通りです。
- Azure App Service(Web アプリホスティング)
- Azure Database for PostgreSQL(Superset のメタデータ DB)
- Azure Cache for Redis(セッションキャッシュ)
構成概要
| コンポーネント | Azure サービス | 役割 |
|---|---|---|
| Superset 本体 | App Service (Linux コンテナ) | Web UI・API サーバー |
| メタデータ DB | Azure Database for PostgreSQL | ダッシュボード定義・ユーザー情報の保存 |
| セッション/キャッシュ | Azure Cache for Redis | セッション管理・クエリキャッシュ |
事前準備
必要なツール
- Azure CLI(
azコマンド) - Azure サブスクリプション
リソースグループの作成
まずリソースグループを作成します。
az group create \
--name rg-superset \
--location japaneast
Azure Database for PostgreSQL の設定
サーバーの作成
フレキシブルサーバーを作成します。
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
データベースの作成
Superset 用のデータベースを作成します。
az postgres flexible-server db create \
--resource-group rg-superset \
--server-name psql-superset \
--database-name superset
ファイアウォール設定
App Service からの接続を許可するため、Azure サービスからのアクセスを有効にします。
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
0.0.0.0 から 0.0.0.0 へのルールは「Azure サービスへのアクセスを許可」を意味します。本番環境では App Service の送信 IP を固定し、IP 制限を厳密に設定してください。
Azure Cache for Redis の設定
Redis インスタンスの作成
az redis create \
--resource-group rg-superset \
--name redis-superset \
--location japaneast \
--sku Basic \
--vm-size c0
アクセスキーの取得
後で App Service の環境変数に設定するため、アクセスキーを取得しておきます。
az redis list-keys \
--resource-group rg-superset \
--name redis-superset \
--query primaryKey \
--output tsv
App Service の設定
App Service Plan の作成
Linux コンテナ用のプランを作成します。
az appservice plan create \
--resource-group rg-superset \
--name plan-superset \
--location japaneast \
--is-linux \
--sku B2
Web アプリの作成
Apache Superset の公式 Docker イメージ(apache/superset)を使用します。
az webapp create \
--resource-group rg-superset \
--plan plan-superset \
--name app-superset \
--deployment-container-image-name apache/superset:latest
環境変数の設定
Superset の動作に必要な環境変数をアプリケーション設定として登録します。
各接続情報は以下の形式で指定します。
| 変数名 | 値 |
|---|---|
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 |
任意のランダム文字列(32文字以上推奨) |
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="<ランダムな秘密鍵>"
Azure Cache for Redis への接続は TLS が必須のため、スキームは redis:// ではなく rediss://(s 付き)を使用します。ポートも 6379 ではなく 6380 になります。
Superset 設定ファイルの準備
superset_config.py を作成し、PostgreSQL と Redis を使用する設定を記述します。
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 イメージを作成する方法が最もシンプルです。
FROM apache/superset:latest
USER root
COPY superset_config.py /app/pythonpath/superset_config.py
USER superset
ビルドした Docker イメージを Azure Container Registry(ACR)に Push し、App Service で使用します。
# 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 を使用するのがベストプラクティスです。
# システム割り当てマネージド 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 コマンドで接続し、初期化コマンドを実行します。
# データベースのマイグレーション
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」からデータソースを追加し、ダッシュボードの作成が行えれば構築完了です。
まとめ
本記事では、Azure 上に Apache Superset を構築する手順を紹介しました。
- App Service(Linux コンテナ)で Superset を動かす
- Azure Database for PostgreSQL をメタデータ DB として使用する
- Azure Cache for Redis でセッション管理とキャッシュを行う
本番運用に向けては、以下の点も検討してみてください。
- App Service のスケールアップ・スケールアウト設定
- PostgreSQL・Redis のファイアウォール規則の厳格化
- VNet 統合による通信の閉域化
- Key Vault を使ったシークレット管理
- Celery Worker の追加(非同期クエリの実行)