Altyapı Kodu (IaC)

BT altyapısını kod olarak tanımlama ve yönetme sanatı

Altyapı Kodu (IaC) Nedir?

Altyapı Kodu (Infrastructure as Code - IaC), BT altyapısını kod olarak tanımlama ve yönetme pratiğidir. Bu yaklaşım, sunucular, ağlar, depolama sistemleri ve diğer BT bileşenlerinin manuel olarak yapılandırılması yerine, kod kullanılarak tanımlanmasını ve otomatik olarak oluşturulmasını sağlar.

IaC, DevOps ve bulut bilişim çağında kritik bir bileşen haline gelmiştir. Tekrarlanabilirlik, tutarlılık, ölçeklenebilirlik ve sürüm kontrolü sağlayarak, BT altyapısının daha güvenilir ve verimli bir şekilde yönetilmesine olanak tanır.

IaC'nin Temel Prensipleri

  • Kod Olarak Altyapı
  • İdempotent Operasyonlar
  • Sürüm Kontrolü
  • Tekrarlanabilirlik
  • Test Edilebilirlik

IaC Yaklaşımları

Deklaratif Yaklaşım

Deklaratif yaklaşım, altyapının istenen durumunu tanımlar ve bu duruma nasıl ulaşılacağını belirtmez. Sistem, mevcut durumu istenen durumla karşılaştırır ve gerekli değişiklikleri yapar.

Örnekler: Terraform, AWS CloudFormation, Azure Resource Manager

Avantajlar:

  • İdempotent operasyonlar
  • Durum yönetimi
  • Daha az yan etki

Emperatif Yaklaşım

Emperatif yaklaşım, altyapının istenen durumuna ulaşmak için adım adım talimatlar belirtir. Sistem, bu talimatları sırayla uygular.

Örnekler: Chef, Puppet, Ansible (kısmen)

Avantajlar:

  • Daha fazla kontrol
  • Karmaşık işlemleri daha kolay ifade etme
  • Mevcut sistemleri daha kolay yönetme

Popüler IaC Araçları

Terraform

Terraform

HashiCorp tarafından geliştirilen açık kaynaklı bir IaC aracı. Bulut ve on-premise altyapıyı tanımlamak ve oluşturmak için kullanılır.

Özellikler:

  • Deklaratif dil (HCL)
  • Sağlayıcı ekosistemi
  • Durum yönetimi
  • Plan ve uygulama aşamaları
Ansible

Ansible

Red Hat tarafından geliştirilen açık kaynaklı bir yapılandırma yönetimi aracı. Ajantsız mimarisi ve YAML tabanlı yapılandırma dosyaları ile bilinir.

Özellikler:

  • Ajantsız mimari
  • YAML tabanlı playbook'lar
  • Geniş modül kütüphanesi
  • Basit ve öğrenmesi kolay

AWS CloudFormation

AWS'nin IaC çözümü. AWS kaynaklarını JSON veya YAML formatında tanımlar ve oluşturur.

Özellikler:

  • AWS entegrasyonu
  • Stack kavramı
  • Değişken ve çıktı yönetimi
  • Drift tespiti

IaC'nin Faydaları

Tekrarlanabilirlik

IaC, altyapı oluşturma sürecini tekrarlanabilir hale getirir. Aynı kod, aynı altyapıyı her seferinde aynı şekilde oluşturur.

Tutarlılık

IaC, farklı ortamlar (geliştirme, test, üretim) arasında tutarlılık sağlar. Bu, "benim makinemde çalışıyor" sorununu ortadan kaldırır.

Hız ve Verimlilik

IaC, altyapı oluşturma ve yapılandırma süreçlerini otomatikleştirir. Bu, manuel süreçlere göre çok daha hızlı ve verimlidir.

Sürüm Kontrolü

IaC, altyapı değişikliklerinin sürüm kontrolü altında tutulmasını sağlar. Bu, değişikliklerin izlenmesini, geri alınmasını ve denetlenmesini kolaylaştırır.

Ölçeklenebilirlik

IaC, altyapının hızlı bir şekilde ölçeklendirilmesini sağlar. Aynı kod, bir veya bin sunucu oluşturmak için kullanılabilir.

Maliyet Tasarrufu

IaC, manuel süreçlere göre daha az zaman ve kaynak gerektirir. Bu, operasyonel maliyetleri azaltır ve kaynakların daha verimli kullanılmasını sağlar.

IaC Best Practices

Modülerlik ve Yeniden Kullanılabilirlik

IaC kodunu modüler ve yeniden kullanılabilir bir şekilde tasarlamak, bakımı kolaylaştırır ve tekrarı azaltır. Ortak işlevleri paylaşılan modüllere veya kütüphanelere çıkarın.

Sürüm Kontrolü ve CI/CD

IaC kodunu sürüm kontrolü altında tutun ve CI/CD pipeline'ları kullanarak test edin ve dağıtın. Bu, değişikliklerin güvenli ve tutarlı bir şekilde uygulanmasını sağlar.

Test ve Doğrulama

IaC kodunu test etmek ve doğrulamak, hataları erken tespit etmeyi ve güvenilirliği artırmayı sağlar. Birim testleri, entegrasyon testleri ve doğrulama araçları kullanın.

Güvenlik ve Uyumluluk

IaC kodunda güvenlik ve uyumluluk gereksinimlerini dikkate alın. Güvenlik taramaları, politika kontrolleri ve uyumluluk doğrulamaları yapın.

Terraform Kod Örneği

# AWS'de bir VPC ve EC2 örneği oluşturan Terraform kodu

provider "aws" {
  region = "us-west-2"
}

# VPC oluşturma
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
  
  tags = {
    Name = "Main VPC"
  }
}

# Subnet oluşturma
resource "aws_subnet" "public" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"
  
  tags = {
    Name = "Public Subnet"
  }
}

# Internet Gateway oluşturma
resource "aws_internet_gateway" "gw" {
  vpc_id = aws_vpc.main.id
  
  tags = {
    Name = "Main IGW"
  }
}

# Route Table oluşturma
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id
  
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.gw.id
  }
  
  tags = {
    Name = "Public Route Table"
  }
}

# Subnet ile Route Table ilişkilendirme
resource "aws_route_table_association" "public" {
  subnet_id      = aws_subnet.public.id
  route_table_id = aws_route_table.public.id
}

# Security Group oluşturma
resource "aws_security_group" "web" {
  name        = "web-server-sg"
  description = "Allow HTTP and SSH traffic"
  vpc_id      = aws_vpc.main.id
  
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
  
  tags = {
    Name = "Web Server SG"
  }
}

# EC2 örneği oluşturma
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.public.id
  
  vpc_security_group_ids = [aws_security_group.web.id]
  
  tags = {
    Name = "Web Server"
  }
}

DevOps Bültenimize Abone Olun

En son DevOps haberleri, araçları ve best practice'leri hakkında güncel kalın.