背景
- プロダクトの監視に安くダッシュボードを作りたい
- 運用コストをあんまり上げたくない
=> (フル)マネージドな環境でGrafanaを立てればええやん
TL;DR
前提
- GCPのプロジェクトがセットアップされている
構築手順
- Terraformを記述する
- Deployする
以上
Terraformの環境セットアップ
terraform --help
コマンドが使えない人向け。
公式に従ってインストールするのも良いけれど、バージョン管理が面倒だと思うので、tfenv
を入れる。
GitHubに記載の手順に従ってインストールする。
Macなので brew install tfenv
を実行すれば良い。
その後、tfenv install latest && tfenv use latest
を実行すると terraform --help
が使えるようになる。
.tfファイルを実装する
必要になるのは大きく分けて2つ。
- GCPの定義を書いた.tfファイル
- Grafanaの定義を書いた.tfファイル
またそれらのProviderを管理するためのファイルの3つで管理すると見通しが良い。
GCPの定義
作成する必要があるのは、
3つ目はCloud SQLをPublicなネットワークに公開する覚悟がある人は不要だと思う。
私は自信がないのでVPCを貼ってその上で接続するようにしている(というか参考にしたものがそうだったのでそれに乗っかっただけ)。
詳細は 参考先のソース を見てもらったほうが早い。
複数人で運用する想定なら、tfstatをGCSにあげて管理するのも考えて良いかも。 その場合は以下追記する。
terraform { backend "gcs" { bucket = "事前に手作業で用意したバケット名" prefix = "バケット内のパス(必要があれば)" } }
terraform"を"管理するためのリソースはterraform外で管理されるべき、というどこかで聞き覚えたものに従ってるので手作業が必要。
(元ネタ誰か分かったら教えてほしいです、、、)
Deployする
Service Accountでの適用が望ましいため、GCP上でService Accountおよびキーの払い出しを行い、
GOOGLE_APPLICATION_CREDENTIALS
に取得した鍵ファイル(.json)のパスを指定してあげる。
その上で、terraform apply
を実施する。
defaultが未定義な変数に関しては対話式で聞かれるので回答してあげればOK。
初回はDB構築等も含まれるので5分以上かかるかも。
以上。
ハマりポイント
- Service Accountの権限
必要な権限のみを割り当てるべき、という大原則は認識しているものの、洗い出しが面倒だったのでオーナー権限付けた。
特にネットワークの構成あたりで死んでたのはこれで解決した。編集者じゃ足りない模様。
- Cloud SQLの削除に失敗して
terraform destroy
もterraform init
も通らんくなる
コンソールから残ってしまったリソースを削除した上で、tfstatファイルも削除する。
と、terraform apply
が通るようになる。
ボツにした構成
- GKEに立てる
- GCEにインスタンスを立てて、その上でDocker Composeで拡張性を考慮した構成にする
GKEに立てて上げるほどのものでもなかったので、 && キャッチアップコストが高すぎたので却下
GKEに慣れている人は多分サクッと構築出来るんだと思う。
GCEにインスタンス立ててやるのはSSL証明書の準備やロードバランサの構成等を考えるのが面倒だったので却下。
またContainer Optimized OSの癖が強すぎるのもあったw