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ı okuPulumi
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ı okuTerraform ve Pulumi karşılaştırması
| Özellik | Terraform | Pulumi |
|---|---|---|
| Dil | Bildirimsel bir yapılandırma dili olan HCL | TypeScript, JavaScript, Python, Go, C#, Java ya da YAML |
| Yeniden kullanım | Çoğu herkese açık Terraform Registry'den gelen modüller | Seçilen dilin fonksiyonları, sınıfları ve paketleri |
| Önizleme ve uygulama | terraform plan, ardından terraform apply | pulumi preview, ardından pulumi up |
| State | Genellikle 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 |
| Test | Yerleşik terraform test ve plan üzerinde denetimler | Her dilin alışılmış birim test framework'leri |
| Ekosistem | Çok sayıda modül ve örnekle en büyük topluluk | Daha küçük, ama Terraform provider'larını kullanabilir |
| Lisans | 2023'ten beri Business Source License; açık kaynaklı çatallaması OpenTofu | Apache 2.0 lisanslı açık kaynak motor; Pulumi Cloud'un ücretsiz ve ücretli planları var |
| En uygun olduğu yer | Tek, basit ve yaygın bilinen bir dil isteyen ekipler | Altyapı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
# 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// 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 upSı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.