👁

Terraformコマンド

この章では、Terraformの主要なコマンドについて学び、ハンズオン形式で学習します。これにより、fmt・validate・stateコマンドなど実務で役立つコマンドの使い方が身につきます。

1. 本章の概要

1.1 本章の目的

init・plan・apply以外のTerraformコマンドは、実務でトラブルシューティングやコード整理を行うときに登場します。fmt・validate・stateなどの主要コマンドを一度体系的に押さえておくと、実務で困ったときに引き出しやすくなります。

1.2 本章で学ぶ内容

コード整形・検証(terraform fmt・validate)、状態管理(terraform state)、デバッグ・確認(terraform console・output・graph)の3グループに分けて、Terraformの主要コマンドを扱います。

1.3 ハンズオンの流れ

コードの整形・検証、ステート操作、デバッグ・確認の3グループに分けて、Terraformの主要コマンドを実際に実行しながら学びます。

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

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

2.1 terraform fmt

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

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

terraform fmt

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

terraform fmt -recursive

2.2 terraform validate

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

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

terraform validate

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

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

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

3.1 terraform state list

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

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

terraform state list

出力例

# aws_s3_bucket.my_bucket
# aws_instance.web

3.2 terraform state show

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

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

terraform state show aws_instance.web

3.3 terraform state mv

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

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

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

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

terraform state mv aws_instance.old aws_instance.new

3.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 を使います。

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

4.1 terraform console

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

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

まずコンソールモードを起動します。

terraform console

コンソール内で式を入力すると、以下のような実行結果が表示されます。

> 1 + 5
6

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

コンソールを終了するには exit を入力します。

exit

4.2 terraform output

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

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

全ての output を表示する場合

terraform output

特定の項目だけ表示

terraform output instance_ip_addr

4.3 terraform graph

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

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

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

terraform graph

5. まとめ

この章では、Terraformの代表的なコマンドを学びつつ、実際に手元で扱いを確かめました。

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

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

次の章では、TerraformでWebアプリケーションのインフラをAWSに構築する流れをハンズオン形式で体験します。

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くのセクションが作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000