在将现有的GCP环境转换为Terraform时所做的事情备忘录

前提 tí)

    terraform 初心者

背景 – Background

    • 今あるGCP環境をTerraform化したい

 

    環境は以下のような感じ
undefined

做过的事情

地球改造者 (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環境が全部コード化されて管理下におかれるのはなんか楽しさがある

 

    アプリばかり開発してきたけど、こういうのはわりと面白いなと感じた
广告
将在 10 秒后关闭
bannerAds