※ Terraformer は obsolete になりました。現在、同じ目的には OpenTofu の標準機能によるエクスポート が可能です。
Terraformerは、稼働中のクラウドから terraform 向けの構成ファイルをエクスポートできる CLI ツールです。
インストール
GitHub の
Releasesページから CLI バイナリそのものをダウンロードできます。
操作対象クラウドとクライアント OS 別に多数のビルドがあるため、目的に合わせて適切なファイルをダウンロードします。
基本的には PATH のとおった場所に置くだけで動作します。必要に応じてchmod +xで実行属性を追加し、ファイル名をterraformerに変更します。
実行の準備(GCP 向け)
terraformer にくわえて、terraform が対象クラウドを操作できる環境も必要です。
GCP の場合、ワーキングディレクトリに以下のようなmain.tfファイルを置きます。
provider "google" {
project = "my-project-id"
region = "us-central1"
}
project と region は実際の構成に合わせます。terraform initを実行すると GCP 用の Provider をインストールします。
また、クラウドアクセスのための認証も必要になります。
Google Provider Configuration Referenceを参照して、用途にあった認証を実行しておきます。
前提となる terraform の設定に不備があると、terraformer 実行時にアクセス拒否や 404 エラーの挙動になります。
GCP 以外のクラウドについては、各 terraform Provider のセットアップに従います。
構成エクスポート
terraformer import google --resources "*"コマンドにより、全リソースをエクスポートします。
対象リソースを限定する場合には、--resourcesオプションに個別のリソース名をカンマ区切りで列挙します。
リソース名はterraformer import google list --projects <project_name>で一覧表示できます。
全リソースをエクスポートした場合、設定のない空のリソースもエクスポートされます。
これらはtfstateファイルに空のデータが出力されています。
リソースの分割
terraform は、全構成のうち任意のサブリソース単位で分割管理できます。
たとえばプロキシの例では、targetTcpProxy, forwardingRules, backendServices, healthChecksといったセットになります。
結論としては、terraformer を運用プロセスに組み込む場合にはリソース単位の分割が自然でしょう。terraformer --resources targetTcpProxyといったエクスポートになります。
terraformer --filterオプションで論理的に抽出する機能はあるのですが、依存リソースにはフィルタがかからないため、ツールで意味のあるまとまりをエクスポートするには難があります。
複数のリソースをアトミックに変更しなくてはならないケースも考えにくく、実用上は各リソースを切り分けても支障はないでしょう。
導入当初はエクスポート対象の特定のため、全リソースをエクスポートして分析することが推奨です。
リージョン指定
GCP の構成オブジェクトは、地理的にグローバルに属すものと、特定リージョンに属すものがあります。
たとえば、グローバル外部 HTTPS ロードバランサの設定はグローバルオブジェクトで、GCE インスタンスなどはリージョナルなオブジェクトです。
terraformer はデフォルトでグローバルのオブジェクトをエクスポートするため、リージョンオブジェクトをエクスポートするには--regions <target_region>オプションを指定して実行します。
現行 terraform バージョンへのマイグレーション
terraformer v0.8.21 は terraform v0.13 向けのフォーマットを出力します。
Migration state versionの説明のとおり、terraformで現行バージョン向けに変換しておく必要があります。
terraform state replace-provider -auto-approve "registry.terraform.io/-/google" "hashicorp/google"