Terraform Proje Yapısı: Apache ve DNS İçeren Altyapı Kurulumu
Bu rehberde Terraform projelerinin doğru yapılandırılmasını öğreneceksiniz.
Amaç, bakımı kolay, ölçeklenebilir ve tekrar kullanılabilir bir altyapı düzeni kurmaktır.
Bu Rehberde Ne Öğreneceksiniz?
- Terraform proje yapısı nedir
- Basit ve karmaşık yapıların farkları
- Değişkenler ve veri kaynakları kullanımı
- Otomatik Apache kurulumlu sunucu oluşturma
- Alan adını DNS ile sunucuya bağlama
1. Terraform Proje Yapısını Anlamak
Terraform, altyapıyı kod olarak tanımlamanızı sağlar.
Her bir kaynak, bulut servisindeki gerçek bir varlığı temsil eder.
Terraform projeleri:
.tfuzantılı dosyalardan oluşurterraform initile başlatılır- Durumu (
state) backend üzerinde takip eder
Terraform, HCL (HashiCorp Configuration Language) kullanır.
Basit ve Karmaşık Yapı Yaklaşımları
Basit Proje Yapısı
- Küçük projeler için uygundur
- Az sayıda kaynak içerir
- Modül kullanılmaz
Örnek dizin yapısı:
tf/ ├── versions.tf ├── variables.tf ├── provider.tf ├── droplets.tf ├── dns.tf ├── data-sources.tf └── external/ └── name-generator.py
Bu rehber bu yaklaşımı kullanır.
Karmaşık Proje Yapısı
- Büyük ve çok ortamlı projeler için uygundur
- Modül yapısı kullanılır
- Geliştirme, test ve canlı ortamlar ayrılır
Bu yapı genellikle kurumsal projelerde tercih edilir.
1. Projeyi Başlatma
mkdir terraform-apache-proje
cd terraform-apache-proje
- Bu komut proje dizinini oluşturur.
2. Gerekli Provider Tanımı
nano versions.tf
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
- Bu dosya Terraform sürüm uyumluluğunu tanımlar.
3. Değişkenleri Tanımlama
nano variables.tf
variable "do_token" {}
variable "domain_name" {}
variable "private_key" {}
- Bu değişkenler güvenli yapı sağlar.
4. Provider Yapılandırması
nano provider.tf
provider "digitalocean" {
token = var.do_token
}
- Terraform’un API erişimini sağlar.
5. Dinamik Veri Kaynağı (Python)
mkdir external
nano external/name-generator.py
import json, time
result = {
"name": f"web-{int(time.time())}"
}
print(json.dumps(result))
- Bu script sunucuya benzersiz isim üretir.
nano data-sources.tf
data "external" "droplet_name" {
program = ["python3", "${path.module}/external/name-generator.py"]
}
Python çıktısını Terraform içinde kullanır.
6. Sunucu (Droplet) Tanımı
nano droplets.tf
data "digitalocean_ssh_key" "ssh_key" {
name = "ssh_anahtar_adi"
}
resource "digitalocean_droplet" "web" {
image = "ubuntu-20-04-x64"
name = data.external.droplet_name.result.name
region = "fra1"
size = "s-1vcpu-1gb"
ssh_keys = [
data.digitalocean_ssh_key.ssh_key.id
]
connection {
host = self.ipv4_address
user = "root"
type = "ssh"
private_key = file(var.private_key)
timeout = "2m"
}
provisioner "remote-exec" {
inline = [
"apt update",
"apt -y install apache2"
]
}
}
Bu yapı Apache’yi otomatik kurar.
7. DNS Kaydı Oluşturma
nano dns.tf
resource "digitalocean_record" "www" {
domain = var.domain_name
type = "A"
name = "@"
value = digitalocean_droplet.web.ipv4_address
}
- Alan adını sunucuya yönlendirir.
8. Planlama ve Yayına Alma
terraform init
Terraform ortamını başlatır.
terraform plan \
-var "do_token=$DO_PAT" \
-var "domain_name=$DO_DOMAIN_NAME" \
-var "private_key=$DO_PRIVATE_KEY"
- Olası değişiklikleri gösterir.
terraform apply \
-var "do_token=$DO_PAT" \
-var "domain_name=$DO_DOMAIN_NAME" \
-var "private_key=$DO_PRIVATE_KEY"
- Altyapıyı oluşturur.
Sıkça Sorulan Sorular (SSS)
1. Terraform neden dosya bazlı çalışır? Bakımı ve okunabilirliği artırmak için.
2. Provisioner kullanmak doğru mu? Basit kurulumlar için uygundur.
3. Apache otomatik başlar mı? Evet, kurulum sırasında servis aktif olur.
4. DNS ne zaman aktif olur? Genelde birkaç dakika içinde yayılır.
Sonuç
- Artık:
Terraform proje yapısını biliyorsun
Apache kurulumunu otomatikleştirdin
DNS entegrasyonu yaptın
🚀 Rabisu Bulut altyapısında bu yapıyı doğrudan kullanabilirsin.