データ分析基盤の重要性は近年増す一方ですが、その分析基盤要素の一つにデータ可視化ツール、いわゆる BI ツールがあります。
あらゆる BI ツールの中で、その見た目と使いやすさから Metabase という OSS BI ツールに注目しました。
Metabase の素敵さについては、以下記事のリンクを張らせていただきます。
今回は AKS 上に簡単な Metabase 環境を構築してみたいと思います。
構成図
本記事では上図の環境を構築したいと思います。
Metabase は Docker Hub に[公式イメージ] (https://hub.docker.com/r/metabase/metabase)があるので、それを AKS 上で動かします。
ユーザは Azure Load Balancer (Kubernetes Service) 経由で Pod に http アクセスします。
Metabase ではユーザ情報などの設定情報を外部のデータベース (アプリケーション DB) に格納できます (これがないと Pod が削除されるたびに設定が初期化されてしまいます)。
そのアプリケーション DB として、Azure Database for PostgreSQL を作成します。
また、Pod から PostgreSQL へセキュアに接続するために、Private Endpoint 経由で接続するように構成します。
それでは、構築していきましょう。
AKS の作成
まずは AKS を作成します。
公式ドキュメントのクイックスタートを参考に Azure Portal から作成しました。
今回作成した Kubernetes バージョンは 1.20.9 です。
なお、今回は試してみることが目的なので、プリセット構成
および プライマリノードプールの ノード数
は以下の通りとしています。
- プリセット構成:Dev/Test
- ノード数 : 1
その他の項目は、デフォルトで作成しました。
Azure Database for PostgreSQL の作成
続いて、Metabase の設定情報を格納するアプリケーション DB として、Azure Database for PostgreSQL を作成します。
こちらも公式ドキュメントのクイックスタートを参考に作成します。
ただし、コンピューティングとストレージ
項目では Basic 以外 を選択してください。
Basic では次の手順であるプライベートエンドポイント接続の設定ができません。今回は汎用目的
を選択します。
プライベートエンドポイント接続の設定
AKS の仮想ネットワークから PostgreSQL にセキュアに接続するために、プライベートエンドポイント接続の設定を行います。
こちらは以下の公式ドキュメントを参考に設定しました。
マニフェストファイルの作成
Metabase 環境を AKS 上に構築するためのマニフェストファイルを作成します。
コンテナの環境変数定義 (env
) にはアプリケーション DB となる PostgreSQL の情報を設定します。
MB_DB_DBNAME
には PostgreSQL の初期データベースである postgres
を指定しました。
MB_DB_USER
MB_DB_HOST
は Azure Database for PostgreSQL のリソース概要画面にて確認可能です。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: metabase-deployment
labels:
app: metabase
spec:
replicas: 3
selector:
matchLabels:
app: metabase
template:
metadata:
labels:
app: metabase
spec:
containers:
- name: metabase
image: metabase/metabase:latest
env:
- name: MB_DB_TYPE
value: postgres
- name: MB_DB_DBNAME
value: postgres
- name: MB_DB_PORT
value: "5432"
- name: MB_DB_USER
value: <管理者ユーザ名>
- name: MB_DB_PASS
value: <パスワード>
- name: MB_DB_HOST
value: <サーバー名>
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: metabase
spec:
type: LoadBalancer
selector:
app: metabase
ports:
- port: 3000
targetPort: 3000
もちろん本来は、ポッドのリソース要求・制限の設定や設定情報の外出しなどが必要ですが、今回は試してみることが目的なので上記は必要最小限の設定にとどめています。
デプロイ
いよいよ AKS へのデプロイです。
[Azure Cloud Shell] (https://shell.azure.com/) を使うと AKS (Kubernetes) を扱うためのツールがインストールされているので簡単です。
次のコマンドでアクセス資格情報を取得し、AKS クラスターへ接続します。
az aks get-credentials --resource-group <リソースグループ名> --name <AKS 名>
その後、先ほど作成したマニフェストファイルを現在のディレクトリに格納し、以下コマンドを実行します。
kubectl apply -f metabase.yaml
これで環境が構築できました。
デプロイが完了したら、以下コマンドなどで Service の 外部 IP を確認し、ポート番号 3000 に http アクセスします。
kubectl get service metabase
また、アプリケーション DB として PostgreSQL を接続しているので、例えば以下コマンドで Pod を消したとしても、設定情報は残ったままです。
kubectl delete pod <Pod 名>
最後に
AKS のノードや PostgreSQL、Private Endpoint などで課金が発生し続けるので、不必要になったらリソースはすべて削除しましょう。
参考資料