MetabaseをAzure Web App for Containersで動かしてみた
Kibanaやre:dashなどデータを良い感じに可視化してくれるツールのなかで、Metabaseもいいぞという記事に目がとまりました。
OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita
MetabaseがRedashの苦労を吹き飛ばすくらい熱い - Qiita
ということで、早速試してみたいと思います。
インストール
インストールにはいくつか方法があるようで、
https://www.metabase.com/docs/latest/operations-guide/start.html#installing-and-running-metabase
今回はDockerで試してみます。Dockerはいいぞ。
Docker
Dockerインストール済みの環境なら一撃起動です。
$ docker run -d -p 3000:3000 -v ~/metabase-data:/metabase-data -e "MB_DB_FILE=/metabase-data/metabase.db" --name metabase metabase/metabase
コンテナーが起動したら http://localhost:3000
へのアクセスします。Metabaseに必要なDBもよしなに準備してくれます。安心してください、DBデータ永続化できますよ。
AzureにMetabaseをデプロイする
ローカル環境でMetabaseが動くことが確認できました。次はサーバーにデプロイします。AzureでDockerのWebアプリを動かすといえばこれ、Web App for ContainersをMetabaseのデプロイ先にします。
Web App for Containers
Cloud Shell便利ですね。
- リソースグループ作成
- Linux App Seriveプラン作成
- Web App for Container作成
$ az group create --name <resource-group> --location japaneast $ az appservice plan create --name <plan-name> --resource-group <resource-group> --sku B1 --is-linux $ az webapp create --resource-group <resource-group> --plan <plan-name> --name <webapp-name> --deployment-container-image-name metabase/metabase
次にWeb Appsへアプリケーション設定を行います。
- DBデータを永続化したいので、Web Appsへ永続化を指定します。
WEBSITES_ENABLE_APP_SERVICE_STORAGE=true
にして、/home
配下をマウントします。 - Metabaseイメージはポート3000を使用するので、
WEBSITES_PORT
でWeb Appsへ使用するポートを指定します。
$ az webapp config appsettings set --resource-group <resource-group> --name <webapp-name> --setting WEBSITES_ENABLE_APP_SERVICE_STORAGE=true MB_DB_FILE=/home/metabase-data/metabase.db WEBSITES_PORT=3000
https://<webapp-name>.azurewebsites.net
へのアクセスします。
・
・
・
アクセスできない(泣)
App ServiceプランをB1とケチったせいですね。とりあえず札束で殴ってみます。
$ az appservice plan update --resource-group <resource-group> --name <plan-name> --sku S3
再度 https://<webapp-name>.azurewebsites.net
へのアクセスを試みます。
起動しました。
DBを外部参照へ変更
札束効果(スケールアップ)によりアクセスできるようになりましたが、お試しにしては懐に優しくない・・・。パフォーマンス改善のためMetabaseがローカルに持つDBを外部委託してみます。MetadabaはPostgresSQLが利用できるようなので、Azure Database for PostgresSQLに外部委託します。
Azure Database for PostgresSQL
Azure Database for PostgresSQLを作成します。
$ az postgres server create --resource-group <resource-group> --name <postgres-name> --admin-user <user> --admin-password <password> --performance-tier Basic --compute-units 50 --storage-size 51200 --version 9.6
次にAzure Database for PostgresSQLのファイアウォールを設定します。ファイアウォールにはWeb AppsのIPアドレスを指定したいのですが、Web AppsからOut方向のIPアドレスは固定できない?ようなので、今回は全解放で設定します(ご利用は計画的に)。
$ az postgres server firewall-rule create --resource-group <resource-group> --server <postgres-name> --name AllowAllIps --start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255
構築したDBへpsqlやpgAdmin等で接続して、Metabase用のロールmetabase
とデータベースmetabase
を追加します。
key | value |
---|---|
DBホスト | <postgres-name>.postgres.database.azure.com |
DBユーザー名 | <user>@<postgres-name> |
DBパスワード | <password> |
〜PostgresSQLへの追加手順省略〜
DB周りの作業が終わったのでMetabaseのDBをAzure Database for PostgresSQLへ変更します。
- マウント設定
MB_DB_FILE
を削除 - 接続文字列
MB_DB_CONNECTION_URI
を設定
PostgresSQLへSSL接続をするには、MB_DB_CONNECTION_URI
で指定する必要があるようです。
Connecting to postgres metabase db over ssl · Issue #3296 · metabase/metabase · GitHub
$ az webapp config appsettings delete --resource-group <resource-group> --name <webapp-name> --setting-names MB_DB_FILE $ az webapp config appsettings set --resource-group <resource-group> --name <webapp-name> --settings "MB_DB_CONNECTION_URI=postgresql://<postgres-name>.postgres.database.azure.com:5432/metabase?user=<user>@<postgres-name>&password=<password>&ssl=true"
https://<webapp-name>.azurewebsites.net
へのアクセスできれば完了。
App Serviceプランを元に戻してみます。
$ az appservice plan update --resource-group <resource-group> --name <plan-name> --sku B1
メモリ不足感はありますが、動いてくれてるのでOKとしましょう。
いくら?
実際Metabaseを構築するとしてもステージング環境などの空いてる所にMetabaseを同居させたりして、Metabase専用を作る機会は少なそう。
- Web Apps S3サイズで約¥38,696/月
- Web Apps B1サイズ + Azure Database for PostgresSQL Basicサイズで約¥9,821/月
Azure Database for PostgresSQLと組み合わせた方が安く上げられました。構築や運用の手間(コスト)、その辺を全部丸投げできるPaaSは楽ちんですね( ˘ω˘)
それではよい、Metabaseライフを。
- 作者: 久森達郎、真壁徹、大田昌幸、藤本浩介、佐藤直生、安納順一、松崎剛、高添修,日本マイクロソフト株式会社
- 出版社/メーカー: 日経BP社
- 発売日: 2017/11/17
- メディア: 単行本
- この商品を含むブログ (1件) を見る