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.old を aws_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に構築する流れをハンズオン形式で体験します。