💭

GrafanaをCloudRun上で起動する

2024/01/03に公開
2

記事の内容

GrafanaをCloudRun上で動作させる方法を紹介します。

対象読者

  • Grafanaを使いたいが、Kubernetesクラスターは運用したくない人

記事の長さ

1分で読めます

Grafana on CloudRun

GrafanaはKubernetesと一緒に使われることが多く、Kubernetesクラスター上でGrafanaを運用する事例をよく聞く。

一方、CloudRun上でGrafanaを起動することもできるが、それに関する記事がなかなか見つからなかったため、GrafanaをCloudRunで起動するフローをこの記事に書いていく

Dockerの作成

CloudRunでアプリケーションを動作させるためには、Dockerイメージを作成する必要がある。

そのため、まずはGrafanaアプリケーションが動作するDocker Imageを作成する。

Dockerfile

FROM grafana/grafana-enterprise

COPY ./datasources /etc/grafana/provisioning/datasources
COPY ./dashboard-settings /etc/grafana/provisioning/dashboards
COPY ./dashboards /var/lib/grafana/dashboards

上記Dockerfileを元にDocker Imageを作成する。

  • datasources
    • datasourceの設定ファイルを入れるディレクトリ
  • dashboard-settings
    • dashboardの設定ファイルを入れるディレクトリ
  • dashboards
    • dashboardのjsonファイルを入れるディレクトリ

というディレクトリ構成だ。

このディレクトリ構成や各ファイルの中身に関しては、以下の記事で解説しているので、興味がある方は読んでほしい。

https://zenn.dev/ring_belle/articles/grafana-cac-docker

Docker Build

Dockerfileができたので、Docker Buildを実行して、Docker Imageを作成する。

$ docker build . -t cloudrun-grafana

M1/M2 Macの人はこちらでBuild

$ docker build --platform linux/amd64 . -t cloudrun-grafana
$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
cloudrun-grafana latest    a6a1315e4e17   15 seconds ago   408MB

正常にDocker Imageが作成できた。

念の為、今ビルドしたDockerImageをローカル環境で実行してみる。

$ docker run -p 1111:3000 cloudrun-grafana

にて起動し、http://localhost:1111 にアクセスすると、Grafanaの初期画面が表示される。

Docker Push

Docker Imageが完成したので、次はCloudRunで実行するために、Docker ImageをGCRにPushする。

$ docker tag cloudrun-grafana gcr.io/<Project ID>/cloudrun-grafana
$ docker push gcr.io/<Project ID>/cloudrun-grafana:latest

上記コマンドでGCRにPushができた。

CloudRunを実行する

CloudRunで実行するためのDocker Imageの準備が完了したので、最後にCloudRunを実行する。

resource "google_cloud_run_v2_service" "this" {
  project  = var.project_id
  name     = "grafana-cloudrun"
  location = "asia-northeast1"
  ingress  = "INGRESS_TRAFFIC_ALL"

  template {
    containers {
      image = "gcr.io/${var.project_id}/cloudrun-grafana:latest"
    }
  }
}

data "google_iam_policy" "noauth" {
  binding {
    role    = "roles/run.invoker"
    members = ["allUsers"]
  }
}

resource "google_cloud_run_v2_service_iam_policy" "policy" {
  project     = var.project_id
  location    = "asia-northeast1"
  name        = google_cloud_run_v2_service.this.name
  policy_data = data.google_iam_policy.noauth.policy_data
}

上記のTerraformは、先ほど作ったDocker ImageをCloudRun上で動作させるためのソースだ。

これをTerraform Applyすることで、CloudRunを起動する。

$ terraform apply
google_cloud_run_v2_service.this: Creating...
google_cloud_run_v2_service.this: Still creating... [10s elapsed]
google_cloud_run_v2_service.this: Still creating... [20s elapsed]
google_cloud_run_v2_service.this: Still creating... [30s elapsed]
google_cloud_run_v2_service.this: Still creating... [40s elapsed]
google_cloud_run_v2_service.this: Still creating... [50s elapsed]
google_cloud_run_v2_service.this: Still creating... [1m0s elapsed]
google_cloud_run_v2_service.this: Still creating... [1m11s elapsed]
google_cloud_run_v2_service.this: Still creating... [1m21s elapsed]
google_cloud_run_v2_service.this: Still creating... [1m31s elapsed]
╷
│ Error: Error waiting to create Service: Error waiting for Creating Service: Error code 13, message: Revision 'grafana-cloudrun-00001-dhx' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
...
│

すると、上記のようなエラーが発生します。CloudRunはデフォルトで8080ポートで起動するためGrafanaのリッスンするポートを8080に変更しないといけません。

Grafanaの起動ポートを変更する

Dockerfile

COPY ./grafana.ini /etc/grafana/grafana.ini

grafana.init

[server]
http_port = 8080

上記設定を追加して、再度Docker BuildとDocker Pushを実行してください。

再度、terraform applyを実行します。

$ terraform apply
...

無事、CloudrunにGrafanaイメージをデプロイできました。

最後に、ブラウザからアクセスして確認します。CloudRunのコンソール画面にいくとCloudRunのURLが確認できるので、そのURLにアクセスしてください。

すると、Grafanaの管理画面にログインできます!

まとめ

今回は、GrafanaをCloudRun上で起動しました。

Dashboard・Datasourceともにソースコードで管理しているため、データベースへの接続をせずともGrafanaの運用を開始できます。

また、初期設定のため、Grafanaのログインユーザーは初期ユーザーのままで、本番運用する場合は、IAPを導入するかOAuthでログイン設定をする等の実装を行なってください。

サンプルソース

こちらに、今回作成したソースのサンプルソースを配置してあります!

https://github.com/rara-tan/zenn-grafana-gcp-cloudrun2

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion