Kod Olarak Altyapı
- İngilizcesi
- Infrastructure as Code
- Okunuşu
- infrıstrakçır ez kod
Kısaca
Kod olarak altyapı, sunucuları, ağları ve diğer altyapıyı araçların otomatik uyguladığı, sürüm kontrolündeki dosyalarda tanımlama pratiğidir.
Kod olarak altyapı (IaC) nedir?
Kod olarak altyapı (IaC), sanal makineler, ağlar, yük dengeleyiciler, veritabanları ve DNS kayıtları gibi altyapıyı bir web konsolunda tıklayarak ya da komutları elle çalıştırarak değil, kod dosyalarıyla yönetmek demektir. Dosyalar altyapının nasıl görünmesi gerektiğini tarif eder; bir araç bunları okur ve gerçek ortamı ona uydurur.
IaC araçlarının çoğu bildirimseldir (declarative): istenen son durumu, örneğin "bir yük dengeleyicinin arkasında iki web sunucusu" diye tarif edersiniz; araç bunu mevcut olanla karşılaştırır ve farkı kapatmak için kaynakları oluşturur, değiştirir ya da siler. Aynı yapılandırmayı iki kez uygulamak ek bir değişiklik yapmaz; bu özelliğe idempotency (eşkuvvetlilik) denir. Tipik bir iş akışı, dosyaları düzenlemek, değişiklikleri önizleyen bir plan adımı çalıştırmak, bunları pull request'te gözden geçirmek ve ardından uygulamaktır. Bilinen araçlar arasında Terraform, OpenTofu, Pulumi ve Ansible bulunur; her büyük bulut sağlayıcısı da kendi şablon biçimini sunar.
IaC'yi, ezberden pişirilen bir yemek yerine yazılı bir tarif olarak düşünün: herkes onu izleyip aynı sonucu alabilir ve tarifteki her değişiklik kayıt altındadır. Dosyalar Git gibi bir sürüm kontrol sisteminde durduğu için her değişikliğin bir geçmişi vardır, uygulama kodu gibi gözden geçirilebilir ve geri alınabilir. Aynı kod ayrıca birbirine denk geliştirme, staging ve canlı ortamlar oluşturabilir; bu da sunucuların elle yapılan ince ayarlarla zamanla birbirinden farklılaştığı yapılandırma kaymasını (configuration drift) önlemeye yardımcı olur.
Kod olarak altyapı bazen yapılandırma yönetimi ya da CI/CD ile karıştırılır. Provisioning araçları ağlar, VM'ler ve veritabanları gibi altyapının kendisini oluşturur; yapılandırma yönetimi araçları ise zaten var olan sunuculara yazılım kurar ve ayarları uygular, ancak birçok araç ikisini de bir ölçüde yapar. CI/CD pipeline'ları çoğunlukla IaC araçlarını çalıştırır, ama IaC hangi altyapının var olması gerektiğini tarif ederken CI/CD kodun nasıl derlenip test edileceğini ve yayınlanacağını otomatikleştirir.
Önemli noktalar
- IaC, altyapıyı elle konsol tıklamaları yerine kod dosyalarında tanımlar.
- Bildirimsel araçlar istenen durumu gerçeklikle karşılaştırır ve farkı uygular.
- Altyapı değişiklikleri uygulama kodu gibi sürümlenir, gözden geçirilir ve geri alınır.
- Aynı kod tutarlı ortamlar oluşturur ve yapılandırma kaymasını önlemeye yardımcı olur.
- IaC, temel bir DevOps pratiğidir ve çoğu zaman CI/CD pipeline'larından çalıştırılır.
Örnek
# main.tf: declare what should exist; the tool creates or changes resources to match
terraform {
required_providers {
docker = { source = "kreuzwerker/docker" }
}
}
resource "docker_image" "nginx" {
name = "nginx:stable"
}
resource "docker_container" "web" {
name = "web"
image = docker_image.nginx.image_id
}Sık sorulan sorular
Kod olarak altyapının faydaları nelerdir?
IaC, altyapıyı tekrarlanabilir, gözden geçirilebilir ve yeniden oluşturması kolay hale getirir. Değişiklikler sürüm kontrolünde izlenir, ortamlar tutarlı kalır ve tüm kurulum bir arızadan sonra koddan yeniden inşa edilebilir ya da yeni bir bölgeye kopyalanabilir.
Bildirimsel ve emirsel kod olarak altyapı arasındaki fark nedir?
Bildirimsel IaC, istenen son durumu tarif eder ve adımları bulmayı araca bırakır; Terraform ve OpenTofu böyle çalışır. Emirsel IaC ise çalıştırılacak tam adımları bir betik gibi sırayla listeler; bu daha fazla kontrol sağlar ama betik yeniden çalıştığında sonucu öngörmeyi zorlaştırır.
Yapılandırma kayması (configuration drift) nedir?
Yapılandırma kayması, gerçek altyapının çoğunlukla elle yapılan değişiklikler yüzünden zamanla amaçlanan yapılandırmayla uyuşmamaya başlamasıdır. IaC araçları kodu gerçekte var olanla karşılaştırarak kaymayı tespit edebilir ve ardından bildirilen durumu geri yükleyebilir.
İlgili sayfalar
- DevOpsDevOps ve Bulut, s. 13DevOps, yazılım geliştirme ile BT operasyonlarını birleştirerek yazılımın daha hızlı ve güvenilir sunulmasını sağlayan bir kültür ve pratikler bütünüdür.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- Sanal MakineDevOps ve Bulut, s. 45Sanal makine, paylaşılan fiziksel donanımda kendi işletim sistemini çalıştıran, aynı ana makinedeki diğerlerinden yalıtılmış yazılım tabanlı bilgisayardır.
- KubernetesDevOps ve Bulut, s. 30Kubernetes, konteynerli uygulamaların bir makine kümesi üzerinde dağıtılmasını, ölçeklenmesini ve yönetilmesini otomatikleştiren açık kaynaklı bir sistemdir.
- IdempotencyBackend ve API'ler, s. 23Idempotency, bir işlemin bir kez de çalışsa çok kez de çalışsa aynı sonucu üretmesi özelliğidir; böylece bir isteğin yanlışlıkla tekrarlanması güvenli olur.
- TerraformDevOps ve Bulut, s. 51Terraform, kod olarak altyapı aracıdır; bulut kaynaklarını yapılandırma dosyalarında tarif edersiniz, tek komut onları buna göre oluşturur ya da günceller.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin