name: exec-tf description: Terraform コマンドを実行する。「terraform plan」「terraform apply」「tf init」「tf plan」「tf apply」「terraform して」「tf 実行」「インフラ適用」「プラン確認」「validate」「検証」などで起動。 allowed-tools: [Bash, Read]
Terraform Executor
Terraform コマンドの実行を支援します。
対応操作
| 操作 | トリガー例 | コマンド |
|---|---|---|
| 初期化 | 「init して」「terraform init」 | terraform init |
| 計画 | 「plan して」「プラン確認」 | terraform plan |
| 適用 | 「apply して」「適用して」 | terraform apply |
| 検証 | 「validate」「検証して」 | terraform validate |
| フォーマット | 「fmt」「フォーマット」 | terraform fmt |
| 出力確認 | 「output」「出力確認」 | terraform output |
| バージョン | 「version」「バージョン」 | terraform version |
実行手順
1. 意図の判定
ユーザーの発話から操作を判定:
- 初期化系: 「init」「初期化」→
terraform init - 計画系: 「plan」「プラン」「確認」→
terraform plan - 適用系: 「apply」「適用」「実行」→
terraform apply - 検証系: 「validate」「検証」→
terraform validate - フォーマット系: 「fmt」「フォーマット」→
terraform fmt
2. 事前確認
# Terraform バージョン確認
terraform version
# ワーキングディレクトリの .tf ファイル確認
ls *.tf 2>/dev/null || ls **/*.tf 2>/dev/null
# 初期化状態確認
ls -la .terraform 2>/dev/null
.tf ファイルがない場合はエラーメッセージを表示して終了。
.terraform がない場合:
⚠️ Terraform が初期化されていません。
先に `terraform init` を実行してください。
「init して」と言うか、以下を実行:
terraform init
Plan 操作
オプション
| オプション | 説明 |
|---|---|
--target <resource> | 特定リソースのみ plan |
--out <file> | plan ファイルを出力 |
--destroy | destroy plan を実行 |
plan 実行
標準 plan:
terraform plan -no-color
オプション付き:
# 特定リソースのみ
terraform plan -target=<resource> -no-color
# plan ファイル出力
terraform plan -out=<file> -no-color
# destroy plan
terraform plan -destroy -no-color
plan 結果解析
plan 出力を解析し、以下の情報を抽出:
- 追加されるリソース(
+) - 変更されるリソース(
~) - 削除されるリソース(
-) - 再作成されるリソース(
-/+または+/-)
plan 出力フォーマット
## Plan 結果
| 種類 | 数 | リソース |
|------|-----|----------|
| 🟢 追加 | {N} | {リソース一覧} |
| 🟡 変更 | {N} | {リソース一覧} |
| 🔴 削除 | {N} | {リソース一覧} |
| ⚠️ 再作成 | {N} | {リソース一覧} |
### 変更サマリー
Plan: {add} to add, {change} to change, {destroy} to destroy.
### 破壊的変更(要注意)
{force replacement が発生するリソースがあれば警告}
- `aws_db_instance.main` - force replacement(engine_version の変更)
- ...
破壊的変更の検出
以下のパターンを検出して警告:
# ... must be replaced- リソースの再作成# ... will be destroyed- リソースの削除forces replacement- 属性変更による再作成
⚠️ 破壊的変更が検出されました
以下のリソースが再作成または削除されます:
- {リソース名}: {理由}
apply 前に内容を確認してください。
Apply 操作
重要な安全規則
- ❌
-auto-approveは絶対に使用しない - ✅ 必ずユーザー確認を取ってから apply を実行
- ✅ 破壊的変更がある場合は特に注意を促す
オプション
| オプション | 説明 |
|---|---|
<plan-file> | plan ファイルを指定して apply |
--target <resource> | 特定リソースのみ apply |
apply 実行手順
1. plan 実行(plan ファイルがない場合)
plan ファイルが指定されていない場合、先に plan を実行:
terraform plan -no-color
2. 変更内容の確認と警告
plan 結果を解析し、以下を表示:
## Apply 確認
### 変更内容
| 種類 | 数 | リソース |
|------|-----|----------|
| 🟢 追加 | {N} | {リソース一覧} |
| 🟡 変更 | {N} | {リソース一覧} |
| 🔴 削除 | {N} | {リソース一覧} |
| ⚠️ 再作成 | {N} | {リソース一覧} |
{破壊的変更がある場合}
### ⚠️ 警告: 破壊的変更
以下のリソースが削除または再作成されます:
- {リソース名}: {理由}
データ損失の可能性があります。十分に確認してください。
3. ユーザー確認
必ずユーザーに確認を求める:
上記の変更を適用してよろしいですか?
- 「はい」または「apply して」で実行
- 「いいえ」または「キャンセル」で中止
4. apply 実行
ユーザーの承認後のみ実行:
plan ファイルなし:
terraform apply -no-color
インタラクティブに yes を入力する必要があるため、ユーザーに案内:
terraform apply を実行します。
確認プロンプトで「yes」を入力してください。
plan ファイルあり:
terraform apply -no-color <plan-file>
plan ファイルからの apply は確認プロンプトなしで実行される。
5. 結果レポート
## Apply 完了
### 適用結果
| 種類 | 数 |
|------|-----|
| 追加 | {N} |
| 変更 | {N} |
| 削除 | {N} |
### 出力値
{terraform output の結果(あれば)}
### 次のステップ
- `terraform state list` で作成されたリソースを確認
- `terraform output` で出力値を確認
apply エラー時の対応
State ロックエラー
Error: Error acquiring the state lock
対応:
⚠️ State がロックされています
別のプロセスが terraform を実行中の可能性があります。
- 他のターミナルで terraform が実行中でないか確認
- CI/CD パイプラインが実行中でないか確認
どうしても解除が必要な場合:
terraform force-unlock <LOCK_ID>
※ force-unlock は危険な操作です。必ず原因を確認してから実行してください。
リソース競合エラー
Error: Resource already exists
対応:
⚠️ リソースが既に存在します
対処方法:
1. import で既存リソースを取り込む
2. リソース名を変更して新規作成
3. 既存リソースを削除してから apply
「import して」と言うと import の手順を案内します。
Validate 操作
オプション
| オプション | 説明 |
|---|---|
--fix | フォーマットの自動修正を実行 |
validate 実行手順
1. フォーマットチェック
terraform fmt -check -recursive -diff
2. --fix 指定時のフォーマット修正
terraform fmt -recursive -write=true
## フォーマット修正
以下のファイルを修正しました:
- main.tf
- variables.tf
修正完了
3. 構文検証
terraform validate
成功時:
Success! The configuration is valid.
4. validate 結果レポート
成功時:
## 検証結果: ✅ 成功
### フォーマット
{フォーマット問題なし / N 件の問題あり}
### 構文検証
✅ 設定は有効です
{--fix なしでフォーマット問題がある場合}
フォーマットを修正するには、自然言語で依頼してください。例:
「Terraform のフォーマットを修正して」「フォーマットを直して」「フォーマットを自動修正して」
エラー時:
## 検証結果: ❌ エラー
### フォーマット
{フォーマットの差分}
### 構文検証
❌ {エラー数} 件のエラー
| ファイル | 行 | エラー |
|----------|-----|--------|
| main.tf | 2 | Missing required argument "ami" |
| ... | ... | ... |
### 修正方法
{エラーごとの修正方法を提案}
validate よくあるエラーと修正方法
| エラー | 原因 | 修正方法 |
|---|---|---|
| Missing required argument | 必須属性がない | 属性を追加 |
| Reference to undeclared resource | リソース参照エラー | リソース名を確認 |
| Invalid reference | 参照構文エラー | 構文を確認 |
| Unsupported attribute | 存在しない属性 | プロバイダのドキュメントを確認 |
| Cycle detected | 循環参照 | depends_on を見直し |
その他の操作
output:
terraform output
version:
terraform version
出力フォーマット
## Terraform 実行結果
### コマンド
terraform {command}
### 結果
{コマンドの出力}
### サマリー
{成功/失敗と簡潔な説明}
注意事項
- ✅ plan は安全な読み取り操作
- ✅ validate は読み取り専用で安全な操作
- ✅ apply は必ずユーザー確認を取る
- ✅ 破壊的変更がある場合は特に慎重に
- ✅
--outで plan ファイルを保存すると apply 時に同じ変更が適用される - ❌
-auto-approveは使用しない - ❌
destroyは直接実行しない(ユーザーに手動実行を案内) - ❌ plan 結果を見ずに apply しない
- ❌ 確認なしで apply を実行しない