【リソースマネージャー対応】さくらのクラウド上にMetabaseを構築する
Metabaseが流行ってきてますね。記事もちらほら見かけるようになりました。
- OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita
- MetabaseがRedashの苦労を吹き飛ばすくらい熱い
- Metabase BIツールをAWS Elastic Beanstalkで構築してみた - Developers.IO
- Metabaseがすごく良い - itFun.jp
- MetabaseをAzure Web App for Containersで動かしてみた
ということでさくらのクラウド上にMetabaseを構築してみました。
===>【2018/1/30追記】HTTPS対応版について記事書きました。
続・さくらのクラウド上にMetabaseを構築する【HTTPS対応版】
ドメインをお持ちの方はこちらも是非お試しください。
<=== 追記ここまで
Metabase環境構築 on さくらのクラウド
今回はさくらのクラウドのリソースマネージャーを利用して環境構築してみました。
今回の環境
今回MetabaseはDockerで動かします。Docker用のホストはRancherOSを使用します。 Metabase用のデータベースとしてPostgreSQL(さくらのクラウド上のデータベースアプライアンス)を利用します。
構築手順は以下の通りです。
- 1) サーバへのSSH用公開鍵をコンパネから登録
- 2) リソースマネージャでテンプレート作成&反映
1) サーバへのSSH用公開鍵をコンパネから登録
サーバへのSSH接続時に利用する公開鍵をコンパネなどから登録しておきます。 登録時に指定した名前を控えておいてください。
2) リソースマネージャーでテンプレート作成&反映
続いてリソースマネージャーにてテンプレートを作成します。 以下のtfファイルをコピペで登録してください。 なおtfファイルの最初の方にパスワードや先ほど登録した公開鍵の名称を指定している部分があります。 忘れずに各自で置き換えてください。
### 概要
# データベースアプライアンス(PostgreSQL)とRancherOSでMetabase実行環境を構築するテンプレート
#
# このテンプレートはRancherOS上のDockerでMetabaseを実行する構成となっています。
# Metabaseのバックエンドとしてデータベースアプライアンス(PostgreSQL)を利用します。
#
### 変数定義
locals {
#*********************************************
# パスワード/公開鍵関連(!!!要変更!!!)
#*********************************************
# サーバ管理者のパスワード
server_password = "<put-your-password-here>"
# データベース接続ユーザーのパスワード
database_password = "<put-your-password-here>"
# さくらのクラウドに登録済みの公開鍵の名称
ssh_public_key_name = "<put-your-public-key-name>"
#*********************************************
# サーバ/ディスク
#*********************************************
# サーバ名
server_name = "metabase-server"
# サーバホスト名
host_name = "${local.server_name}"
# サーバ コア数
server_core = 2
# サーバ メモリサイズ(GB)
server_memory = 4
# ディスクサイズ
disk_size = 20
#*********************************************
# ネットワーク(スイッチ/パケットフィルタ)
#*********************************************
# スイッチ名
switch_name = "metabase-internal"
# パケットフィルタ名
packet_filter_name = "metabase-filter"
#*********************************************
# データベースアプライアンス
#*********************************************
# データベースアプライアンス名
database_name = "metabase-db"
# プラン
database_plan = "30g" # 10g/30g/90g/240g
# 接続ユーザー名
database_user_name = "metabase"
# バックアップ時刻
database_backup_time = "01:00"
}
### サーバ/ディスク
# パブリックアーカイブ(OS)のID参照用のデータソース(RancherOS)
data sakuracloud_archive "rancheros" {
os_type = "rancheros"
}
# 公開鍵のID参照用のデータソース
data "sakuracloud_ssh_key" "ssh_public_key" {
name_selectors = ["${local.ssh_public_key_name}"]
}
# ディスク
resource "sakuracloud_disk" "disk" {
name = "${local.server_name}"
source_archive_id = "${data.sakuracloud_archive.rancheros.id}"
hostname = "${local.host_name}"
password = "${local.server_password}"
note_ids = ["${sakuracloud_note.provisioning.id}"]
ssh_key_ids = ["${data.sakuracloud_ssh_key.ssh_public_key.id}"]
disable_pw_auth = true
lifecycle {
ignore_changes = ["source_archive_id"]
}
}
# サーバ
resource "sakuracloud_server" "server" {
name = "${local.server_name}"
disks = ["${sakuracloud_disk.disk.id}"]
core = "${local.server_core}"
memory = "${local.server_memory}"
packet_filter_ids = ["${sakuracloud_packet_filter.filter.id}"]
additional_nics = ["${sakuracloud_switch.sw.id}"]
}
# スタートアップスクリプト(IP設定、metabaseコンテナ起動)
resource "sakuracloud_note" "provisioning" {
name = "provisioning-metabase"
class = "yaml_cloud_config"
content = <<EOF
#cloud-config
rancher:
console: default
docker:
engine: docker-17.09.1-ce
network:
interfaces:
eth1:
address: 192.168.100.10/28
dhcp: false
services:
metabase:
image: metabase/metabase:latest
ports:
- "80:3000"
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: ${local.database_user_name}
MB_DB_PASS: ${local.database_password}
MB_DB_HOST: 192.168.100.2
restart: always
EOF
}
### データベースアプライアンス
resource "sakuracloud_database" "db" {
name = "${local.database_name}"
database_type = "postgresql"
plan = "${local.database_plan}"
user_name = "${local.database_user_name}"
user_password = "${local.database_password}"
allow_networks = ["192.168.100.0/28"]
port = 5432
backup_time = "${local.database_backup_time}"
switch_id = "${sakuracloud_switch.sw.id}"
ipaddress1 = "192.168.100.2"
nw_mask_len = 28
default_route = "192.168.100.1"
}
### ネットワーク(パケットフィルタ)
resource "sakuracloud_packet_filter" "filter" {
name = "${local.packet_filter_name}"
expressions = {
protocol = "tcp"
dest_port = "22"
description = "Allow external:SSH"
}
expressions = {
protocol = "tcp"
dest_port = "80"
description = "Allow external:HTTP"
}
expressions = {
protocol = "icmp"
}
expressions = {
protocol = "fragment"
}
expressions = {
protocol = "udp"
source_port = "123"
}
expressions = {
protocol = "tcp"
dest_port = "32768-61000"
description = "Allow from server"
}
expressions = {
protocol = "udp"
dest_port = "32768-61000"
description = "Allow from server"
}
expressions = {
protocol = "ip"
allow = false
description = "Deny ALL"
}
}
### ネットワーク(スイッチ)
resource sakuracloud_switch "sw" {
name = "${local.switch_name}"
}
tfファイル編集画面で「タブ分割/統合」ボタンを押すと以下のようにtfファイルをタブで分割してわかりやすく表示してくれます。 変更すべき内容は「変数定義」タブにまとめていますので目を通しておくのがオススメです。

登録後はリソースマネージャーのコマンドから計画/反映を実行するだけです。
なお、手元の環境では2分ほどで構築完了しました。
動作確認
構築が完了したらhttp://<サーバのグローバルIP>にアクセスするとmetabaseの画面が開くはずです。

後は画面に従って初期ユーザーの作成などを行うだけです。
終わりに
Metabaseいいですね! 以上です。