Ana içeriğe geç

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:

  • .tf uzantılı dosyalardan oluşur
  • terraform init ile 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.