【Terraform】Terraform ~ terraformコマンド ~

◾️はじめに

terraformコマンドをまとめてなかったので、メモしておく

目次

【0】terraformコマンド一覧
【1】terraform init
【2】terraform plan
【3】terraform apply
【4】terraform destroy
【5】terraform state
【6】terraform show
【7】terraform refresh
【8】terraform workspace
【9】terraform fmt
【10】terraform graph
【11】terraform import
【12】terraform validate

【0】terraformコマンド一覧

# Command Explanation Memo
1 terraform init 初期化処理
2 terraform plan 変更内容を確認する
3 terraform apply Terraformコードを実行する yesを省略するには「terraform apply -auto-approve」
4 terraform destroy Terraformコードで作成したリソースを削除 実行前に「terraform plan -destroy」がよさげ
5 terraform state Terraformの状態情報(.tfstate)に関するコマンド
6 terraform show 管理しているリソースを表示
7 terraform refresh stateと実際のInfra状況を同期するようなコマンド
8 terraform workspace Workspaceに関するコマンド
9 terraform fmt HCLファイルをフォーマット terraform fmt -recursive
10 terraform graph Terraformの依存関係をグラフ化 dot -Tpng > graph.png
11 terraform import 既存のインフラストラクチャをTerraformの管理下に置くためのコマンド terraform import [tfファイルのtypeとName] [対象リソース]
12 terraform validate Terraform公式の 基本バリデーションツール

【1】terraform init

* 初期化処理

https://developer.hashicorp.com/terraform/cli/commands/init

* 詳細は、以下の関連記事を参照のこと

Terraform ~ terraform initコマンド ~
https://dk521123.hatenablog.com/entry/2025/09/24/221918

【2】terraform plan

* 変更内容を確認する

https://developer.hashicorp.com/terraform/cli/commands/plan

【3】terraform apply

* Terraformコードを実行する

https://developer.hashicorp.com/terraform/cli/commands/apply

# yesを省略するには
terraform apply -auto-approve

# terraform destroy実行前に行う
terraform plan -destro

# 特定リソースのみデプロイする
# terraform plan --target="random_pet.bucket_name"
terraform apply --target="random_pet.bucket_name"

Terraform ~ 特定リソースのみデプロイ・削除する ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823

【4】terraform destroy

* Terraformコードで作成したリソースを削除

https://developer.hashicorp.com/terraform/cli/commands/destroy

# 特定リソースのみ削除する
# terraform destroy --target=[リソース名] --target=[リソース名]
terraform destroy --target="random_pet.bucket_name"

Terraform ~ 特定リソースのみデプロイ・削除する ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823

【5】terraform state

* Terraformの状態情報(.tfstate)に関するコマンド
* e.g. terraform state pull: 現在のStateをBackendからダウンロードし、表示

https://developer.hashicorp.com/terraform/cli/commands/state

* 詳細は、以下の関連記事を参照のこと

Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939

構文

terraform state <subcommand> [options] [args]
Command Explanation Memo
terraform state list 使用しているリソースを一覧表示
terraform state mv State内のリソース名を変更
terraform state rm . リソースをTerraformの管理から外す ★お勧め★
terraform state pull 現在のStateをBackendからダウンロードし、表示
terraform state push ローカルのStateファイルをリモートのBackendにアップロードする
terraform state show リソースの詳細を表示 terraform showコマンドのリソース指定版

[1] terraform state list
https://developer.hashicorp.com/terraform/cli/commands/state/list

[2] terraform state rm
https://developer.hashicorp.com/terraform/cli/commands/state/rm

* Stateファイルで管理されているリソースを削除(除外)する

https://zenn.dev/toritori0318/articles/983bd73e2d2158

にあるように、不整合が起きて、
terrraform refresh しても
状況が変わらない時に、使用したら解決できた。

【6】terraform show

* stateファイルを元に現在のリソースの状態を参照するコマンド
 => あくまで、現在の状態。terraform plan後の表示じゃない。

https://developer.hashicorp.com/terraform/cli/commands/show

【7】terraform refresh

* stateと実際のInfra状況を同期するようなコマンド

https://developer.hashicorp.com/terraform/cli/commands/refresh

【8】terraform workspace

* Workspace(※)に関するコマンド

https://developer.hashicorp.com/terraform/cli/commands/workspace

※:Workspaceとは?
 => 同一の tfファイル群を別の tfsate として扱うことができる機能

https://developer.hashicorp.com/terraform/language/state/workspaces

* 詳細は、以下の関連記事を参照のこと

Terraform ~ Workspace ~
https://dk521123.hatenablog.com/entry/2024/06/01/144048

構文

terraform workspace <subcommand> [options] [args]
Command Explanation Memo
terraform workspace list 既存のworkspaceを一覧表示
terraform workspace new Workspaceの新規作成 terraform workspace new prod
terraform workspace select Workspaceの選択 terraform workspace select prod
terraform workspace delete Workspaceの削除 terraform workspace delete prod
terraform workspace show 選択中のWorkspaceを表示

[1] terraform workspace list
https://developer.hashicorp.com/terraform/cli/commands/workspace/list

[2] terraform workspace new
https://developer.hashicorp.com/terraform/cli/commands/workspace/new

【9】terraform fmt

* TFコードを整形してくれる(インデントの統一など)
 => 改行とかはそのまんまだった

https://developer.hashicorp.com/terraform/cli/commands/fmt

terraform fmt

terraform fmt コマンド実行前

data "external" "hello_world" {
  program =         ["python", "hello_world.py"]

  query = {
               name = "Mike"
  }

}

output "result" {
                    value   =   data.external.hello_world.result["result"]
}

terraform fmt コマンド実行後

data "external" "hello_world" {
  program = ["python", "hello_world.py"]

  query = {
    name = "Mike"
  }

}

output "result" {
  value = data.external.hello_world.result["result"]
}

【10】terraform graph

* terraform graphで、Terraformの依存関係をグラフ化することが可能

https://developer.hashicorp.com/terraform/cli/commands/graph

terraform graph | dot -Tsvg > graph.svg

# PNGだと、システムがでかくなると画像が荒くて文字が見れない可能性あり
terraform graph | dot -Tpng > graph.png

# それ以外の対応画像形式は、以下を参照のこと。

https://www.graphviz.org/docs/outputs/

補足:GraphViz

* ただし、GraphViz が必要。
* DOT言語/GraphViz に関する詳細は、以下の関連記事を参照のこと

Python + DOT言語で図作成するには
https://dk521123.hatenablog.com/entry/2023/06/14/174104
DOT言語 ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/07/18/120407

【11】terraform import

* 指定した既存リソース・設定情報の定義をtfstateファイルに生成する

https://developer.hashicorp.com/terraform/cli/commands/import

# terraform import [tfファイルのtypeとName] [対象リソース]
terraform import aws_s3_bucket.sample_bucket sample-bucket

https://go-journey.club/archives/17121
https://tech.layerx.co.jp/entry/improve-iac-development-with-terraform-import

【12】terraform validate

* Terraform公式の 基本バリデーションツール
 => Terraformの構文チェックと基本的な論理チェックを行う
 => リソースの存在や構文ミスを検出

https://developer.hashicorp.com/terraform/cli/commands/validate

チェックできること

* HCL構文の正当性
* 参照関係の整合性(例: 未定義の変数を使っていないか)

terraform validate

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ Workspace ~
https://dk521123.hatenablog.com/entry/2024/06/01/144048
Terraform ~ terraform initコマンド ~
https://dk521123.hatenablog.com/entry/2025/09/24/221918
Terraform ~ terraform linter ~
https://dk521123.hatenablog.com/entry/2025/09/26/143659
Terraform ~ 複数環境へデプロイすることを考える ~
https://dk521123.hatenablog.com/entry/2023/05/06/003645
Terraform ~ 特定リソースのみデプロイ・削除する ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823
Python + DOT言語で図作成するには
https://dk521123.hatenablog.com/entry/2023/06/14/174104
DOT言語 ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/07/18/120407