[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应用等。

我会反映这些内容。

最后

我們正在期待你的回覆

广告
将在 10 秒后关闭
bannerAds