[GCP] 我做了以下工作,以便将手动创建的资源纳入Terraform管理
首先
這是一個備忘錄(為了預防而寫)。
此外,尽管本文中使用了terraformer,但仅出于.tf代码生成的目的,并且已考虑到万一情况。(截至2022年3月4日,terraform最新版本为v1.1.7,而terraformer的兼容版本为v0.13)
环境
-
- クラウド先: GCP
-
- コード管理: github
-
- apply環境: CircleCI
-
- terraformバージョン
ci上コンテナ: v0.14
ローカル: v0.13 (後述)
做过的事情
第一步:引入terraformer(本地)
如果想要使用Terraform管理已存在的资源,我认为使用terraform import是常见的方法。
但是,这个命令只会更新tfstate文件,不会进行其他更新。
来回于Web控制台界面、Terraform文档和编辑器之间进行操作,并生成tf代码是一项费力的任务。
因此,我使用了可以自动创建.tf代码的terraformer。
在brew环境下,可以用以下步骤进行安装。
brew install terraformer
另外,根据我的环境,在terraform版本0.14及以上无法运行(截至2022年3月4日)。
根据下面的文章,建议安装v0.13版本。
https://dev.classmethod.jp/articles/terraformer-version-dependence/
创建安全环境的步骤2
在进行任务之前,我会做好不破坏现有环境的准备。
我已经完成了以下任务。
-
- tfstateのバックアップ
-
- 一時的なバケットの作成(S3/GCS)(terraformer用)
-
- 一時的な作業用ディレクトリの作成
provider設定を引き継ぐ
tfstate管理先を、上記作成のバケットへ
执行步骤3:运行terraformer。
以下指的是要找到在Terraformer上表述要编码的资源的方式,请参考链接:https://github.com/GoogleCloudPlatform/terraformer/blob/master/docs/gcp.md
然后,生成.tf代码以管理现有环境。(tfstate存储在一个临时桶的目录中)
terraformer import google --resources=gcs,iam --projects=<プロジェクト名>
此外,可以使用*通配符在–resources指令中获取所有资源。
第四步:进行重构。
从由terraformer创建的.tf代码中找到所需的部分。(将tfstate管理位置更改为生产环境,并将其移动/复制到原始目录中)
另外,以下内容将进行重构。
-
- terraformリソース名(長い)
-
- 変数(いらないものがある)
- リソース自体(terraform管理したくないリソースが含まれていたりする)
第五步骤 – 使用terraform import
在每个资源块上执行terraform import,命令示例可在官方文档中找到。
在此,我們以service_account作為例子。
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_service_account#import
terraform import google_service_account.<terraformリソース名> projects/<プロジェクト名>/serviceAccounts/<service_accountのメール>
第六步:执行terraform plan。
进行 Terraform 计划并确认没有问题(没有差异或只有预期的差异)。
第七步:将更改合并到GitHub,执行Terraform应用等。
我会反映这些内容。
最后
我們正在期待你的回覆