Terraform は IT リソースを管理するためのクライアントツールです。Terraform コマンドを使用して、すべてのリソースを管理できます。このトピックでは、リソース管理と状態管理のための一般的なコマンドについて説明します。
リソース管理の一般的なコマンド
Terraform におけるリソース管理は、主にリソースのライフサイクルを管理することです。コマンドを使用して、Terraform テンプレートで定義されたリソースの作成、変更、表示、削除を行うことができます。
terraform plan:リソースのプレビュー
planコマンドは、テンプレートで定義されたリソースをプレビューします。このコマンドは次のシナリオで使用されます。現在のテンプレートで定義されているリソースをプレビューし、期待どおりであることを確認します。これは Markdown のプレビュー機能に似ています。
現在のテンプレートに対応する状態ファイルがすでに存在する場合、
planコマンドはテンプレートの定義と状態ファイルの内容の差分を表示します。変更がある場合、コマンドの出力に結果が表示されます。データソースの場合、
planコマンドを実行して、照会するリソースとそのプロパティを取得して表示できます。
terraform apply:リソースの作成と変更
applyコマンドは、リソースを実際に作成または変更します。セキュリティのため、このコマンドには、操作を手動で確認する必要があるインタラクティブなステップが含まれています。--auto-approve パラメーターを使用して、この確認をスキップすることもできます。applyコマンドは次のシナリオで使用されます。新しいリソースを作成します。
テンプレートのパラメーターを変更して、リソースのプロパティを変更します。
現在のテンプレートからリソースの定義を削除すると、
applyコマンドはそのリソースを削除します。リソースの削除も変更と見なされます。
terraform show:リソースの表示
showコマンドは、現在の state で管理されているすべてのリソースと、それらのすべてのプロパティ値を表示します。terraform destroy:リソースの解放
destroyコマンドは、リソースを解放します。セキュリティのため、このコマンドには、操作を手動で確認する必要があるインタラクティブなステップが含まれています。--auto-approve パラメーターを使用して、手動確認をスキップできます。デフォルトでは、
terraform destroyは現在のテンプレートで定義されているすべてのリソースを解放します。特定のリソースのみを解放するには、-target=<resource_type>.<resource_name>パラメーターを使用して指定できます。terraform import:リソースのインポート
importコマンドは、既存のクラウドリソースを Terraform の state にインポートして、Terraform で管理できるようにします。このコマンドは、次のようなシナリオで使用されます。コンソール、Alibaba Cloud コマンドラインインターフェイス (CLI)、Resource Orchestration Service (ROS)、または API の直接呼び出しを通じて作成および管理された既存のクラウドリソースがあり、それらを Terraform を使用して管理したい場合。
リソースの動作に影響を与えることなく、リソーステンプレート内のリソースの定義をリファクタリングする必要がある場合。
Alibaba Cloud プロバイダーが新しいバージョンにアップグレードされ、元のテンプレートで定義されているリソースに対して、新しいプロバイダーバージョンでサポートされるパラメーターが増え、それらを同期する必要がある場合。
説明importコマンドを使用した既存リソースの管理方法など、詳細については「既存のクラウドリソースを管理する方法」をご参照ください。terraform taint:リソースを汚染されたものとしてマーク
taintコマンドは、リソースを汚染されたものとしてマークします。次にapplyコマンドを実行すると、汚染されたリソースはまず解放され、その後再作成されます。これは、特定のリソースを削除してから再作成することと等価です。コマンド形式は次のとおりです:
terraform taint <resource_type>.<resource_name>。例:$ terraform taint alicloud_vswitch.this Resource instance alicloud_vswitch.this has been marked as tainted.terraform untaint:リソースの汚染されたマークを解除
untaintコマンドは、taintコマンドの逆の操作です。これにより、汚染されたマークが削除され、リソースが通常の状態に復元されます。コマンド形式はtaintコマンドと同様です:terraform untaint <resource_type>.<resource_name>。例:$ terraform untaint alicloud_vswitch.this Resource instance alicloud_vswitch.this has been successfully untainted.terraform output:出力値の表示
テンプレートで出力値を明示的に定義している場合、その値は
applyコマンドの実行後に表示されますが、planコマンドの実行後には表示されません。いつでも出力値を表示するには、terraform outputコマンドを実行できます。$ terraform output vswitchId = vsw-gw8gl31wz********
状態管理の一般的なコマンド
Terraform における状態管理とは、状態ファイル内のデータを管理することです。状態ファイルには、Terraform によって管理されるすべてのリソースとそのプロパティが保存されます。Terraform は自動的にコンテンツを保存します。データ整合性を確保するため、状態ファイルの内容を手動で変更しないでください。terraform state コマンドを使用して、状態データに対する操作を実行できます。
terraform state list:現在の state にあるすべてのリソースを一覧表示
state list コマンドは、データソースを含む、現在の state にあるすべてのリソースを
<resource_type>.<resource_name>形式で一覧表示します。例:$ terraform state list data.alicloud_slbs.default alicloud_vpc.default alicloud_vswitch.thisterraform state show:特定のリソースのプロパティを表示
state show コマンドは、特定のリソースのすべてのプロパティとその値をキー/値形式で表示します。コマンドの完全な形式は
terraform state show <resource_type>.<resource_name>です。例:$ terraform state show alicloud_vswitch.this # alicloud_vswitch.this: resource "alicloud_vswitch" "this" { availability_zone = "eu-central-1a" cidr_block = "172.16.0.0/24" id = "vsw-gw8gl31wz******" vpc_id = "vpc-gw8calnzt*******" }terraform state pull:現在の state の内容の取得と表示
state pull コマンドは、シェルの cat コマンドと同様に、現在の状態ファイルの生データを表示します。 例:
$ terraform state pull { "version": 4, "terraform_version": "0.12.8", "serial": 615, "lineage": "39aeeee2-b3bd-8130-c897-2cb8595cf8ec", "outputs": { *** } }, "resources": [ { "mode": "data", "type": "alicloud_slbs", "name": "default", "provider": "provider.alicloud", *** }, { "mode": "managed", "type": "alicloud_vpc", "name": "default", "provider": "provider.alicloud", *** } ] }terraform state rm:特定のリソースの削除
state rm コマンドは、状態ファイルからリソースを削除しますが、リソース自体を削除するわけではありません。コマンド形式は次のとおりです:
terraform state rm <resource_type>.<resource_name>。例:$terraform state rm alicloud_vswitch.this Removed alicloud_vswitch.this Successfully removed 1 resource instance(s).リソースが state から削除された後、テンプレートの内容が変更されていない場合に apply コマンドを再度実行すると、同一の新しいリソースが作成されます。削除されたリソースは、import コマンドを使用して再度追加できます。
terraform state mv:特定のリソースの移動
リソースが保存されている状態ファイルを変更するには、state mv コマンドを使用できます。これはシェルの mv コマンドに似ています。このコマンドには複数のオプションがあります。詳細については、terraform state mv --help コマンドを実行してください。このトピックでは、最も一般的な使用法について説明します:
terraform state mv --state=./terraform.tfstate --state-out=<target_path>/terraform-target.tfstate <resource_type>.<resource_name_A> <resource_type>.<resource_name_B>。例:$ terraform state mv --state-out=../tf.tfstate alicloud_vswitch.this alicloud_vswitch.default Move "alicloud_vswitch.this" to "alicloud_vswitch.default" Successfully moved 1 object(s)上記のコマンドでは、デフォルトの
--state=./terraform.tfstateオプションが省略されています。このコマンドは、vSwitch リソースを現在の state から親ディレクトリにあるtf.tfstateという名前の状態ファイルに移動し、vSwitch リソースの名前を "this" から "default" に変更します。terraform refresh:現在の state の更新
refresh コマンドは、現在の state の内容を更新します。API を再度呼び出して最新のデータを取得し、状態ファイルに書き込みます。
その他の一般的なコマンド
リソース管理と状態管理のコマンド以外にも、テンプレートとプロバイダーに関連するシナリオで使用される一般的なコマンドがあります。
terraform init:初期化とモジュールのロード
init コマンドは、プロバイダー、プロビジョナー、モジュールなどの必要なモジュールを初期化してロードします。
terraform graph:リソース依存関係グラフの出力
テンプレートで定義されたリソースは、互いに依存関係があります。リソースの依存関係グラフを表示するには、terraform graph コマンドを使用できます。
$ terraform graph digraph { compound = "true" newrank = "true" subgraph "root" { "[root] alicloud_vpc.default" [label = "alicloud_vpc.default", shape = "box"] "[root] alicloud_vswitch.this" [label = "alicloud_vswitch.this", shape = "box"] ****** "[root] output.vswitchId" -> "[root] alicloud_vswitch.this" "[root] provider.alicloud (close)" -> "[root] alicloud_vswitch.this" ****** "[root] root" -> "[root] provider.alicloud (close)" } }このコマンドの出力を画像ファイルにエクスポートすることもできます。
terraform graph | dot -Tsvg > graph.svgコマンドを実行してください。最初にbrew install graphvizを実行して Graphviz をインストールする必要があります。
terraform validate:テンプレートの構文の検証
Terraform テンプレートを記述するには、Terraform によって定義されたシンプルな構文規則に従う必要があります。テンプレートを記述した後、構文エラーを確認したい場合、または plan または apply コマンドの実行時に構文エラーが報告された場合は、terraform validate コマンドを実行して、エラーの箇所と原因を確認、特定できます。