在将现有的GCP环境转换为Terraform时所做的事情备忘录
前提 tí)
- terraform 初心者
背景 – Background
-
- 今あるGCP環境をTerraform化したい
- 環境は以下のような感じ
做过的事情
地球改造者 (dì qiú zhě)
terraformer というツールを使うと、既存のGCP環境をtfファイルに落としてくれるらしいので、これを使った
結論からいうと非常に役立った。ただ、複数環境構築などをしたい場合、インポートしたそのままでは使えないので、環境依存の項目値は適宜variablesに切り出す、などが必要だった。
あと、cloud runなどは一部対応していないサービスもあった
使用Terraform导入
-
- terraformerが対応していないものは、terraformコマンドで、terraform importというものがあるのでこれを使用した
-
- ただしこれはtfファイルではなく、tfstateファイルを吐き出すので、そのままでは使えない
- 参考にするだけ
对于state管理的处理方式是什么?
-
- 調べた感じ以下のようなパターンがあった
GitLab Managed
Terraform Cloud
GCS
Git
Terraform Cloudが一番とりあえず楽そうな感じだったので、それを採用
目录结构
- 以下のような構成にした(ちょっとぼかしてます)。調査したがおおむねの構成はみんな似てるものの、最適解はチーム毎に違いそうということなので、対象のサービスでやりやすい単位で組むのがよさそう
envs
- develop
- staging
- production
modules
- loadbalancer
- api
- gcs
- bucket1
- bucket2
- iam
- envsの配下が環境毎に分かれていれば、terraform cloud側でワークスペースを分けて管理できて便利
实际应用
-
- ひたすらちまちまtfコードかいて、少しずつ動作確認して・・を繰り返していく
- terraformerなどを使用したとはいえ、かなり地道で時間がかかった
其他
Terraform的版本和提供程序的版本不相同。
- terraformが最新のバージョンだったので、自分は最新版でterraformしてるつもりだったが、providerが古かった。現時点(2022/01/28)の最新版である4.8.0にした。tfファイルを修正してから、terraform init -upgrade することで解消。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "4.8.0" # 3.5.0になってたのを修正
}
}
}
terraform init -upgrade
我不知道如何编写GCP的负载平衡器。(我不知道怎么写GCP的负载平衡器。)
-
- 調べてみると、複数のサービスに分かれているとのこと
-
- このあたりが関係してくる。iamあたり絡めるともっといろいろ設定があるかも。
google_compute_backend_bucket
google_compute_backend_service
google_compute_global_address
google_compute_global_forwarding_rule
google_compute_target_https_proxy
google_compute_target_http_proxy
google_compute_url_map
google_compute_region_network_endpoint_group
在使用Terraform时可以做到什么程度?
-
- gcpプロジェクト作成とかもできるので、ほぼなんでもできる
-
- ただterraformの権限がデカくなりすぎるので、けっこう怖い
iam全部消すとかもできちゃうし、他のプロジェクト消すとかもできそう。
与gcloud的合作分工
-
- terraform用のサービスアカウントというものは必ず必要になる
-
- 事故を防ぐために対象プロジェクトに対してのみterraformを実行させたい
誤って別プロジェクトに対して操作してしまうとか恐ろしすぎる
つまりgcloudコマンドは必ず実行することになる(コンソールポチポチしてもいいけど)
あとAPIの有効化周りはterraformではちょっとやりづらい
gcloudのスクリプトで最初のプロジェクト作成と、terraform用のサービスアカウント作成、APIの有効化をやらせることにした
印象
-
- 結構大変だったけど、GCP環境が全部コード化されて管理下におかれるのはなんか楽しさがある
- アプリばかり開発してきたけど、こういうのはわりと面白いなと感じた