> For the complete documentation index, see [llms.txt](https://note.onurbolatoglu.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://note.onurbolatoglu.com/packer/workflow.md).

# Workflow

#### 1. Temel Operasyonel İş Akışı

Packer'ın çalışma prensibi, ham bir işletim sistemini alıp nihai bir ürün haline getiren üç aşamalı bir üretim bandından oluşur:

* Build (İnşa): Sürecin başlatılması ve kaynak tahsisidir. Hedef platformda (AWS, VMware vb.) temel işletim sistemine sahip geçici bir sanal sunucu (Instance) ayağa kaldırılır.
* Provision (Konfigürasyon): Çalışan sunucunun özelleştirildiği aşamadır. Sistem yöneticisi tarafından belirlenen kurallar (Shell scriptleri, Ansible playbook'ları vb.) işletilerek gerekli uygulamalar ve yamalar yüklenir.
* Post-Process (Son İşlem/Teslimat): Üretilen çıktının (Artifact) paketlenmesi ve dağıtımıdır. Oluşturulan imaj sıkıştırılabilir, etiketlenebilir veya ilgili kayıt defterine (Registry) yüklenebilir.

#### 2. Yönetim Komutları

Kod tabanlı altyapı (Infrastructure as Code) süreçlerinde kullanılan temel komut setleri şunlardır:

* `packer init`: Projenin ihtiyaç duyduğu bağımlılıkların (Plugin/Eklenti) ve kütüphanelerin yerel ortama indirilmesini sağlar. (Yazılım dünyasındaki `npm install` veya `pip install` mantığıdır).
* `packer validate`: Kodun sözdizimi (Syntax) ve mantıksal bütünlüğünü kontrol eder. Kod çalıştırılmadan önce yapılan statik bir analizdir.
* `packer build`: Tanımlanan şablonun icra edildiği ve imaj üretim sürecinin tetiklendiği asıl komuttur.

#### 3. Bulut Ortamında İcra Mantığı

Özellikle AWS gibi bulut ortamlarında süreç, "Geçici Kaynak Yönetimi" prensibiyle ilerler:

1. Kaynak Tahsisi: Packer, hedef platformda geçici bir sunucu ve bu sunucuya erişim için geçici kimlik bilgileri (SSH Key/Key Pair) oluşturur.
2. Konfigürasyon: Provisioner'lar sunucuya bağlanır ve tanımlı görevleri icra eder.
3. Snapshot ve Temizlik: İşlem tamamlandığında, sunucunun o anki durumu bir imaj (AMI) olarak kaydedilir. Ardından Packer, oluşturduğu geçici sunucuyu ve güvenlik anahtarlarını imha eder. Bu, güvenlik ve maliyet yönetimi açısından kritik bir adımdır.

#### 4. Değişmez Altyapı Stratejisi

Bu yaklaşım, mevcut sistemlerin güncellenmesi yerine, her güncellemede sistemin yeniden üretilmesini esas alır.

* Versiyonlama (Versioning): `v1` versiyonlu bir sunucu üzerinde yama (patch) yapılmaz.
* Yeniden Üretim (Replacement): Bir güncelleme gerektiğinde, kaynak kod revize edilir ve `v2` etiketiyle tamamen yeni bir imaj üretilir.
* Devreye Alma (Rollout): `v2` imajından üretilen sunucular canlıya alınır, `v1` sunucuları trafikten çekilerek imha edilir. Bu yöntem, sistem kararlılığını maksimize eder.

#### 5. CI/CD Entegrasyonu ve Standardizasyon

Packer, modern DevOps süreçlerinde Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD) Pipeline'ların bir parçasıdır.

* Otomasyon: GitHub Actions veya Jenkins gibi araçlar, kod deposundaki bir değişikliği algılayarak `packer build` sürecini otomatik tetikler.
* Configuration Drift'in Önlenmesi: Manuel müdahale olmadığı için, Prod ortamındaki sunucuların konfigürasyonunun zamanla standarttan sapması (Drift) engellenmiş olur. Her sunucu, onaylanmış imajın birebir kopyasıdır.

***

Özetle: Packer İş Akışı; altyapı tanımlarının (Kod), standartlaştırılmış, test edilebilir ve versiyonlanabilir sistem imajlarına (Artifacts) dönüştürüldüğü, insan hatasını minimize eden endüstriyel bir otomasyon sürecidir.
