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.old を aws_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に一覧で記載があります。