
terraform-validation-enhancer
by goldeneggg
SKILL.md
name: terraform-validation-enhancer description: Terraform構成の依存関係管理とバリデーションを評価・強化するスキル。Terraform 1.14以上を対象に、variable validation、depends_on/lifecycle、precondition/postcondition、check blockの現状評価と改善提案を実施。(1) 既存Terraform構成の評価・診断、(2) バリデーション不足の自動検出と修正提案、(3) ベストプラクティス適用、(4) セキュリティ・可用性要件の検証が必要な場合に使用。
Terraform Validation Enhancer
Terraform構成の依存関係管理とバリデーションを体系的に評価・強化します。
概要
このスキルはTerraform 1.14以上の構成に対して以下を実施:
- 現状評価: variable validation、depends_on、lifecycle、precondition/postcondition、check blockの使用状況を分析
- 問題検出: 不足しているバリデーションや不適切な依存関係設定を特定
- 修正提案: 具体的な改善コードと実装ガイダンスを提供
- ベストプラクティス適用: Terraform 1.14の新機能を活用した推奨パターンを提案
ワークフロー
ステップ1: 構成の分析
まず、analyze_terraform.pyスクリプトを使用してTerraform構成を分析します。
python3 scripts/analyze_terraform.py <terraform_directory>
このスクリプトは以下をJSON形式で出力:
- バリデーションが不足している変数
- lifecycleブロックが推奨されるリソース
- precondition/postconditionが有用なリソース
- check blockの追加候補
ステップ2: 評価結果の確認
分析結果を確認し、以下の観点で優先度を判断:
-
Critical (警告): セキュリティやデータ保護に関わる問題
- センシティブな変数に
sensitive = trueが未設定 - 本番DBリソースに
prevent_destroyが未設定
- センシティブな変数に
-
Important (推奨): 可用性や運用品質に関わる問題
- 重要な変数にvalidationブロックが未設定
- ダウンタイムリスクのあるリソースに
create_before_destroyが未設定
-
Nice to have (提案): コード品質向上に寄与
- data sourceへのprecondition追加
- check blockによる実行時検証
ステップ3: 修正の実施
優先度に基づいて修正を実施します。具体的なパターンはreferences/validation-patterns.mdを参照してください。
3.1 Variable Validation の追加
# Before
variable "instance_count" {
type = number
description = "Number of instances"
}
# After
variable "instance_count" {
type = number
description = "Number of instances"
validation {
condition = var.instance_count >= 1 && var.instance_count <= 10
error_message = "Instance count must be between 1 and 10."
}
}
3.2 Lifecycle Block の追加
# Before
resource "aws_db_instance" "production" {
# ... configuration
}
# After
resource "aws_db_instance" "production" {
# ... configuration
lifecycle {
prevent_destroy = true # 本番DBの誤削除を防止
}
}
3.3 Precondition/Postcondition の追加
# Before
data "aws_ami" "app" {
most_recent = true
# ...
}
# After
data "aws_ami" "app" {
most_recent = true
# ...
lifecycle {
precondition {
condition = self.architecture == "x86_64"
error_message = "AMI must be x86_64 architecture."
}
}
}
3.4 Check Block の追加
check "security_compliance" {
data "aws_s3_bucket" "example" {
bucket = aws_s3_bucket.example.id
}
assert {
condition = data.aws_s3_bucket.example.server_side_encryption_configuration != null
error_message = "S3 bucket must have encryption enabled."
}
assert {
condition = data.aws_s3_bucket.example.versioning[0].enabled == true
error_message = "S3 bucket must have versioning enabled."
}
}
ステップ4: 検証
修正後、以下を実行して構成の妥当性を確認:
# 構成の検証
terraform init
terraform validate
# planで変更内容を確認
terraform plan
# 再度分析スクリプトを実行して改善を確認
python3 scripts/analyze_terraform.py <terraform_directory>
評価観点の詳細
Variable Validation
- 全ての公開変数に適切なvalidationが設定されているか
- センシティブな変数に
sensitive = trueが設定されているか - error_messageが具体的で理解しやすいか
詳細: references/validation-patterns.md#variable-validation-patterns
Resource Dependencies
depends_onは本当に必要か(暗黙的依存で十分でないか)- モジュール間の依存関係が明確に表現されているか
- 循環依存が発生していないか
詳細: references/validation-patterns.md#resource-dependencies-depends_on
Lifecycle Management
- 本番環境リソースに
prevent_destroyが設定されているか - ダウンタイムを避けるため
create_before_destroyが適切に使用されているか ignore_changesの使用が正当化されているか
詳細: references/validation-patterns.md#lifecycle-management
Preconditions and Postconditions
- 重要なdata sourceにpreconditionが設定されているか
- リソース作成の前提条件がpreconditionで検証されているか
- リソースの重要な属性がpostconditionで検証されているか
詳細: references/validation-patterns.md#preconditions-and-postconditions
Check Blocks
- インフラの稼働状態を検証するcheck blockが存在するか
- セキュリティ要件を検証するcheck blockが存在するか
- 環境別の要件がcheck blockで検証されているか
詳細: references/validation-patterns.md#check-blocks
リファレンス
Terraform 1.14 ドキュメント
詳細な構文とオプションはreferences/terraform-v1.14-docs.mdを参照してください。以下のセクションが含まれます:
- Variable Validation の完全な仕様
- Check Blocks の使用方法
- Depends On の詳細
- Lifecycle の全オプション
- Custom Conditions (precondition/postcondition)
バリデーションパターン集
実践的なコード例とベストプラクティスはreferences/validation-patterns.mdを参照してください。以下が含まれます:
- 値の範囲チェック、文字列パターンマッチ等のvalidationパターン
- 明示的依存関係、モジュール間依存等のdepends_onパターン
- リソース再作成防止、新規リソース作成後の置換等のlifecycleパターン
- Data source、resource、outputのprecondition/postconditionパターン
- インフラ検証、セキュリティコンプライアンス等のcheck blockパターン
スクリプト
analyze_terraform.py
Terraform構成ファイルを解析し、改善点を特定します。
使用方法:
python3 scripts/analyze_terraform.py <terraform_directory>
出力例:
{
"summary": {
"total_files": 5,
"total_issues": 12,
"by_severity": {
"warning": 3,
"suggestion": 6,
"info": 3
},
"by_category": {
"validation": 4,
"lifecycle": 3,
"condition": 3,
"check": 2
}
},
"issues": [
{
"file": "variables.tf",
"line": 10,
"severity": "warning",
"category": "validation",
"message": "Variable 'instance_count' lacks validation block",
"suggestion": "Consider adding validation block to ensure input correctness"
}
]
}
使用上の注意
- Terraform バージョン: このスキルはTerraform 1.14以上を対象としています
- 段階的適用: 一度に全ての修正を適用せず、優先度に基づいて段階的に実施してください
- テスト: 修正後は必ず
terraform planで影響を確認してください - チーム合意: 大規模な変更はチームで合意を得てから実施してください
トラブルシューティング
analyze_terraform.py実行時のエラー
- 権限エラー: スクリプトに実行権限を付与 (
chmod +x scripts/analyze_terraform.py) - Python バージョン: Python 3.7以上が必要
誤検知への対処
スクリプトの検出は推奨事項です。プロジェクト固有の理由で適用しない判断も有効です。その場合は:
- 理由をコメントで文書化
- チーム内で合意を記録
- 将来のレビューで再評価
関連ドキュメント
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon

