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
Python Veri Analizi için Claude Prompt'uRedis Önbellekleme Stratejisi için Claude prompt'uLLM API Entegrasyonu için ChatGPT PromptuDockerfile ve Docker Compose Dosyası Oluşturmak için Claude PromptuTeknik Borç Analizi için Claude PromptuKod Performans Analizi ve Optimizasyon Planı için Claude Promptu