こんにちは!@riaf です。
オトバンクでは、サービスの各種データの可視化に Metabase を利用しています。 また、主に Google Cloud を利用しているので、GCP で運用したく、現在は Google App Engine 上で Metabase を運用しています。
設定ファイルを書いておくだけでメンテナンスが非常に楽、というかほぼ必要ないのでとても良いのでオススメです。 (と書いてますが、挙動がおかしい時の調査とかは多少めんどくさい面もあります)
ちなみに、Metabase を GAE で動かそうとしている人たちは一応いるみたいで、検索するとそのような GitHub リポジトリが出てくるっちゃ出てくるんですが、最新のバージョンではそれだけで動かないものしか見つけられませんでした。
使用するのは
- Google App Engine Flexible Environment
- Google Cloud SQL
です。
app.yaml
は以下のようにしました
runtime: custom env: flex manual_scaling: instances: 1 resources: cpu: 2 memory_gb: 4 beta_settings: cloud_sql_instances: INSTANCE_CONNECTION_NAME=tcp:3306
Metabase は、複数インスタンスでの動作は非推奨ということなので、manual_scaling
で 1 インスタンスのみ起動するようにしています。
その代わり、resources
の所で必要なだけスケールアップしてあげるといいかなと思います。この例ではひとまずメモリを 4 GB にしておきました。割とメモリは食います。
CloudSQL を利用するため、INSTANCE_CONNECTION_NAME
は各自環境に合わせて設定してください。
次に Dockerfile
を用意します。例えばこんな感じです。
(弊社の環境ではもう少し複雑なイメージを作っていますが、おそらく最低限にするとこうなると思います)
FROM gcr.io/google-appengine/openjdk:8 RUN \ apt-get -q update \ && apt-get -y -q --no-install-recommends install \ openjdk-8-jre=8'*' \ && apt-get clean \ && rm /var/lib/apt/lists/*_* # GAE は 8080 に繋ぎます ENV MB_JETTY_PORT 8080 # GAE Flexible で TCP 接続するために 172.17.0.1 に接続します ( `beta_settings.cloud_sql_instances` と対応してます) ENV MB_DB_CONNECTION_URI mysql://{DB_USER}:{DB_PASSWORD}@172.17.0.1:3306/{DB_NAME}?charset=utf8mb4 ADD http://downloads.metabase.com/v0.30.4/metabase.jar $APP_DESTINATION
ちょっとだけ補足すると、GAE に用意されている gcr.io/google-appengine/openjdk:8
では、OpenJDK の Headless 版がインストールされているので、そのままでは Slack への通知でエラーが発生します。それを回避するために Headless じゃない JRE のインストールをしています。
公式では Heroku へのセットアップがボタン一つで済むようになっていたりもするので、この機会にぜひ皆さんも Metabase を試してみてください!そして、便利な活用方法あればぜひ教えていただけると ;D
それにしても、GAE + IAP (記事で触れてない!!) の組み合わせは本当にいいですね。次は Crowi を GCP に乗せたいなあ!