3.4 KiB
01 - Test Terraform IaC
Bu asamanin amaci test Hetzner Cloud Project icinde minimum IaaS kaynaklarini Terraform ile olusturmaktir. Bu dokuman tek basina uygulanabilir olacak sekilde yazilmistir.
Kapsam
Terraform test ortaminda sunlari olusturur:
- Private network:
iklim-test-net - Subnetler:
- App/Swarm subnet:
10.10.10.0/24 - DB subnet:
10.10.20.0/24
- App/Swarm subnet:
- Firewall:
- Public ingress: sadece
22/tcp,80/tcp,443/tcp - Private ingress:
07-private-network-port-matrisi.mddosyasindaki test kurallari
- Public ingress: sadece
- SSH key
- Placement group:
test-spread - Server:
test-swarm-01test-db-01
- Ansible inventory output
Terraform DB yazilimini kurmaz. DB node sadece makine, network ve firewall seviyesinde hazirlanir.
Onerilen Dosya Yapisi
terraform/
hetzner/
test/
versions.tf
providers.tf
variables.tf
locals.tf
network.tf
firewall.tf
placement.tf
servers.tf
outputs.tf
terraform.tfvars.example
terraform.tfvars commit edilmeyecek. .gitignore icinde ignore edilmelidir.
Degiskenler
Minimum degiskenler:
hcloud_token = "secret"
environment = "test"
location = "fsn1"
image = "ubuntu-24.04"
server_type_swarm = "cx32"
server_type_db = "cx42"
admin_ssh_public_key_path = "~/.ssh/id_ed25519.pub"
admin_allowed_cidrs = ["X.X.X.X/32"]
location icin tek lokasyonla baslanir. Farkli region/lokasyon felaket kurtarma bu asamada konu disidir; ileride dokumana eklenmelidir.
Server Rolleri
| Server | Private IP | Rol |
|---|---|---|
test-swarm-01 |
10.10.10.11 |
Swarm manager + app worker + Gitea runner |
test-db-01 |
10.10.20.11 |
Manuel DB kurulumu icin hazir DB node |
Private IP'ler Terraform icinde sabit tanimlanmalidir. Ansible inventory ve firewall kurallari deterministik kalir.
Firewall Kurallari
Public ingress:
| Port | Kaynak | Hedef |
|---|---|---|
22/tcp |
admin_allowed_cidrs |
Tum test node'lari |
80/tcp |
0.0.0.0/0, ::/0 |
test-swarm-01 |
443/tcp |
0.0.0.0/0, ::/0 |
test-swarm-01 |
Public ingress icin 8200/tcp, 5432/tcp, 27017/tcp, 5672/tcp, 15672/tcp, 6379/tcp, 2379/tcp, 9180/tcp, 9090/tcp, 3000/tcp acilmayacak.
Private ingress icin 07-private-network-port-matrisi.md kaynak alinacak.
Placement Group
test-spread placement group type = "spread" olacak. Testte iki server oldugu icin bu grup test-swarm-01 ve test-db-01 makinelerinin farkli fiziksel host'lara dagitilmasini hedefler.
Not: Spread placement group farkli kabinet veya lokasyon garantisi degildir; tek fiziksel host arizasinin etkisini azaltir.
Terraform Cikti Beklentisi
outputs.tf minimum su bilgileri uretmelidir:
output "ansible_inventory_yaml" {
sensitive = false
}
output "test_private_ips" {
sensitive = false
}
output "test_public_ips" {
sensitive = false
}
Inventory output'u daha sonra ansible/inventory/generated/test.yml dosyasina yazilabilir. Inventory dosyasinda secret bulunmayacaksa commit edilebilir; secret veya token icerirse commit edilmeyecek.
Kabul Kriterleri
terraform plansadece test Hetzner Project token'i ile calisir.terraform applysonrasinda 2 server olusur.- Iki server private network uzerinden birbirine erisebilir.
- Public internetten sadece
22,80,443firewall seviyesinde aciktir. - Vault
8200public'ten kapali kalir. - Terraform state repo'ya commit edilmez.