Terraform は、IT リソースを管理するために使用されるクライアントツールです。 Terraform のコマンドを使用して、すべてのリソースを管理できます。 このトピックでは、リソース管理と状態管理に使用される共通コマンドについて説明します。
リソース管理の共通コマンド
Terraform のリソース管理には、主にリソースライフサイクルの管理が含まれます。 コマンドを実行して、Terraform テンプレートで定義されているリソースの作成、変更、表示、および削除を行うことができます。
terraform plan: リソースをプレビューする
plan コマンドは、テンプレートで定義されているリソースをプレビューするために使用されます。 以下のシナリオで使用できます。
現在のテンプレートで定義されているリソースが管理の期待値を満たしているかどうかをプレビューします。 これは Markdown プレビューに似ています。
現在のテンプレートに対応する状態ファイルが存在する場合、plan コマンドは、テンプレートと状態ファイルの定義の異なる結果を表示します。 変更がある場合は、結果が表示されます。
データソースの場合、plan コマンドを実行して、クエリするリソースとそのプロパティを取得して表示できます。
terraform apply: リソースを作成および変更する
apply コマンドは、実際のリソースを作成または変更するために使用されます。 セキュリティのために、コマンドの実行中に手動操作が追加されます。 コマンドを続行するかどうかを手動で確認する必要があります。 --auto-approve パラメーターを追加して、手動確認プロセスをスキップすることもできます。
apply コマンドは、以下のシナリオに適用できます。
リソースを作成します。
テンプレートパラメーターを変更することにより、リソースプロパティを変更します。
現在のテンプレートからリソースの定義を削除すると、apply コマンドはリソースを完全に削除します。 リソースの削除も一種の変更です。
terraform show: リソースを表示する
show コマンドは、現在の状態にあるすべての管理対象リソースとそのプロパティ値を表示するために使用されます。
terraform destroy: リソースを解放する
destroy コマンドは、リソースを解放するために使用されます。 セキュリティのために、コマンドの実行中に手動操作が追加されます。 コマンドを続行するかどうかを手動で確認する必要があります。 --force パラメーターを追加して、手動確認プロセスをスキップすることもできます。
デフォルトでは、terraform destroy コマンドは、現在のテンプレートで定義されているすべてのリソースを解放します。 指定されたリソースのみを解放する場合は、
-target = <リソースタイプ>.<リソース名>
パラメーターを追加できます。terraform import: リソースをインポートする
import コマンドは、既存のクラウド リソースを terraform の状態にインポートし、Terraform 管理システムに追加するために使用されます。 import コマンドは、以下のシナリオに適用できます。
これまでは Web コンソール、Alibaba Cloud CLI、ROS、または API を使用して既存のリソースを作成および管理していました。 今すぐ Terraform に切り替えたいと考えています。
リソースの使用に影響を与えることなく、テンプレートでリソース定義を再構築します。
Alibaba Cloud プロバイダーは、互換性アップグレード後に元のテンプレートで定義されたリソースのより多くのパラメーターをサポートします。 最新のパラメーターを同期する必要があります。
説明import コマンドを使用して既存のリソースを管理する方法の詳細については、「既存のクラウド リソースの管理に関する問題の解決策」をご参照ください。
terraform taint: リソースに tainted のマークを付ける
taint コマンドは、リソースに 汚染 のマークを付けるために使用されます。後で apply コマンドを実行すると、汚染されたリソースが最初に解放され、次に新しいリソースが作成されます。これは、新しいリソースを作成する前にリソースを削除することと同じです。
完全なコマンド形式は、
terraform taint <リソースタイプ>.<リソース名>
です。$ terraform taint alicloud_vswitch.this Resource instance alicloud_vswitch.this has been marked as tainted.
terraform untaint: tainted マーカーをキャンセルする
untaint コマンドは taint コマンドの逆であり、tainted マーカーをキャンセルするために使用されます。 完全なコマンド形式は taint コマンドの形式と似ています:
terraform untaint <リソースタイプ>.<リソース名>
。$ terraform untaint alicloud_vswitch.this Resource instance alicloud_vswitch.this has been successfully untainted.
terraform output: パラメーターとその値を出力する
output パラメーターがテンプレートで定義されている場合、出力値は apply コマンドの実行後に表示されますが、plan コマンドの実行時には表示されません。 出力値をいつでも表示するには、terraform output コマンドを実行します。
$ terraform output vswitchId = vsw-gw8gl31wz********
状態管理の共通コマンド
Terraform の状態管理には、状態ファイルのデータの管理が含まれます。 状態ファイルには、Terraform によって管理されるすべてのリソースとそのプロパティが格納されます。 データは Terraform によって自動的に保存されます。 データの整合性を確保するために、状態ファイルのデータを手動で変更しないことをお勧めします。 terraform state コマンドを使用して、状態ファイルのデータを管理できます。
terraform state list: 現在の状態ファイル内のすべてのリソースを表示する
state list コマンドは、現在の状態ファイル内のすべてのリソース (データソースを含む) を
<リソースタイプ>.<リソース名>
形式で表示するために使用されます。$ terraform state list data.alicloud_slbs.default alicloud_vpc.default alicloud_vswitch.this
terraform state show: リソースのプロパティを表示する
state show コマンドは、指定されたリソースのすべてのプロパティとその値をキーと値の形式で表示するために使用されます。 完全なコマンド形式は
terraform state show <リソースタイプ>.<リソース名>
です。$ 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 pull コマンドは、現在の状態のデータを表示するために使用します。このコマンドは、Cloud Shell の 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 <リソースタイプ>.<リソース名>
です。$ terraform state rm alicloud_vswitch.this Removed alicloud_vswitch.this Successfully removed 1 resource instance(s).
状態ファイルからリソースを削除した後にテンプレートの内容が変更されていない場合は、apply コマンドを実行して同じリソースを追加できます。 import コマンドを実行して、削除されたリソースを状態ファイルに再度追加できます。
terraform state mv: 指定されたリソースの格納パスを変更する
state mv コマンドは、リソースが配置されている状態ファイルを変更するために使用されます。 このコマンドは Cloud Shell の mv コマンドに似ています。 このコマンドには複数のパラメーターを追加できます。 terraform state mv --help を実行して、パラメーターの詳細を表示します。 最も一般的に使用される形式は
terraform state mv --state=./terraform.tfstate --state-out=<ターゲットパス>/terraform-target.tfstate <リソースタイプ>.<リソース名 A> <リソースタイプ>.<リソース名 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 リソースは現在の状態ファイルから上位レイヤーディレクトリのtf.tfstate
状態ファイルに移動され、vSwitch リソース名は "this" から "default" に変更されます。terraform refresh: 現在の状態ファイルをリフレッシュする
refresh コマンドは、現在の状態ファイルをリフレッシュするために使用されます。 コマンドは API を再度呼び出し、最新のデータをプルして状態ファイルに書き込みます。
その他の共通コマンド
テンプレートとプロバイダーには、他にもいくつかのコマンドが一般的に使用されます。
terraform init: Terraform 構成ファイルを初期化する
init コマンドは、ロードされたプロバイダー、プロビジョナー、モジュールなどの Terraform 構成ファイルを初期化するために使用されます。
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 コマンドを実行して、エラーの場所と原因を確認できます。