個人的最強フロー
//構文確認
terraform validate
//フォーマット整形
terraform fmt -recursive
//計画を保存
terraform plan -out=tfplan
//保存したプランを適用
terraform apply tfplan
//デバッグ時の状態確認
terraform state list
terraform state show aws_instance.main
1. terraform plan関連
アクセサリコマンド:プラン結果を保存
プラン結果を保存し、後から適用する
特に大規模なリソース変更を適用する際、プランの保存は安全性を高めます
terraform plan -out=tfplan
terraform apply tfplan
アクセサリコマンド:特定のリソースだけを計画
大規模プロジェクトで特定のリソースにだけ変更を計画
terraform plan -target=aws_instance.main
2. terraform apply関連
アクセサリコマンド:自動適用
ユーザー確認なしで適用を行う(非推奨だがCI/CDパイプラインで有用)
terraform apply -auto-approve
3. terraform destroy関連
アクセサリコマンド:特定のリソースだけを削除
全リソースを削除するのではなく、特定リソースだけを削除
terraform destroy -target=aws_instance.main
アクセサリコマンド:確認なしで全削除
全リソースをユーザー確認なしで削除する(非推奨、慎重に使用)
terraform destroy -auto-approve
4. terraform fmt(フォーマット)
アクセサリコマンド:コードフォーマットを強制
全ファイルを自動整形コードレビューやCI/CDでの利用がおすすめ
terraform fmt -recursive
5. terraform validate(構文チェック)
コードに構文エラーがないか確認
ポイント: terraform planよりも高速
terraform validate
6. terraform state(状態管理)
アクセサリコマンド:状態ファイルをリスト化
管理されているリソースを一覧表示
terraform state list
アクセサリコマンド:特定リソースの状態確認
リソースの状態を詳細に確認
terraform state show aws_instance.main
アクセサリコマンド:状態を手動で移動
状態を別のリソースに移動する
terraform state mv aws_instance.old aws_instance.new
7. terraform taint(リソース再作成フラグ)
特定リソースを「壊れた」とマークし、次回のapplyで再作成を強制
terraform taint aws_instance.main
逆操作:untaint
マークを解除し、再作成をスキップ
terraform untaint aws_instance.main
8. terraform graph(依存関係の可視化)
リソース間の依存関係をグラフ化して視覚的に確認
例: DOT形式で出力し、Graphvizでレンダリング
terraform graph | dot -Tpng > graph.png
9. terraform console(インタラクティブ操作)
コード内の値や計算をインタラクティブにテスト
terraform console
> aws_instance.main.tags["Name"]
> length(aws_instance.main.tags)
10. Terraform環境変数
アクセサリコマンド:デバッグモード有効化
詳細なデバッグログを確認するための環境変数
TF_LOG=DEBUG terraform apply
アクセサリコマンド:並列実行の制御
大量のリソースを扱う際に便利
terraform apply -parallelism=10
コマンド | 説明 | よく使用されるオプション |
---|---|---|
terraform init | 作業ディレクトリを初期化し、プラグインをダウンロード |
-backend-config (バックエンド設定ファイルを指定) |
terraform plan | 実行プランを作成し、変更内容を表示 |
-out (プランをファイルに保存)、-var (変数を指定) |
terraform apply | インフラ変更を適用 |
-auto-approve (確認なしで適用)、-var (変数を指定) |
terraform destroy | インフラを削除 |
-auto-approve (確認なしで削除)、-var (変数を指定) |
terraform fmt | 設定ファイルの書式を整形 |
-recursive (再帰的に処理) |
terraform validate | 設定ファイルの構文を検証 | なし |
terraform show | 状態やプランの内容を表示 |
-json (JSON形式で出力) |
terraform output | 出力変数の値を表示 |
-json (JSON形式で出力)、[name] (特定の出力を表示) |
terraform state | 状態ファイルを管理 |
list 、show 、rm 、mv (サブコマンド) |
terraform import | 既存リソースを管理下に取り込む | なし |
terraform taint | リソースを再作成対象に設定 | なし |
terraform untaint | taint状態を解除 | なし |
terraform graph | リソースの依存関係を視覚化 |
-draw-cycles (循環依存を表示) |
terraform refresh | 実際の状態を取得し状態ファイルを更新 | なし |
terraform providers | 使用中のプロバイダー情報を表示 |
-json (JSON形式で出力) |
terraform workspace | ワークスペースを管理 |
list 、select 、new (サブコマンド) |
terraform login | Terraform Cloudにログイン |
hostname (ホスト名を指定) |
terraform logout | Terraform Cloudからログアウト |
hostname (ホスト名を指定) |
terraform state mv | 状態内のリソースを移動 | なし |
terraform state rm | 状態からリソースを削除 | なし |
terraform state pull | リモート状態を取得 | なし |
terraform state push | ローカル状態をリモートに反映 |
-force (強制的に上書き) |
terraform state replace-provider | プロバイダーを置換 |
-auto-approve (確認なしで適用) |
terraform version | Terraformのバージョン情報を表示 |
-json (JSON形式で出力) |
terraform get | モジュールをダウンロードまたは更新 |
-update (既存モジュールを更新) |
terraform force-unlock | ロック状態を解除 |
LOCK_ID (ロックIDを指定) |
terraform debug | デバッグモードでコマンドを実行 | なし |
terraform providers lock | プロバイダーのバージョンをロック |
-platform (対象プラットフォームを指定) |
terraform login | Terraform Cloudにログイン |
hostname (ホスト名を指定) |
terraform workspace new | 新しいワークスペースを作成 |
[workspace_name] (ワークスペース名) |
terraform workspace select | ワークスペースを選択 |
[workspace_name] (ワークスペース名) |
terraform workspace list | ワークスペースの一覧を表示 | なし |
terraform state list | 管理中のリソースを一覧表示 |
-state (状態ファイルを指定) |
terraform state show | リソースの詳細情報を表示 |
[resource_address] (リソースアドレス) |
terraform state rm | リソースを状態から削除 |
[resource_address] (リソースアドレス) |
terraform state mv | リソースを新しいアドレスに移動 | [source] [destination] |
terraform force-unlock | ロックを強制的に解除 |
[LOCK_ID] (ロックID) |
terraform debug | デバッグ情報を出力 | なし |
terraform apply -refresh-only | 状態を更新 |
-auto-approve (確認なしで適用) |
【参考】