uni farm

GCPの既存リソースをterraformerでimportする

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を作成

versions.tf
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.

差分もなさそうなので、良い感じ

参考

2022, Built with Gatsby. This site uses Google Analytics.