Ana içeriğe geç

Yan yana

TerraformvsPulumi

Terraform ile Pulumi arasındaki fark nedir?

Güncellendi 3 dk okuma8 fark

Kısaca

Terraform altyapıyı kendi yapılandırma dili HCL ile tarif eder; Pulumi ise aynı kaynakları TypeScript ya da Python gibi dillerle tarif etmenizi sağlar.

Terraform

Terraform, 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.

Terraform sayfasını oku

Pulumi

Pulumi, bulut kaynaklarının TypeScript, Python, Go, C# ya da Java gibi genel amaçlı dillerle tanımlandığı açık kaynaklı bir kod olarak altyapı aracıdır.

Pulumi sayfasını oku

Terraform ve Pulumi karşılaştırması

ÖzellikTerraformPulumi
DilBildirimsel bir yapılandırma dili olan HCLTypeScript, JavaScript, Python, Go, C#, Java ya da YAML
Yeniden kullanımÇoğu herkese açık Terraform Registry'den gelen modüllerSeçilen dilin fonksiyonları, sınıfları ve paketleri
Önizleme ve uygulamaterraform plan, ardından terraform applypulumi preview, ardından pulumi up
StateGenellikle uzak bir depoda ya da HCP Terraform'da duran bir state dosyasıPulumi Cloud ya da S3 bucket'ı gibi sizin yönettiğiniz bir backend
TestYerleşik terraform test ve plan üzerinde denetimlerHer dilin alışılmış birim test framework'leri
EkosistemÇok sayıda modül ve örnekle en büyük toplulukDaha küçük, ama Terraform provider'larını kullanabilir
Lisans2023'ten beri Business Source License; açık kaynaklı çatallaması OpenTofuApache 2.0 lisanslı açık kaynak motor; Pulumi Cloud'un ücretsiz ve ücretli planları var
En uygun olduğu yerTek, basit ve yaygın bilinen bir dil isteyen ekiplerAltyapıyı uygulamalarının diliyle yazmak isteyen geliştirici ekipleri

Fark, açıklamalı

HashiCorp'un 2014'te yayımladığı Terraform ve ilk kez 2018'de yayımlanan Pulumi, ikisi de kod olarak altyapı araçlarıdır: ağlar, veritabanları, depolama bucket'ları ve Kubernetes nesneleri gibi bulut kaynaklarını Git'te tutulan koddan oluşturur ve güncellerler. Terraform, altyapıyı tarif etmek için tasarlanmış bildirimsel (declarative) bir dil olan HCL'i (HashiCorp Configuration Language) kullanır. Pulumi ise TypeScript, JavaScript, Python, Go, C#, Java ya da YAML ile sıradan programlar yazmanızı sağlar.

Asıl fark, altyapının nasıl yönetildiğinde değil, nasıl tarif edildiğindedir. İkisi de yönettikleri kaynakların state'ini tutar, değişiklikleri terraform plan ya da pulumi preview ile önizler, terraform apply ya da pulumi up ile uygular ve bulutlara provider'lar üzerinden ulaşır; Pulumi, Terraform provider'larını bile kullanabilir. HCL bir yapılandırmayı basit ve okunması öngörülebilir tutar; genel amaçlı bir dil ise döngüleri, fonksiyonları, sınıfları, paketleri, tip denetimini ve sıradan birim testlerini beraberinde getirir.

Lisans ve ekosistem de farklıdır. Terraform 2023'te kaynağı görülebilir (source-available) Business Source License'a geçti; topluluk çatallaması OpenTofu ise büyük ölçüde aynı şekilde çalışan açık kaynaklı bir sürümü sürdürüyor. Pulumi'nin motoru ise Apache 2.0 lisanslı açık kaynaktır. Terraform'un daha fazla modül, örnek ve onu zaten bilen mühendisle daha büyük bir topluluğu vardır; Pulumi ise altyapıyı uygulamalarıyla aynı dilde yazmak isteyen geliştiricilere hitap eder.

Sık yapılan bir yanlış, bir programlama diliyle yazıldığı için Pulumi'nin buyurgan (imperative) olduğunu düşünmektir. Program yalnızca istenen kaynakları kaydeder; Pulumi'nin motoru bunları kaydedilmiş state ile karşılaştırır ve farkları uygular, tıpkı Terraform gibi. Bir diğeri, genel amaçlı bir dilin her zaman daha basit bir altyapı demek olduğu düşüncesidir: tekrarları ortadan kaldırır, ama bir altyapı programı da her kod kadar karmaşıklaşabilir ve aynı incelemelere ve kurallara ihtiyaç duyar.

Hangisini kullanmalısınız?

Terraform şu durumlarda doğru seçim:

  • Ekibiniz her projede aynı biçimde okunan basit bir dil istiyor.
  • Var olan modüllere, örneklere ve HCL'i zaten bilen mühendislere dayanıyorsunuz.
  • Yapılandırmalar çoğunlukla fazla mantık içermeyen düz kaynak listeleri.
  • İşe alım ve ekibe uyum önemli; çünkü HCL en yaygın bilinen kod olarak altyapı dili.

Pulumi şu durumlarda doğru seçim:

  • Uygulamayı yazan geliştiriciler altyapısının da sahibi.
  • HCL'in rahatça karşılayabildiğinin ötesinde döngülere, koşullara ve yeniden kullanılabilir bileşenlere ihtiyacınız var.
  • Alıştığınız dilin tip denetimini, otomatik tamamlamasını ve birim testlerini istiyorsunuz.
  • Apache 2.0 lisanslı, açık kaynaklı bir motor istiyorsunuz.

Aynı iki depolama bucket'ı, Terraform'da ve Pulumi'de

Terraformtext
# Terraform (HCL): two buckets, one per environment
variable "environments" {
  default = ["staging", "production"]
}

resource "aws_s3_bucket" "assets" {
  for_each = toset(var.environments)
  bucket   = "example-assets-${each.key}"
  tags     = { Environment = each.key }
}
# terraform plan, then terraform apply
Pulumitext
// Pulumi (TypeScript): the same buckets with an ordinary loop
import * as aws from "@pulumi/aws";

const environments = ["staging", "production"];

for (const env of environments) {
  new aws.s3.Bucket(`assets-${env}`, {
    bucket: `example-assets-${env}`,
    tags: { Environment: env },
  });
}
// pulumi preview, then pulumi up

Sık sorulan sorular

Pulumi, Terraform'dan daha mı iyi?

Genel olarak hiçbiri daha iyi değildir. Terraform'un daha büyük bir ekosistemi ve basit, yaygın bilinen bir dili vardır; Pulumi ise altyapıyı araçları ve testleriyle birlikte genel amaçlı bir dilde yazmak isteyen ekiplere uyar.

Pulumi, Terraform provider'larını ve kodunu kullanabilir mi?

Evet. Pulumi, doğrudan desteklemediği platformlara ulaşmak için Terraform provider'larını kullanabilir ve HCL yapılandırmalarını Pulumi programlarına dönüştüren araçlar sunar. Son sürümler HCL ile yazılmış programları da çalıştırabilir.

OpenTofu nedir?

HashiCorp'un Terraform'u Business Source License'a taşımasının ardından 2023'te oluşturulan, Terraform'un açık kaynaklı bir çatallamasıdır. HCL ve aynı provider'larla büyük ölçüde aynı şekilde çalışır ve açık bir topluluk projesi olarak geliştirilir.

Daha fazla

Ayarlar