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"
Chuma Takahiro