terraformerを使って既存システムからIaCファイル作成
はじめに
terraformを扱うようになって半年。
terraformを使ってインフラコードを管理しているのですが、まだ1からソースコードを書いて、想定したインフラにならないことがあります。
勉強の為にも
https://registry.terraform.io/providers/hashicorp/google/latest/docs
から色んなリソース見てはどのバラメータがどういう制御をしているのかを確認しますが、applyとdestoryを繰り返して時間がかかっているのが現状です。
画面からポチポチとボタンを押して作ったものが正解なんだけど、ソースコード内のタグの設定やパラメータ設定などの足りないこともしばしばあったりします。
既に稼働しているインフラがソースコード管理されてない事もあるかと思います。
手動でポチポチ設定変更だとヒューマンエラーが発生したり、会社によってはインフラ作る手順書を画面をキャプチャしてExcelに貼り付けて管理しているかもしれません。
ソースファイル化する事でのメリットとして
- 別環境にて同じ構成を形成する事が可能
- ソースコードを読む事でシステム構成を共有する事ができる
などがあります。
そこでterraformerという既存システムからIaCをエクスポートできるツールを使ってみました。
Terraformer、その前に
terraformのコマンドをインストールする必要があるのですが、その前にtfenvをインストールします。
terraformのバージョンが環境によって異なったりするので、その為にインストールする事が
多いのですが今回はterraformerコマンドを使用する際に、古いterraformのバージョンを使用する必要があります。
私の使用環境がMacなので、その前提で記載します。
tfenv インストール
brew install tfenv
tfenvでインストールできるバージョン一覧
tfenv list-remote
tfenvによるterraformのバージョンを指定してインストール
tfenv install <version number>
tfenv install latest
tfenvでローカルにインストールしているバージョン一覧
tfenv list
ローカルで使用するバージョンを選択する
tfenv use <version number>
Terraformer
まずはインストールします。
brew install terraformer
そしてtfenvのローカルのバージョンを公式ドキュメントに記載されてある
Support terraform 0.13 (for terraform 0.11 use v0.7.9).
に合わせます。2022年3月時点で0.13系で最新は0.13.7でした。
tfenv install 0.13.7
tfenv use 0.13.7
既存システムからインフラコード取得
クラウドはGoogle Cloud Platform(GCP)を前提に記載します。
アカウント確認
gcloud info
gcloud config list
各種設定
gcloud set account <your account>
gcloud config set project <project name>
gcloud config set compute/zone <zone>
アカウントおよびプロジェクト等の設定を確認し、インフラコードを抽出します。
terraformer import google --resources=<resource> --projects=<your project> --regions=<your project region>
取得できるリソース一覧は以下になります。
https://github.com/GoogleCloudPlatform/terraformer/blob/master/docs/gcp.md
resourcesはカンマ区切りにすることで複数入力可能です。
証明書を含むロードバランサのIaCを取得する場合
terraformer import google --resources=globalForwardingRules,targetHttpsProxies,sslCertificates ...
みたいな形で必要なリソースに合わせて取得していきましょう。
プロジェクト内の全てのIaCが欲しい
大きなプロジェクトになるとリソースを個々で指定するのが面倒だと思います。
その時は以下のコマンドで一括で取得できます。
gcloud beta resource-config bulk-export --on-error=continue \
--resource-format=terraform \
--project=(project id) > (output file name)
terraformerコマンドではないですねw
terraformerコマンドより少し時間はかかりますが、生成したファイルからterraform planなどで確認してみて下さい。
Discussion