取り組みの背景 — AI がインフラコードを書く時代
Infrastructure as Code(IaC)は、クラウドインフラをコードとして管理する手法として広く普及しました。しかし、Terraform の HCL(HashiCorp Configuration Language)は独特の構文を持ち、クラウドプロバイダごとに膨大なリソース定義を覚える必要があります。
Antigravity の AI エージェントを活用すれば、自然言語でインフラ要件を伝えるだけで Terraform コードを自動生成し、セキュリティやコストの観点から AI がレビューしてくれるワークフローを構築できます。
この記事で学べること:
- Antigravity で Terraform プロジェクトを効率的に扱うための設定
- AI エージェントによる Terraform コードの自動生成テクニック
terraform planの差分を AI にレビューさせる実践的なワークフロー- セキュリティ・コスト最適化のための AI チェックリスト構築
対象読者: Terraform の基本を理解しており、AI を活用して IaC ワークフローを効率化したいエンジニア
前提知識と環境準備
必要なツール
Antigravity と Terraform を連携させるために、以下の環境を整えましょう。
# Terraform のインストール確認
terraform --version
# Terraform v1.10.x 以上を推奨
# Antigravity のインストール確認
# Antigravity IDE が最新版であることを確認
# AWS CLI(例として AWS を使用)
aws --version
# aws-cli/2.x.x 以上プロジェクト構成
AI と効率よく作業するには、Terraform プロジェクトの構成を明確にしておく点が肝心です。
infra/
├── environments/
│ ├── dev/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── terraform.tfvars
│ ├── staging/
│ └── production/
├── modules/
│ ├── networking/
│ ├── compute/
│ ├── database/
│ └── monitoring/
├── .antigravity/
│ └── agents.md # AI エージェント設定
└── scripts/
└── plan-review.sh # AI レビュー自動化スクリプト
Antigravity の IaC エージェント設定
agents.md によるコンテキスト提供
Antigravity のエージェントに Terraform プロジェクトの文脈を与えるため、.antigravity/agents.md を作成します。
# Infrastructure Agent Configuration
## Project Context
- Cloud Provider: AWS (ap-northeast-1)
- Terraform Version: >= 1.10
- State Backend: S3 + DynamoDB locking
- Environments: dev, staging, production
## Coding Standards
- All resources must have Name and Environment tags
- Use modules for reusable components
- No hardcoded credentials — use AWS IAM roles
- Enable encryption at rest for all storage resources
- VPC flow logs must be enabled in all environments
## Security Requirements
- No public S3 buckets unless explicitly approved
- All security groups must have explicit egress rules
- RDS instances must not be publicly accessible
- Enable AWS CloudTrail in all accountsこの設定により、AI エージェントは Terraform コードを生成する際に、プロジェクト固有の要件を自動的に考慮します。
カスタムコマンドの活用
Antigravity のカスタムコマンドを設定して、Terraform 作業を効率化できます。
{
"customCommands": {
"tf-gen": {
"description": "自然言語からTerraformコードを生成",
"prompt": "以下の要件に基づいてTerraformコードを生成してください。agents.mdのセキュリティ要件を遵守し、変数化を徹底してください: "
},
"tf-review": {
"description": "Terraform planの出力をAIレビュー",
"prompt": "以下のterraform plan出力をレビューしてください。セキュリティリスク、コスト影響、ベストプラクティス違反を指摘してください: "
}
}
}AI による Terraform コード自動生成
基本的な生成フロー
Antigravity のエージェントに自然言語でインフラ要件を伝え、Terraform コードを生成する実例を見てみましょう。
プロンプト例:
「本番環境用の RDS PostgreSQL インスタンスを作成してください。マルチ AZ 構成で、暗号化を有効にし、自動バックアップを7日間保持する設定にしてください。」
AI が生成するコード:
# modules/database/main.tf
resource "aws_db_subnet_group" "main" {
name = "${var.project_name}-${var.environment}-db-subnet"
subnet_ids = var.private_subnet_ids
tags = {
Name = "${var.project_name}-${var.environment}-db-subnet"
Environment = var.environment
ManagedBy = "terraform"
}
}
resource "aws_db_instance" "postgresql" {
identifier = "${var.project_name}-${var.environment}-postgres"
engine = "postgres"
engine_version = var.postgres_version
instance_class = var.db_instance_class
# ストレージ設定
allocated_storage = var.allocated_storage
max_allocated_storage = var.max_allocated_storage
storage_type = "gp3"
storage_encrypted = true # 暗号化を有効化
kms_key_id = var.kms_key_arn
# ネットワーク設定
db_subnet_group_name = aws_db_subnet_group.main.name
vpc_security_group_ids = [var.db_security_group_id]
publicly_accessible = false # パブリックアクセス禁止
# 高可用性
multi_az = var.environment == "production" ? true : false
# バックアップ設定
backup_retention_period = 7
backup_window = "03:00-04:00"
maintenance_window = "sun:04:00-sun:05:00"
# 削除保護
deletion_protection = var.environment == "production" ? true : false
skip_final_snapshot = var.environment != "production"
final_snapshot_identifier = var.environment == "production" ? "${var.project_name}-final-snapshot" : null
tags = {
Name = "${var.project_name}-${var.environment}-postgres"
Environment = var.environment
ManagedBy = "terraform"
}
}
# 出力: 接続情報
# endpoint = aws_db_instance.postgresql.endpoint
# port = aws_db_instance.postgresql.portAI は agents.md のセキュリティ要件に基づき、暗号化の有効化、パブリックアクセスの禁止、環境ごとの条件分岐を自動的に組み込みます。
モジュール間の依存関係を考慮した生成
複数のモジュールにまたがるインフラを一括生成する場合、AI エージェントは依存関係を自動で解析します。
# environments/production/main.tf
module "networking" {
source = "../../modules/networking"
project_name = var.project_name
environment = "production"
vpc_cidr = "10.0.0.0/16"
# AI が適切な AZ 数を提案
availability_zones = ["ap-northeast-1a", "ap-northeast-1c", "ap-northeast-1d"]
}
module "database" {
source = "../../modules/database"
project_name = var.project_name
environment = "production"
private_subnet_ids = module.networking.private_subnet_ids # 依存解決
db_security_group_id = module.networking.db_security_group_id
kms_key_arn = module.encryption.kms_key_arn
postgres_version = "16.4"
db_instance_class = "db.r6g.large"
allocated_storage = 100
max_allocated_storage = 500
}
module "monitoring" {
source = "../../modules/monitoring"
project_name = var.project_name
environment = "production"
db_identifier = module.database.db_instance_id # 依存解決
alarm_sns_topic_arn = var.alarm_sns_topic_arn
}terraform plan の AI レビューワークフロー
自動レビュースクリプト
terraform plan の出力を AI エージェントにレビューさせるスクリプトを構築します。
#!/bin/bash
# scripts/plan-review.sh
# terraform plan の出力を AI にレビューさせる
set -euo pipefail
ENVIRONMENT="${1:-dev}"
PLAN_FILE="/tmp/tfplan-${ENVIRONMENT}.out"
echo "=== Terraform Plan for ${ENVIRONMENT} ==="
cd "environments/${ENVIRONMENT}"
# plan を実行し、出力をファイルに保存
terraform plan -out="${PLAN_FILE}" -no-color 2>&1 | tee /tmp/plan-output.txt
# 変更の概要を抽出
CHANGES=$(terraform show -no-color "${PLAN_FILE}" 2>/dev/null)
echo ""
echo "=== AI Review Request ==="
echo "以下の内容を Antigravity エージェントに渡してレビューを依頼します"
echo ""
cat <<EOF > /tmp/review-request.txt
## Terraform Plan Review Request
### Environment: ${ENVIRONMENT}
### Plan Output:
\`\`\`
${CHANGES}
\`\`\`
### Review Checklist:
1. セキュリティリスクはないか
2. コストへの影響は妥当か
3. 本番環境への影響範囲は適切か
4. ベストプラクティスに従っているか
5. ロールバック可能な変更か
EOF
echo "レビューリクエストを /tmp/review-request.txt に保存しました"AI レビューの観点
Antigravity エージェントは、以下の観点から terraform plan の出力をレビューします。
セキュリティチェック:
- セキュリティグループの 0.0.0.0/0 への開放がないか
- S3 バケットのパブリックアクセス設定
- 暗号化が有効化されているか
- IAM ポリシーが最小権限原則に従っているか
コスト分析:
- インスタンスタイプの適正性
- リザーブドインスタンスとの比較
- 不要なリソースが含まれていないか
可用性チェック:
- マルチ AZ 構成が適切か
- バックアップ設定が十分か
- ヘルスチェックが設定されているか
セキュリティ・コスト最適化の AI チェックリスト
Sentinel ポリシーの AI 生成
HashiCorp Sentinel と Antigravity を組み合わせ、ポリシーを AI で生成・管理する方法です。
# sentinel/policies/enforce-encryption.sentinel
# AI が生成したセキュリティポリシー
import "tfplan/v2" as tfplan
# すべての S3 バケットで暗号化が有効か検証
s3_buckets = filter tfplan.resource_changes as _, rc {
rc.type is "aws_s3_bucket" and
(rc.change.actions contains "create" or rc.change.actions contains "update")
}
encryption_check = rule {
all s3_buckets as _, bucket {
bucket.change.after.server_side_encryption_configuration is not null
}
}
# すべての RDS インスタンスで暗号化が有効か検証
rds_instances = filter tfplan.resource_changes as _, rc {
rc.type is "aws_db_instance" and
(rc.change.actions contains "create" or rc.change.actions contains "update")
}
rds_encryption_check = rule {
all rds_instances as _, db {
db.change.after.storage_encrypted is true
}
}
main = rule {
encryption_check and rds_encryption_check
}コスト見積もりの自動化
# Infracost と Antigravity を連携させたコスト分析
# AI がコスト見積もりを解析し、最適化提案を出力
infracost breakdown --path environments/production \
--format json \
--out-file /tmp/cost-estimate.json
# AI に解析を依頼
echo "コスト見積もり結果を Antigravity エージェントに渡し、
最適化の余地がないか分析してもらいます"実践:CI/CD パイプラインとの統合
GitHub Actions × Antigravity × Terraform
# .github/workflows/terraform-ai-review.yml
name: Terraform AI Review
on:
pull_request:
paths:
- 'infra/**'
jobs:
plan-and-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: "1.10.0"
- name: Terraform Init
working-directory: infra/environments/dev
run: terraform init
- name: Terraform Plan
working-directory: infra/environments/dev
run: |
terraform plan -no-color -out=tfplan 2>&1 | tee plan-output.txt
- name: AI Security Review
run: |
# plan 出力を AI レビューに送信
echo "## AI Infrastructure Review" >> $GITHUB_STEP_SUMMARY
echo "Plan output saved for AI agent review" >> $GITHUB_STEP_SUMMARY
- name: Cost Estimation
uses: infracost/actions/setup@v3
with:
api-key: ${{ secrets.INFRACOST_API_KEY }}
- name: Generate Cost Report
run: |
infracost breakdown \
--path infra/environments/dev \
--format tableよくあるエラーと対処法
State ロックの競合
AI エージェントが同時に複数の terraform apply を実行しようとすると、State ロックの競合が発生します。
# エラーメッセージ
# Error: Error acquiring the state lock
# 対処法: ロック情報を確認して解放
terraform force-unlock <LOCK_ID>
# 予防策: CI/CD パイプラインでの同時実行制限
# GitHub Actions の concurrency 設定を活用AI 生成コードの型エラー
AI が生成した HCL コードに型の不一致がある場合は、terraform validate で事前検証します。
# 生成後に必ず実行
terraform validate
# 出力例:
# Success! The configuration is valid.まとめ — AI × IaC が変えるインフラ管理の未来
Antigravity × Terraform の統合ワークフローにより、以下の成果が得られます。
- コード生成の高速化 — 自然言語でインフラ要件を伝えるだけで、セキュリティ要件を満たした Terraform コードが自動生成される
- レビューの自動化 —
terraform planの出力を AI が自動レビューし、セキュリティリスクやコスト影響を即座に指摘 - ポリシーの一貫性 —
agents.mdに定義したルールが全てのコード生成に反映され、チーム全体で一貫したインフラ品質を維持 - 学習コストの削減 — HCL の細かな構文を覚えなくても、AI がベストプラクティスに沿ったコードを生成
AI を活用した IaC ワークフローは、インフラエンジニアの生産性を飛躍的に向上させます。まずは小規模な開発環境から試して、徐々に本番環境へと適用範囲を広げていきましょう。
内部リンク:
- Antigravity × Cloudflare Workers で構築する AI エッジアプリケーション
- Antigravity の AI テスト自動生成
- GitHub Actions × Antigravity の CI/CD ワークフロー