「Metabase」が気になったので、CloudRunを使ってサクッと触れる環境を作る

<!--
title: 「Metabase」が気になったので、サクッと触れる環境を作る
tags: 
-->

## はじめに
事の発端は、上司の「Metabaseって知ってる？」という一言でした。
私は28年間生きてきて一度も聞いたことが無かったので、簡単に調べてみたのですが、
どうもオープンソースでなかなかUIUXがイケているBIツールらしい･･･。

色々記事を見てみたけど、やっぱり実際に触ってみたいなぁ〜と思ったので、
タイトルの通りサクッと触れるような環境を作ってみようと思います。

## Metabaseとは？
![0.TOP.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/5429873a-2ecc-a878-2a32-e6a9917a5212.gif)
こんな感じのBIツールです。

OSSという点に加え、コンテナイメージが配布されており導入が簡単で手軽に試すことができるほか、
SQLを書かずにマウスだけで見える化が可能だったり、データを探索し自動でグラフを生成できたりするようです。

## 今回構築する環境
以下を使って環境を構築します。
 - Google Cloud
    - Cloud Run
    - Container Registry (GCR)

正直サクッと触るだけなら、ローカルPCへインストールで良いのですが、<br>
今回は私だけでなく他のメンバーにも触ってほしいので、Google Cloud上に構築したいと思います。
**ちなみに、Google Cloud使うのはじめてです。**


:::note info
本格的に運用したい方は、追加でPostgreSQL/Mysql等のデータベース構築をオススメします。
※ 詳細は[公式ドキュメント](https://www.metabase.com/docs/latest/installation-and-operation/migrating-from-h2)を参照ください。
:::


## 環境構築開始
:::note warn
一部 実行コマンドと結果を加工しています。もしご自身で実行する場合は適宜変更してください。
  `{PROJECT-ID} : 使用するGoogle CloudのプロジェクトID `
:::

### 1. Dockerイメージの取得 → GCRへプッシュ
[公式ドキュメント](https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker)に則って、Dockerイメージを取得します。

イメージ取得のやり方にも色々ありますが、前述した通りGoogle Cloud上に環境構築しますし、せっかくならローカルPCには何もインストールせずにやりたいと思います。そう、CloudShellならね。

<details><summary>CloudShell とは？</summary>

> Cloud Shell は、**ブラウザから場所を問わずにアクセスできる、オンラインの開発および運用環境**です。gcloud コマンドライン ツールや kubectl などのユーティリティがプリロードされたオンライン ターミナルを使用して、リソースを管理できます。また、オンラインの Cloud Shell Editor を使用して、クラウドベースのアプリの開発、ビルド、デバッグ、デプロイを行うこともできます。
> 引用：[GoogleCloud｜Cloud Shell](https://cloud.google.com/shell?hl=ja)


Dockerもプリインストールされているということなので、今回にピッタリですね。
使い方は[こちら](https://cloud.google.com/shell/docs/using-cloud-shell?hl=ja)を参考にしました。
</details>



(1) CloudShellを起動、Dockerイメージをpull
```console:実行結果
$ docker pull metabase/metabase:latest
latest: Pulling from metabase/metabase
213ec9aee27d: Pull complete
4e5835cc7e6e: Pull complete
1491a19a147a: Pull complete
4c9f399c8d2a: Pull complete
99deb383aa88: Pull complete
24a999ed325b: Pull complete
Digest: sha256:527a30f88f79a90bba0951d352a9fcbdecbf5f1b011a41b30e7a074265549168
Status: Downloaded newer image for metabase/metabase:latest
docker.io/metabase/metabase:latest
```
(2) タグ付けして
```console:実行結果
$ docker tag metabase/metabase:latest gcr.io/{PROJECT-ID}/metabase:latest
```
(3) GCRへpush
```console:実行結果
$ docker push gcr.io/{PROJECT-ID}/metabase:latest
The push refers to repository [gcr.io/{PROJECT-ID}/metabase]
e057bb6a0219: Layer already exists
9217ffff0600: Layer already exists
17f4f78d8e02: Layer already exists
7b2d869ec8a3: Layer already exists
57c379a94f03: Layer already exists
994393dc58e7: Layer already exists
latest: digest: sha256:527a30f88f79a90bba0951d352a9fcbdecbf5f1b011a41b30e7a074265549168 size: 1583
```
(4) Webコンソールで確認

正しくpushできたか確認します。
Webコンソールから「Container Registry」へ移動し、さきほどpushしたイメージがあるか確認します。
![3.GCRアップロード後確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/85deb28f-f102-ad2a-ed3e-dbf3d91fcaf6.png)
↓ "metabase"をクリック
![4.GCRアップロード後確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/ad6ceec2-2cbb-a928-ffaf-61ad6f68f0a8.png)
ちゃんとpushできてますね。

### 2. Cloud Runの設定

(1) Cloud Runサービス作成
Webコンソールから「CloudRun」へ移動し、「サービスを作成」を押します。
![5.サービスの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/9cf76a76-95f4-ee6f-5275-be8148d307f9.png)
押すと、このような画面になるので、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/8bb43359-12c7-fc62-a478-b8abdeb764d4.png" width=50%>
以下の通り入力してサービスを作成します。
※ デフォルトから変更した項目のみ記載します。
| 項目名 | 入力内容 |
|:--|:--|
| コンテナイメージのURL | GCRのイメージURL |
| 自動スケーリング(インスタンス最小数) | 0 |
| 自動スケーリング(インスタンス最大数) | 1 |
| Ingress | すべてのトラフィックを許可する |
| 認証 | 未認証の呼び出しを許可 |

コンテナ設定
| 項目名 | 入力内容 |
|:--|:--|
| 全般 (コンテナポート) | **3000** |
| 容量 (メモリ) |  **1GiB** 〜|

:::note info
コンテナポート、メモリ設定共にデフォルトでは正常に動かないので変更が必要です。
・コンテナポート：Docker Image側でport:3000に設定されているのでそちらに揃えます。
・メモリ：最低でも1GiBはないと、サービス作成時にメモリ上限超過でエラーになります。 
:::

入力したら「作成」を押してデプロイ完了するまで待ちます・・・。
デプロイ成功すると以下のようにURLが発行されるので、アクセスしてみると、
![7.デプロイ完了後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/5efeb5e7-1605-bff9-a368-5559374de137.png)
↓
![8.metabase起動画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/3a292189-254e-ba7d-daca-434f607de87d.png)
動いた！！！！
あとはスタートアップ画面に沿って、言語設定やアカウントの作成などを設定します。

:::note info
BigQueryやMysqlなどのデータベースと接続することもできますが、
今回は付属しているサンプルデータベースを使用するので、スキップしました。 
:::
![9.metabaseホーム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974422/cc4cf497-bea6-638a-7dc6-30320bf0f5ad.png)
というわけで、サクッと環境構築できました。

結構長くなってしまったので今回はここまで。
次回は、具体的にMetabaseを触ってみてどんなことできるか？を書きたいと思います。


つづく！

## 参考にした文献

 - [Metabase公式ドキュメント](https://www.metabase.com/docs/latest/)
     - [Running Metabase on Docker](https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker)
 - [Google Cloud公式ドキュメント](https://cloud.google.com/docs?hl=ja)
     -  [イメージの push と pull](https://cloud.google.com/container-registry/docs/pushing-and-pulling?hl=ja)
     -  [Cloud Shell を使用する](https://cloud.google.com/shell/docs/using-cloud-shell?hl=ja)
   - [Cloud Shell の仕組み](https://cloud.google.com/shell/docs/how-cloud-shell-works?hl=ja)