Ulaşım
- Adres:Batıkent Mh. 8910 Sk. 6. Etap 1H No: 18 Yeni Toki Eyyübiye / Şanlıurfa (Yeni Alım Satım Karşısı)
- Telefon:0 (545) 528 88 93
- eMail: info@alestaweb.com
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!
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.
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.
| Ö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 |
Alesta Web olarak OpenTofu'ya geçmenizi önermemizin birkaç nedeni var:
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.
Migration'a başlamadan önce yapmanız gereken kontroller. Alesta Web ekibinin checklist'i:
# Mevcut Terraform versiyonunuzu öğrenin terraform version # Çıktı örneği: # Terraform v1.9.5 # on linux_amd64
# 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
# 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!
State yedeği alındı ve mevcut konfigürasyon çalışıyor. Artık OpenTofu migration'a hazırız!
Alesta Web ekibinin hazırladığı detaylı migration rehberi. Terraform versiyonunuza göre doğru adımları izleyin.
# 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
# Chocolatey ile: choco install opentofu # Scoop ile: scoop install opentofu # Manuel kurulum için opentofu.org'dan indirin
# 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!
# Ö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
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.
OpenTofu migration sırasında karşılaşabileceğiniz hatalar ve Alesta Web ekibinin çözümleri:
# 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 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 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 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
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.
State dosyası IaC'nin kalbidir. Alesta Web olarak state migration için önerilerimiz:
# 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
OpenTofu'nun Terraform'da olmayan harika bir özelliği: State encryption! Sensitive data'nız artık güvende.
# 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!
Pipeline'larınızı OpenTofu'ya nasıl uyarlarsınız? Alesta Web ekibinin hazırladığı örnek konfigürasyonlar:
# .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.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
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.
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).
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:
Faydalı Linkler / Useful Links:
© 2026 AlestaWeb - Tüm hakları saklıdır. Bu migration rehberi Alesta Web ekibi tarafından hazırlanmıştır.