terraformコマンド

この講座では、Terraformの主要なコマンドについて学びます。

  • コード整形(terraform fmt)と検証(terraform validate)
  • 状態管理(terraform state)コマンド
  • デバッグ・確認(terraform console・output・graph)

1. コードの整形・検証 (Code Quality)

コードをきれいに保ち、文法ミスを早期に発見するためのコマンドです。

1.1 terraform fmt

コードのフォーマット(インデントやスペース)を自動修正し、Terraformの標準スタイルに整形してくれます。

チーム開発では、「人によってインデントが違う」といった不毛な争いを避けるために必須です。

terraform fmt

また、サブディレクトリも含めて整形したい場合、-recursive オプションをつけます。

terraform fmt -recursive

1.2 terraform validate

コードに構文エラー(綴り間違いや、必須項目の不足など)がないかをチェックします。

plan を実行するにはAWSへの認証が必要ですが、validate はローカルだけで完結するため、素早いチェックが可能です。CI/CDパイプラインによく組み込まれます。

terraform validate

2. ステート操作 (State Management)

tfstate ファイルの中身を確認したり、手動で修正したりするためのコマンド群です。

「インフラ自体は変更せず、Terraformの記憶(認識)だけを操作したい」 時に使います。

2.1 terraform state list

現在、Terraformが管理している(Stateファイルに記録されている)リソースの一覧を表示します。

「今まで、何を作ったっけ?」や「importするためのリソース名を確認したい」という時に使います。

terraform state list

出力例

# aws_s3_bucket.my_bucket
# aws_instance.web

2.2 terraform state show

特定のリソースの詳細な設定値(IDやIPアドレスなど)を表示します。

下記のコマンドは、aws_instance.web の詳細を出力するコマンドです。

terraform state show aws_instance.web

2.3 terraform state mv

リソースの名前を変更したり、モジュールへ移動させたりする「リファクタリング」に使います。

コード上で名前を変えただけだと、Terraformは「古いリソースを削除して、新しいリソースを作成」しようとします(破壊的変更)。

state mv を使うことで、「削除・作成」を行わずに、Terraform上の名前だけを付け替えることができます。

下記は、aws_instance.oldaws_instance.new にリネームするコマンドです。

terraform state mv aws_instance.old aws_instance.new

2.4 terraform state rm

リソースを 「Terraformの管理から外す」 コマンドです。

terraform destroy はリソースを実際に削除しますが、state rm はリソース自体は残したまま、Terraformの記憶から消去します。

「importしたけど、やっぱりTerraform管理をやめたい」場合などに使います。

下記は、aws_s3_bucket.my_bucket このリソースを管理対象から外すコマンドです。リソース自体はAWS上には残ります。

terraform state rm aws_s3_bucket.my_bucket
📝 state rmとdestroyの違い
terraform state rm はリソースを削除するコマンドではありません。Terraformの「管理対象から外す」だけで、AWS上のリソースはそのまま残り続けます。リソースを削除したい場合は terraform destroy を使用してください。逆に、リソースを残したままTerraform管理をやめたい場合に state rm を使います。

3. デバッグ・確認 (Debugging)

3.1 terraform console

Terraformの関数や変数の挙動を対話形式で試せる機能です。

「この変数の展開結果はどうなる?」「CIDR計算の関数を試したい」といった時に、わざわざ apply せずに確認できます。

# コンソールモードに入る
terraform console

# --- コンソール内 ---
> 1 + 5
6

> format("Hello, %s!", "World")
"Hello, World!"

> exit

3.2 terraform output

outputs.tf などで定義した出力値(EC2のパブリックIPや、DBのエンドポイントなど)を表示します。

apply 直後でなくても、いつでも値を確認できます。

全ての output を表示する場合

terraform output

特定の項目だけ表示

terraform output instance_ip_addr

3.3 terraform graph

リソース間の依存関係を可視化するためのデータ(DOT形式)を出力します。

複雑に絡み合ったリソースの関係性を図解したい時に使いますが、画像化するには Graphviz などの別ツールが必要です。

依存関係のグラフデータを出力

terraform graph

4. まとめ

この講座では、Terraformの代表的なコマンドについて学びました。

  • terraform fmtでコードを標準スタイルに自動整形
  • terraform validateで構文エラーをローカルでチェック
  • terraform state list/showで管理中のリソースを確認
  • terraform state mvでリソースのリネーム(破壊的変更の回避)
  • terraform state rmでリソースをTerraform管理から除外(リソース自体は削除されない)
  • terraform consoleで関数や変数の挙動を対話的に確認
  • terraform outputで定義した出力値をいつでも確認可能

各コマンドの詳細なオプションや使い方は、Terraform公式ドキュメントのBasic CLI Featuresに一覧で記載があります。