[GoogleCloudPlatform]から出た[terraformer]を使ってみた

公開日:2019-05-05
最終更新:2019-05-05

2019/5/2 に現れた、GCPリソースをTerraform用のtfファイル化するっぽい
https://github.com/GoogleCloudPlatform/terraformer
を使ってみた。

小さく躓いたものの、使うことはできた。
まだ v0.7 のようだし、今後に注目したい。

自分の狙いは Datastore の Terraform 化(?) だったので、叶わなかったのですが。[^1]

実行時環境情報

  • macOS Mojave 10.14.4
  • Terraform v0.11.13
    • provider.google v1.20.0 -> v2.0.0 を指定して terraform init することで upgrade 可能 [^2]
  • terraformer v0.7 [^3]

インストール

1. Run git clone <terraformer repo>

❯ git clone https://github.com/GoogleCloudPlatform/terraformer.git  
Cloning into 'terraformer'...  
remote: Enumerating objects: 7025, done.  
remote: Counting objects: 100% (7025/7025), done.  
remote: Compressing objects: 100% (4238/4238), done.  
remote: Total 7025 (delta 2226), reused 7018 (delta 2222), pack-reused 0  
Receiving objects: 100% (7025/7025), 32.37 MiB | 5.68 MiB/s, done.  
Resolving deltas: 100% (2226/2226), done.  
Checking out files: 100% (4230/4230), done.  
  • 実はこのあと、fork して ssh で clone し直しましたが。
    • README 直したい気になったので。次のステップとして cd terraformer が抜けてた。細かいですが。

2. Run GO111MODULE=on go mod vendor *

❯ GO111MODULE=on go mod vendor  
go: finding github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af  
go: finding github.com/Azure/azure-sdk-for-go v10.3.0-beta+incompatible  
・・・  
go: extracting github.com/golang/protobuf v1.2.0  
go: downloading github.com/hashicorp/go-getter v0.0.0-20181119194526-bd1edc22f8ea  
verifying github.com/hashicorp/[email protected]: checksum mismatch  
    downloaded: h1:o+/o9FSMvgMmv5Ss+EUutVEwZfcFR1nJKzOqlVJGFPY=  
    go.sum:     h1:B2Aqv5hbW6F55OFgXAcSqGhqKi4Jb6IRLkKoA5ohgzU=  

3. Run go build -v

❯ go build -v  
$GOPATH/go.mod exists but should not  

# おっとお、と思い調整  
❯ export GOPATH=  
  • ちょっと躓いたところその2。GOPATHを terraformer ディレクトリに設定していたのですが、アダとなったしまっていたようです。クリアしました。
❯ go build -v  
go: downloading github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1  
go: downloading github.com/hashicorp/go-getter v0.0.0-20181119194526-bd1edc22f8ea  
・・・  
github.com/GoogleCloudPlatform/terraformer/cmd  
github.com/GoogleCloudPlatform/terraformer  

# -> 3m 4s で build 完了  
❯ ls -lah terraformer  
-rwxr-xr-x  1 sogaoh  staff    68M  5  4 22:13 terraformer  

4. Copy your Terraform provider's plugin(s) to ~/.terraform.d/plugins/{darwin,linux}_amd64 , as appropriate.

ここは、 terraform plan , terraform apply 実行ディレクトリに生成されている .terraform ディレクトリをまるごとコピー( cp -pr )しました。
.terraform.d にリネームするところがミソかなと思います。

実行してみる!

1. まとめて -> 失敗。。

❯ ./terraformer import google --resources=firewalls,globalAddresses,instances,networks,subnetworks,gcs,dns --connect=true --zone=asia-northeast1-a --projects={MY_PROJECT_ID} --state=bucket  
2019/05/04 22:27:31 google importing project {MY_PROJECT_ID}  
2019/05/04 22:27:31 google importing... firewalls  
2019/05/04 22:27:33 google importing... globalAddresses  
2019/05/04 22:27:34 google importing... instances  
2019/05/04 22:27:36 google importing... networks  
2019/05/04 22:27:38 google importing... subnetworks  
2019/05/04 22:27:39 google importing... gcs  
2019/05/04 22:27:42 google importing... dns  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
2019/05/04 22:27:44 project: required field is not set  
panic: interface conversion: interface {} is nil, not string  

goroutine 1 [running]:  
github.com/GoogleCloudPlatform/terraformer/gcp_terraforming.(*CloudDNSGenerator).PostConvertHook(0xc0006a4140, 0x2ff0800, 0xc0006a4140)  
    /Users/sogaoh/src/temp/terraformer/gcp_terraforming/clouddns.go:125 +0x6a7  
github.com/GoogleCloudPlatform/terraformer/cmd.Import(0x2ff09e0, 0xc0000d4080, 0xc000552000, 0x7, 0x7, 0xc000562030, 0x30, 0x2c20c82, 0x9, 0x7ffeefbff8a6, ...)  
    /Users/sogaoh/src/temp/terraformer/cmd/import.go:88 +0x1ad  
github.com/GoogleCloudPlatform/terraformer/cmd.newCmdGoogleImporter.func1(0xc0004cef00, 0xc00016d450, 0x0, 0x5, 0x0, 0x0)  
    /Users/sogaoh/src/temp/terraformer/cmd/google.go:37 +0x34a  
github.com/spf13/cobra.(*Command).execute(0xc0004cef00, 0xc00016d400, 0x5, 0x5, 0xc0004cef00, 0xc00016d400)  
    /Users/sogaoh/go/pkg/mod/github.com/spf13/[email protected]/command.go:762 +0x465  
github.com/spf13/cobra.(*Command).ExecuteC(0xc0004cea00, 0xc0000c8e80, 0xc0000c8e40, 0xc000463f88)  
    /Users/sogaoh/go/pkg/mod/github.com/spf13/[email protected]/command.go:852 +0x2ec  
github.com/spf13/cobra.(*Command).Execute(...)  
    /Users/sogaoh/go/pkg/mod/github.com/spf13/[email protected]/command.go:800  
github.com/GoogleCloudPlatform/terraformer/cmd.Execute(0x0, 0x0)  
    /Users/sogaoh/src/temp/terraformer/cmd/root.go:33 +0x28  
main.main()  
    /Users/sogaoh/src/temp/terraformer/main.go:25 +0x22  

~/src/temp/terraformer master* 13s  
  • 欲張りすぎたからなのか、 dns を入れたのが悪かったのかは追及しきっていない。

2. 個々で -> 取れた!

❯ ./terraformer import google --resources=networks --connect=true --zone=asia-northeast1-a --projects={MY_PROJECT_ID} --state=bucket  
2019/05/04 22:28:59 google importing project {MY_PROJECT_ID}  
2019/05/04 22:28:59 google importing... networks  
2019/05/04 22:29:01 google Connecting....  
2019/05/04 22:29:01 google save networks  
2019/05/04 22:29:01 [DEBUG] New state was assigned lineage "0860a5f8-18d7-f500-f206-c74c5d033676"  
2019/05/04 22:29:01 google upload tfstate to  bucket  
2019/05/04 22:29:02 googleapi: got HTTP response code 404 with body: Not Found  
  • 最後の 404 がなんだか気になるものの、リソースあれば tf ファイルが生成されてました。
    • provider.tf しかないのが、そもそもリソースがない or bug で採取失敗という感じっぽい。

    • 自身のGCP環境は非常に小さいので、↑の画像にないリソースは未確認。
      • dns だけ、確認方法がわかっていない。

その他

  • Usage: import google [flags]
    • 頭に ./terraformer つけないのはなんでだろう。。
  • Flags のどれが必須かを書いてほしいな...

なんか、今なら Contribute できちゃいそうな感じがするので、チャレンジしてみたい。

Note

[^1]: module でできそうな感じもしているので、そっちは後日に勘で試してみようかなと思っている。
[^2]: https://www.terraform.io/docs/providers/google/version_2_upgrade.html
[^3]: ./terraformer -v./terraformer --version は使えなかった... -> すぐにfixされた。 refs https://github.com/GoogleCloudPlatform/terraformer/commit/316af851895bd6c0a07198465b8ef7f0313b3066

記事が少しでもいいなと思ったらクラップを送ってみよう!
42
+1
@sogaohの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする