すべてのプロダクト
Search
ドキュメントセンター

:共通コマンド

最終更新日:Jan 17, 2025

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 をインストールする必要があります。graph_img

  • terraform validate: テンプレート構文が正しいかどうかを確認する

    Terraform テンプレートは、Terraform で定義されている一連の単純な構文仕様に従う必要があります。 テンプレートに構文エラーがあるかどうか、または plan コマンドまたは apply コマンドの実行時に構文エラーが報告されるかどうかを確認する場合は、terraform validate コマンドを実行して、エラーの場所と原因を確認できます。