GCPのリソース管理をterraformでやるために、まずは既存のものをimportしてみた
importまで案外大変だったので書き残しておく
環境
- ubuntu: 18.04
- terraformer: 0.8.10
- tfenv: 2.0.0
- terraform: 0.14.5
セットアップ
terraform with tfenv
おおよそtfenvのREADME通り。terraformのバージョンは最新かつalpha版でないものをつかう
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
tfenv list-remote
...
tfenv install 0.14.5
tfenv use 0.14.5
確認
tfenv list
terraform version
terraformer
こちらもREADME通り
git clone git@github.com:GoogleCloudPlatform/terraformer.git
使用するproviderはgoogle
export PROVIDER={google}
curl -LO https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64
chmod +x terraformer-${PROVIDER}-linux-amd64
sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer
確認
terraformer version
GCPのリソースimport
terraformerでimportする。terraformでproviderの設定をする必要がある
terraform
ほしいリソースについての、providerを作成
terraform {
required_providers {
google = {
source = "hashicorp/google"
}
}
required_version = ">= 0.14"
}
を作成し
terraform init
カレントディレクトリにprovidersが作成されるので、terraformerのpluginsディレクトリへコピー
rsync -av .terraform/providers/registry.terraform.io/hashicorp/google/3.54.0/linux_amd64 ~/~.terraform.d/plugins
terraformer
認証情報はサービスアカウントを作成して、.jsonキーファイルを作成し、ダウンロードしておく(名前はterraform.json
とした)
versions.tfに認証情報をかいても読み取ってくれないようで、使用するキーファイルのパスを環境変数で設定する必要がある
コマンドにてimportするproject region resourceの指定をする
export GOOGLE_APPLICATION_CREDENTIALS="terraform.json"
terraformer import google --resources=instances,forwardingRules,httpHealthChecks --regions=us-west1 --projects=xxxx-12345
...
2021/01/11 00:53:33 google importing project xxxx- region us-west1
importする対象を指定するresourcesの値は
terraformer import google list --projects=xxxx-12345
で確認できる
importされたtfファイル群はgenerated/
以下に保存される
terraform init
リソースごとにディレクトリが切られるので、instanceだけ試した
terraform init
...
Error: Invalid legacy provider address
...
terraformerで作られるtfファイル群は対応するバージョンが低い様子
Receive error ‘Invalid legacy provider address’ with Terraform in Bitbucket pipeline - Stack Overflow を参考に以下コマンドを実行
変更確認がでるのでyes
で更新する
terraform state replace-provider "registry.terraform.io/-/google" "hashicorp/google"
terraform init
terraform plan
...
Plan: 0 to add, 0 to change, 0 to destroy.
差分もなさそうなので、良い感じ