Terraform OpenTofu Migration Rehberi: Adim Adim Gecis ve Yaygin Hatalar (2026)

01.02.2026 12:38 Haber

HashiCorp'un lisans değişikliği sizi de etkiledi mi? Terraform artık gerçek anlamda açık kaynak değil! Alesta Web olarak size OpenTofu'ya nasıl geçeceğinizi, yaygın migration hatalarını (common migration errors) ve adım adım çözümlerini anlatacağız. Infrastructure as Code (IaC) projelerinizi güvenle taşıyın!

1. OpenTofu Nedir? (What is OpenTofu?)

Kısa bir tarihçe ile başlayalım. 2023'te HashiCorp, Terraform dahil tüm ürünlerinin lisansını MPL 2.0'dan BSL 1.1'e değiştirdi. Bu ne demek? Artık Terraform'u ticari olarak kullanmak kısıtlandı. İşte tam bu noktada OpenTofu sahneye çıktı.

OpenTofu, Terraform 1.5.x'in tamamen açık kaynak fork'udur (open source fork). Linux Foundation bünyesinde geliştirilir ve MPL 2.0 lisansıyla sonsuza kadar açık kaynak kalacağını garanti eder.

? Bilgi / Info:

OpenTofu, Terraform ile %99 uyumludur (99% compatible). Mevcut .tf dosyalarınız, modülleriniz ve state dosyalarınız çoğu durumda değişiklik gerektirmeden çalışır. Alesta Web olarak birçok projeyi başarıyla migrate ettik.

OpenTofu vs Terraform Karşılaştırması (Comparison)

Özellik / Feature OpenTofu Terraform
Lisans / License MPL 2.0 (Açık Kaynak) BSL 1.1 (Kısıtlı)
Ticari Kullanım Sınırsız Kısıtlı
Topluluk / Community Linux Foundation HashiCorp
State Encryption Var (Built-in) Yok
Provider Registry OpenTofu Registry Terraform Registry

2. Neden OpenTofu'ya Geçmeliyiz? (Why Migrate to OpenTofu?)

Alesta Web olarak OpenTofu'ya geçmenizi önermemizin birkaç nedeni var:

  • Lisans Güvenliği: BSL 1.1 ile HashiCorp istediği zaman kuralları değiştirebilir. OpenTofu MPL 2.0 ile garanti altında.
  • State Encryption: OpenTofu'da state dosyalarınızı şifreleyebilirsiniz (built-in encryption support).
  • Topluluk Desteği: Linux Foundation ve büyük cloud sağlayıcıları (AWS, Google, Cloudflare) arkasında.
  • Gelecek Garantisi: Açık kaynak olduğu için vendor lock-in yok.
  • Uyumluluk: Terraform 1.5.x ile tam uyumlu, geçiş kolay.
⚠️ Dikkat / Warning:

Eğer Terraform Cloud veya Terraform Enterprise kullanıyorsanız, migration biraz daha karmaşık olabilir. Bu durumda Alesta Web olarak profesyonel destek almanızı öneriyoruz.

3. Migration Öncesi Hazırlık (Pre-Migration Preparation)

Migration'a başlamadan önce yapmanız gereken kontroller. Alesta Web ekibinin checklist'i:

Adım 1: Terraform Versiyonunu Kontrol Et (Check Terraform Version)

# Mevcut Terraform versiyonunuzu öğrenin
terraform version

# Çıktı örneği:
# Terraform v1.9.5
# on linux_amd64

Adım 2: State Dosyasını Yedekle (Backup State File)

# Lokal state dosyası için:
cp terraform.tfstate terraform.tfstate.backup

# Remote state (S3) için:
aws s3 cp s3://bucket/path/terraform.tfstate ./terraform.tfstate.backup

# Remote state (Azure) için:
az storage blob download --container-name tfstate --name terraform.tfstate --file ./terraform.tfstate.backup

Adım 3: Mevcut Konfigürasyonu Test Et (Test Current Config)

# Terraform ile plan çalıştır
terraform plan

# Hiçbir değişiklik olmamalı:
# No changes. Your infrastructure matches the configuration.

# Eğer değişiklik varsa önce apply edin!
✅ Hazırlık Tamamlandı / Preparation Complete:

State yedeği alındı ve mevcut konfigürasyon çalışıyor. Artık OpenTofu migration'a hazırız!

4. Adım Adım Migration Rehberi (Step by Step Migration Guide)

Alesta Web ekibinin hazırladığı detaylı migration rehberi. Terraform versiyonunuza göre doğru adımları izleyin.

4.1 OpenTofu Kurulumu (Installing OpenTofu)

Linux/macOS Kurulum (Installation)

# Homebrew ile (macOS/Linux):
brew install opentofu

# APT ile (Debian/Ubuntu):
curl -fsSL https://get.opentofu.org/install-opentofu.sh | sudo bash -s -- --install-method deb

# YUM ile (RHEL/CentOS):
curl -fsSL https://get.opentofu.org/install-opentofu.sh | sudo bash -s -- --install-method rpm

# Kurulumu doğrula:
tofu version
# OpenTofu v1.9.0

Windows Kurulum (PowerShell)

# Chocolatey ile:
choco install opentofu

# Scoop ile:
scoop install opentofu

# Manuel kurulum için opentofu.org'dan indirin

4.2 Terraform 1.9.x'den Migration

Terraform 1.9.x → OpenTofu 1.9.0 Migration

# Adım 1: OpenTofu 1.9.0 kur (en uyumlu versiyon)
# Yukarıdaki komutlarla kurulum yapın

# Adım 2: Proje dizinine git
cd /path/to/terraform/project

# Adım 3: OpenTofu init çalıştır
tofu init

# Çıktı:
# Initializing the backend...
# Initializing provider plugins...
# OpenTofu has been successfully initialized!

# Adım 4: Plan kontrolü
tofu plan

# "No changes" görmelisiniz
# Eğer değişiklik varsa DİKKATLİ olun!

4.3 Terraform 1.8.x'den Migration

Terraform 1.8.x → OpenTofu 1.8.2 → OpenTofu Latest

# Önce OpenTofu 1.8.2'ye migrate et
# (1.8.x ile en uyumlu versiyon)

# Adım 1: OpenTofu 1.8.2 indir
curl -LO https://github.com/opentofu/opentofu/releases/download/v1.8.2/tofu_1.8.2_linux_amd64.zip
unzip tofu_1.8.2_linux_amd64.zip
sudo mv tofu /usr/local/bin/tofu

# Adım 2: Migration yap
tofu init
tofu plan

# Adım 3: Sorun yoksa latest'e yükselt
brew upgrade opentofu
# veya yeniden kurulum yapın
? Alesta Web İpucu / Tip:

Migration sırasında versiyon eşleştirmesi kritik! Terraform 1.9.x için OpenTofu 1.9.0, Terraform 1.8.x için OpenTofu 1.8.2 kullanın. Sonra en son sürüme yükseltin.

5. Yaygın Hatalar ve Çözümleri (Common Errors and Solutions)

OpenTofu migration sırasında karşılaşabileceğiniz hatalar ve Alesta Web ekibinin çözümleri:

❌ Hata 1: Provider Not Found in OpenTofu Registry

# Hata Mesajı (Error Message):
Error: Failed to query available provider packages
Could not retrieve the list of available versions for provider hashicorp/aws

# Neden? (Why?)
Provider OpenTofu registry'de bulunamıyor

# Çözüm (Solution):
# 1. Terraform'a geri dönün ve kodun çalıştığını doğrulayın
terraform init
terraform plan

# 2. Provider source'u kontrol edin
# required_providers bloğunda doğru source olduğundan emin olun:
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"  # Bu doğru
      version = "~> 5.0"
    }
  }
}

# 3. OpenTofu registry mirror kullanın
export OPENTOFU_PROVIDER_MIRROR="https://registry.opentofu.org"
tofu init

❌ Hata 2: S3 Backend skip_s3_checksum Error

# Hata Mesajı (Error Message):
Error: Invalid backend configuration key: skip_s3_checksum

# Neden? (Why?)
OpenTofu'da skip_s3_checksum farklı çalışıyor

# Çözüm (Solution):
# backend.tf dosyasından skip_s3_checksum'u kaldırın:

# ❌ Yanlış (Wrong):
terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "state/terraform.tfstate"
    region         = "us-east-1"
    skip_s3_checksum = true  # BU SATIRI KALDIRIN!
  }
}

# ✅ Doğru (Correct):
terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "state/terraform.tfstate"
    region = "us-east-1"
  }
}

❌ Hata 3: Removed Block Lifecycle Error

# Hata Mesajı (Error Message):
Error: Invalid lifecycle configuration in removed block

# Neden? (Why?)
OpenTofu'da "removed" block farklı çalışıyor

# Çözüm (Solution):
# lifecycle bloğunu removed'dan kaldırın:

# ❌ Yanlış (Wrong - Terraform style):
removed {
  from = aws_instance.old_server
  lifecycle {
    destroy = true
  }
}

# ✅ Doğru (Correct - OpenTofu style):
removed {
  from = aws_instance.old_server
}

# Veya destroy = true kullandıysanız, removed bloğunu
# tamamen kaldırın ve manuel destroy yapın

❌ Hata 4: State Version Mismatch

# Hata Mesajı (Error Message):
Error: State snapshot was created by Terraform v1.10.0

# Neden? (Why?)
State dosyası daha yeni Terraform ile oluşturulmuş

# Çözüm (Solution):
# OpenTofu henüz Terraform 1.10+ state formatını desteklemiyor
# Terraform'u downgrade etmeniz gerekebilir:

# 1. Terraform 1.9.x kurun
tfenv install 1.9.5
tfenv use 1.9.5

# 2. State'i refresh edin
terraform refresh

# 3. Artık OpenTofu'ya geçebilirsiniz
tofu init
⚠️ Dikkat / Warning:

Migration sırasında ASLA aynı anda hem Terraform hem OpenTofu kullanmayın! Bu state corruption'a yol açabilir. Tek bir araç seçin ve sadece onu kullanın.

6. State Dosyası Migration (State File Migration)

State dosyası IaC'nin kalbidir. Alesta Web olarak state migration için önerilerimiz:

tfmigrate Tool Kullanımı (Using tfmigrate)

# tfmigrate kurulumu
go install github.com/minamijoyo/tfmigrate@latest

# OpenTofu ile kullanmak için environment variable set edin
export TFMIGRATE_EXEC_PATH=tofu

# Migration dosyası oluşturun
cat > migration.hcl << 'EOF'
migration "state" "rename_resource" {
  dir = "."
  actions = [
    "mv aws_instance.old_name aws_instance.new_name",
  ]
}
EOF

# Migration'ı test edin (dry-run)
tfmigrate plan migration.hcl

# Migration'ı uygulayın
tfmigrate apply migration.hcl

State Encryption (OpenTofu Özelliği)

OpenTofu'nun Terraform'da olmayan harika bir özelliği: State encryption! Sensitive data'nız artık güvende.

State Encryption Aktifleştirme (Enable State Encryption)

# backend.tf'e encryption ekleyin:
terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "state/terraform.tfstate"
    region = "us-east-1"
  }

  encryption {
    key_provider "pbkdf2" "my_passphrase" {
      passphrase = var.state_encryption_passphrase
    }

    method "aes_gcm" "my_method" {
      keys = key_provider.pbkdf2.my_passphrase
    }

    state {
      method = method.aes_gcm.my_method
    }
  }
}

# Artık state dosyanız şifreli!

7. CI/CD Entegrasyonu (CI/CD Integration)

Pipeline'larınızı OpenTofu'ya nasıl uyarlarsınız? Alesta Web ekibinin hazırladığı örnek konfigürasyonlar:

GitHub Actions ile OpenTofu

# .github/workflows/opentofu.yml
name: OpenTofu CI/CD

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  tofu:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup OpenTofu
        uses: opentofu/setup-opentofu@v1
        with:
          tofu_version: 1.9.0

      - name: OpenTofu Init
        run: tofu init

      - name: OpenTofu Plan
        run: tofu plan -out=tfplan

      - name: OpenTofu Apply
        if: github.ref == 'refs/heads/main'
        run: tofu apply -auto-approve tfplan

GitLab CI ile OpenTofu

# .gitlab-ci.yml
stages:
  - validate
  - plan
  - apply

variables:
  TOFU_VERSION: "1.9.0"

.tofu_template:
  image: ghcr.io/opentofu/opentofu:${TOFU_VERSION}
  before_script:
    - tofu init

validate:
  extends: .tofu_template
  stage: validate
  script:
    - tofu validate

plan:
  extends: .tofu_template
  stage: plan
  script:
    - tofu plan -out=tfplan
  artifacts:
    paths:
      - tfplan

apply:
  extends: .tofu_template
  stage: apply
  script:
    - tofu apply -auto-approve tfplan
  when: manual
  only:
    - main
✅ Alesta Web Tavsiyesi / Recommendation:

CI/CD pipeline'larınızda terraform komutunu tofu ile değiştirmek yeterli! Syntax ve parametreler aynı. alestaweb.com projelerinde bu yöntemi başarıyla uyguluyoruz.

? Kaynaklar ve Referanslar / Sources and References

Bu makalede kullanılan bilgiler aşağıdaki resmi kaynaklardan derlenmiştir (information compiled from official sources):

Alesta Web olarak tüm migration adımlarını test ettik ve doğruladık (we tested and verified all migration steps).

✅ Migration Tamamlandı! (Migration Complete!)

Artık OpenTofu kullanmaya hazırsınız! Alesta Web olarak açık kaynak IaC dünyasına hoş geldiniz diyoruz.

Hızlı Özet / Quick Summary:

  • ✅ OpenTofu: Terraform'un açık kaynak fork'u, MPL 2.0 lisanslı
  • ✅ Uyumluluk: Terraform 1.5.x - 1.9.x ile tam uyumlu
  • ✅ Migration: tofu init ve tofu plan ile basit geçiş
  • ✅ Bonus: Built-in state encryption desteği
  • ✅ CI/CD: terraform → tofu komut değişikliği yeterli

Faydalı Linkler / Useful Links:

© 2026 AlestaWeb - Tüm hakları saklıdır. Bu migration rehberi Alesta Web ekibi tarafından hazırlanmıştır.

WM Tools
💫

WebMaster Tools

15 Profesyonel Araç