yapayzekapromptu
Yazılım'ya dön
Yazılım

Terraform IaC Altyapı Kodu Üretme Promptu

Optimal modelClaude
Zorlukİleri
KategoriYazılım
Varyant3 adet
prompt.txt
# ROL
Sen {deneyim_yili} yıllık deneyimli bir DevOps / Platform mühendisisin. Terraform ile Infrastructure as Code yazma, bulut mimarisi tasarlama ve güvenli CI/CD pipeline kurma konularında uzmansın. HashiCorp best practices, CIS Benchmark güvenlik standartları ve FinOps maliyet optimizasyonu ilkelerini günlük işinde uygularsın.

# PROJE BAĞLAMI
- **Bulut sağlayıcı:** {cloud_provider} (AWS / GCP / Azure)
- **Proje / servis adı:** {service_name}
- **Hedef ortam:** {environment} (dev / staging / prod)
- **Birincil bölge:** {region} (örn. eu-west-1, europe-west1, westeurope)
- **Uygulama türü:** {app_type} (örn. "Node.js REST API", "Python Flask mikroservisi", "Go gRPC servisi")
- **Veritabanı:** {database_type} (PostgreSQL / MySQL / Redis / Yok)
- **Tahmini yoğun saat RPS:** {peak_rps} (örn. 500, 5000, 50000)
- **Auto-scaling sınırları:** Min {min_replicas} replika — Max {max_replicas} replika

# GÖREV — ADIM ADIM TERRAFORM MODÜLÜ

## ADIM 1 — Mimari Kararlar (Gerekçeli)
{peak_rps} ve {environment} değerlerine göre aşağıdaki kararları ver; her birini 1 cümle gerekçelendir:
- **Compute:** Container managed servis mi (ECS Fargate / Cloud Run / Container Apps) yoksa VM tabanlı mi?
- **Veritabanı tier:** Hangi instance sınıfı; single-AZ mi multi-AZ mi?
- **Cache katmanı:** Redis/Memcached gerekli mi, neden?
- **CDN:** CloudFront / Cloud CDN / Azure CDN eklenmeli mi?

## ADIM 2 — Klasör Yapısı
Aşağıdaki yapıyı oluştur ve her dosyanın amacını tek satır yorumla açıkla:
```
terraform/
├── main.tf              # Ana kaynak tanımları
├── variables.tf         # Tüm değişkenler (tip + açıklama + validasyon)
├── outputs.tf           # Önemli çıktı değerleri
├── versions.tf          # Provider sürüm kilidi ve Terraform gereksinimi
├── locals.tf            # Ortak etiketler ve yerel hesaplamalar
├── data.tf              # Mevcut kaynakları sorgulayan data source'lar
├── terraform.tfvars.example  # Güvenli örnek değerler (asla sır içermez)
└── modules/
    └── networking/       # VPC/VNet alt modülü (opsiyonel, büyük projelerde)
```

## ADIM 3 — Her .tf Dosyasının Tam İçeriği

### versions.tf
- Terraform >= 1.5 zorunlu
- {cloud_provider} provider'ı için sürüm kilidi (~> x.y)
- Remote state backend: S3 (AWS) / GCS (GCP) / AzureRM (Azure)
  - Bucket/container adı: `{service_name}-tfstate-{environment}`
  - State path: `{service_name}/{environment}/terraform.tfstate`
  - Encryption at rest zorunlu
  - State lock: DynamoDB (AWS) / GSM (GCP) / blob leases (Azure)

### variables.tf
Aşağıdaki değişkenlerin tamamını tanımla. Her birinde `description`, `type`, uygunsa `default` ve `validation` bloğu:
- `project_name` (string, zorunlu)
- `environment` (string; validation: {"dev","staging","prod"} içinde olmalı)
- `region` (string, zorunlu)
- `app_version` (string; default: "latest")
- `min_replicas` (number; validation: >= 1)
- `max_replicas` (number; validation: min_replicas'dan büyük olmalı)
- `database_instance_class` (string; sensitive=false, {environment}=="prod" için önerilen değeri varsayılan yap)
- `alert_email` (string; validation: email regex)

### locals.tf
- `common_tags`: Environment, ManagedBy="terraform", Project, ServiceName etiketlerini içeren map
- `name_prefix`: `"{service_name}-{environment}"` formatında kaynak adı öneki
- `is_production`: `var.environment == "prod"` boolean ifadesi

### data.tf
- Mevcut SSL sertifikasını data source ile getir (ACM / managed cert)
- Kullanılabilir AZ'leri getir
- {cloud_provider}=='AWS' ise caller identity (account ID doğrulama)

### main.tf — Ağ Katmanı
```hcl
# --- VPC / VNet ---
# CIDR: 10.0.0.0/16; public subnet /24 (×2 AZ), private subnet /24 (×2 AZ)
# NAT Gateway: {environment}=="prod" ise her AZ'de ayrı, diğerleri tek
# Internet Gateway: zorunlu (public subnetler için)
```

### main.tf — Compute
```hcl
# --- Uygulama Compute ---
# Container image: "{service_name}:{var.app_version}"
# Port: 3000 (app) -> 443 (LB)
# Health check: GET /health — interval 30s, healthy_threshold 2, unhealthy_threshold 3
# CPU/Memory: {peak_rps}'e uygun varsayılan öner
# Sırlar: env var olarak Secrets Manager / Secret Manager / Key Vault referansı
```

### main.tf — Güvenlik
```hcl
# --- Security Group / Firewall ---
# Inbound: 443 (0.0.0.0/0), 80 -> 443 yönlendirme; SSH/22 KAPALI
# Outbound: sadece {database_type} portu (5432/3306/6379) ve 443 (dış API)

# --- IAM ---
# Role: {service_name}-{environment}-role
# Policy: En az yetki; yalnızca Secret Manager okuma + CloudWatch log yazma
# Instance profile / workload identity bağlantısı
```

### main.tf — Veritabanı ({database_type} != "Yok" ise)
```hcl
# --- Managed DB ---
# Engine sürümü: {database_type}'ın stabil LTS sürümü
# Subnet group: sadece private subnet'ler
# multi_az: local.is_production ? true : false
# deletion_protection: local.is_production ? true : false
# Backup retention: 7 gün (prod) / 1 gün (diğerleri)
# Şifre: Secrets Manager random_password kaynağından; HARD-CODED YOK
# Storage encryption: zorunlu
```

### main.tf — Load Balancer + Auto-scaling
```hcl
# --- Application Load Balancer ---
# HTTPS listener (SSL sertifikası data.tf'den)
# HTTP -> HTTPS redirect kuralı (301)
# Target group: IP tabanlı, deregistration_delay=30

# --- Auto-scaling ---
# Scale out tetikleyici: CPU %70 > 2 dakika
# Scale in tetikleyici: CPU %30 < 10 dakika
# Cooldown: 120 saniye
```

### main.tf — Monitoring
```hcl
# --- Alarmlar ---
# cpu_high: avg CPU > %80 (5 dk) -> SNS bildirimi
# memory_high: avg bellek > %85 (5 dk) -> SNS bildirimi
# http_5xx: LB 5xx hata oranı > %1 (1 dk) -> SNS bildirimi
# db_connections: DB bağlantısı max kapasitesinin %80'ini aşarsa -> SNS
# SNS topic abonesi: var.alert_email
```

### outputs.tf
- `app_endpoint`: `https://` + LB DNS adı (uygulama URL)
- `database_host`: DB endpoint hostname — `sensitive = true`
- `load_balancer_arn`: LB ARN / ID
- `iam_role_arn`: Uygulama IAM role ARN
- `vpc_id`: Oluşturulan VPC/VNet ID'si

# KISITLAR
- Terraform >= 1.5 sözdizimi: `moved`, `check`, `import` bloğu gerektiğinde kullan
- **Hard-coded credential, IP veya hesap ID YOK** — tüm sırlar Secrets Manager referansı
- Kaynak isimlendirmesi: `"${local.name_prefix}-{kaynak_tipi}"` formatı
- `{environment} == "prod"` ise `deletion_protection = true` ve `backup_retention` >= 7 zorunlu
- Her kaynak bloğundan önce `# ---` başlıklı tek satır yorum
- `terraform.tfvars.example` dosyasında sır değerleri YOK, yalnızca format gösterimi

# ÇIKTI FORMATI
```
## 1. Mimari Özet
[4-6 madde: seçilen servisler ve {peak_rps}/{environment}'a göre gerekçeler]

## 2. Terraform Dosyaları
### versions.tf
```hcl
[tam içerik]
```
### variables.tf
```hcl
[tam içerik]
```
... (tüm dosyalar)

## 3. Deployment Adımları
```bash
# 1. Backend oluştur (ilk kez)
terraform init -backend-config=backend-{environment}.hcl

# 2. Workspace
terraform workspace select {environment} || terraform workspace new {environment}

# 3. Plan ve doğrula
terraform plan -var-file={environment}.tfvars -out=plan.out

# 4. Uygula
terraform apply plan.out
```

## 4. Production Checklist
- [ ] State backend ve DynamoDB lock tablosu oluşturuldu
- [ ] Secrets Manager'da DB şifresi ve uygulama sırları oluşturuldu
- [ ] SSL sertifikası validate edildi
- [ ] Disaster recovery: cross-region backup politikası
- [ ] Cost alert: aylık bütçe eşiği CloudWatch Billing Alarm ile kuruldu
- [ ] Runbook: "terraform destroy" için onay prosedürü yazıldı

## 5. Tahmini Aylık Maliyet
[Seçilen servisler için eu-west-1 fiyatlarıyla yaklaşık USD maliyet dökümü]
```

Bu ne işe yarar?

AWS/GCP/Azure için Terraform IaC şablonu üretir. VPC, container servisi, yönetilen DB, LB ve IAM dahil production-ready kod.

İlgili Promptlar