0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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 を使用する設定を記述します。

superset_config.py
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

ビルドした 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 の追加(非同期クエリの実行)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?