IaC Araçlarını Anlama: Cloudformation vs Terraform
Yayınlanan: 2022-03-10AWS CloudFormation ve Terraform – hangisini seçeceğinizden emin değil misiniz? Bu makale akıllıca bir karara varmanıza yardımcı olacaktır.
Bulut Bilişim, DevOps dünyasında devrim yarattı. Artık sadece bir moda kelime değil; o burada ve uygulamalarımızı geliştirme ve sürdürme şeklimizi değiştirmek için burada. Her ölçekte işletme için bulut bilişimi kullanmanız için sayısız neden olsa da, küçük bir sınırlama olsa da, altyapınızı manuel olarak sağlamanız gerekir.
Bulut sağlayıcılarınızın konsollarına gitmeli ve onlara tam olarak ne istediğinizi söylemelisiniz. Bu, küçük kullanım durumları için iyi çalışır, ancak konsolda yapılandırma değişiklikleri yapan farklı kişiler varsa ne olur? Son olarak, bakımı gitgide daha da zorlaşan süper karmaşık bir altyapıya sahip olabilirsiniz. Buluttaki Altyapıda yapılan değişiklikleri iş birliği yapmanın veya takip etmenin etkili bir yolu yoktur. Aslında var. Kod Olarak Altyapı.
Kod olarak altyapı, bulut bilişimde çok popüler bir terimdir. Kod kullanarak BT altyapınızı yönetme sürecidir. Evet bu doğru. Konsola gidip her şeyi manuel olarak yapmak yerine; Kod olarak altyapı, aka IAAC veya IAC, yapılandırma dosyaları yazmanıza olanak tanır ve ardından bulut altyapınızı sağlar. IAC bize tutarlılık, kolay ve hızlı bakım ve insan hatalarına yer bırakmama gibi avantajlar sağlar.
Amazon Web Servisleri ile IAC'yi Kullanma
AWS, kendinden sonraki bulut sağlayıcısından iki kat daha fazla pazar payına sahip, dünyanın önde gelen bulut bilişim hizmetidir. AWS'de yüzlerce ve binlerce kullanım senaryosuna hitap edebilen 200'den fazla hizmet vardır.
IAC'yi AWS ile kullanmaya başladığınızda, seçeneklerinizi genellikle AWS CloudFormation ve açık kaynak aracı Terraform ile daraltacaksınız. İkisi arasında bir seçim yapmaya çalışırken, her iki aracın da sunduğu çok sayıda özelliği anlamak oldukça bunaltıcı olabilir. Bu makalede, hangi aracın ihtiyaçlarınıza daha uygun olduğuna karar vermenize yardımcı olmak için AWS CloudFormation ve Terraform arasındaki farklara göz atacağız.
Terraform ve AWS CloudFormation: Farklar
modülerlik
IAC'yi büyük kuruluşlarda kullanırken modülerlik, doğru aracı seçmek için büyük bir faktör olabilir.
BulutFormasyonu
CloudFormation, modüller için yerel desteğe sahip değildir. Modül olarak iç içe yığınlar adı verilen bir şeyi kullanmanıza izin verir.
Örneğin, kuruluşunuzda bir S3 paketini nasıl sağlamak istediğinize ilişkin standart bir yapılandırmaya sahip olabilirsiniz. Böylece, S3 kovaları oluşturan standart bir CloudFormation şablonu oluşturursunuz. Artık bir son kullanıcı S3 kovasını oluşturmak istediğinde, bu CloudFormation şablonunu iç içe geçmiş bir yığın olarak kullanabilir ve standart bir S3 kovası oluşturabilir.
AWS'nin daha az bilinen bir hizmeti olan AWS CloudFormation'ınızın modülerliği konusunda size yardımcı olabilecek AWS Hizmet Kataloğu da vardır. Hizmet Kataloğu, uyumluluk, güvenlik, maliyet veya performans gereksinimlerini karşılamak için AWS Hizmetlerinin kapsamını sınırlamak isteyen kuruluşlar için özel olarak tasarlanmış bir AWS hizmetidir. Ve tahmin et ne oldu? AWS Service Catalog, arka uçta CloudFormation şablonlarını kullanır.
Bunu bir örnekle hızlıca anlayalım. S3 kovaları, doğru kullanılmazlarsa, gizli verileriniz için kısa sürede felakete dönüşebilir. Aynı örneği ele alalım, kuruluşunuzda S3'ü nasıl kullanmak istediğinize dair standart bir yola sahip olmak istiyorsunuz. İlk seçenek, diğer CloudFormation yığınlarında kullanılabilen ve eşit derecede iyi olan iç içe yığın şablonunu oluşturmaktır.
Kullanıcıların bu standart şablonu iç içe geçmiş bir yığın olarak kullanmasını istemiyorsanız AWS Hizmet Kataloğu'nu kullanabilirsiniz. Hizmet Kataloğu, kullanıcıların konsolun kullanıcı arayüzünden bu standart şablonu kullanmasına ve küçük özelleştirmeler için bazı parametreler belirlemesine olanak tanır. Bu, AWS Hesaplarınızda altyapının nasıl sağlandığını kontrol etmenize ve istenmeyen senaryoları önlemenize olanak tanır.
Terraform
Terraform, modüller için yerel desteğe sahiptir. AWS CloudFormation'a çok benzeyen standart konfigürasyonlar oluşturmanıza ve bunu diğer terraform konfigürasyonlarında kullanmanıza olanak tanır.
Terraform açık kaynaklı bir araç olduğundan, Terraform Kayıt Defteri'nde önceden hazırlanmış bazı açık kaynaklı modülleri de bulabilir ve kullanabilirsiniz. Ayrıca kendi konfigürasyonlarınızla kendi modüllerinizi oluşturabilir ve bunları özel bir modül kayıt defterinde barındırabilirsiniz.
Şahsen, modülerlik büyük bir gereklilik olsaydı Terraform'u CloudFormation yerine kullanmayı tercih ederdim.
CloudFormation'da yuvalanmış bir yığın kullanmak, Terraform'da modülleri kullanmak kadar kolay değildir. En önemli faktör, verileri bir CFN şablonundan iç içe geçmiş yığına geçirmenin oldukça karmaşık olabilmesidir.
CloudFormation şablonlarının paylaşılabileceği standart bir yer yoktur. AWS Hizmet Kataloğuna sahipsiniz ancak bu, Konsol aracılığıyla altyapı oluşturmaya yönelik bazı kuralları uygulamanızın bir yoludur. Hepimiz kodla ilgiliyiz. Hizmet Kataloğu'nu kullanırken, bazı karmaşık görevler CloudFormation dosyaları tarafından kapsüllenmiş olsa da, yine de Manüel olarak konsola gitme ve Altyapınızı oluşturmak için parametreleri belirleme görevini yerine getirmeniz gerekir.

Terraform ise modülleri oluşturmak, sürdürmek ve paylaşmak için belirlenmiş bir metoda sahiptir. Modüllerin tam gereksinimlerini Terraform Module Registry'de görebilir ve bunları terraform dosyalarınızda çok kolay bir şekilde kullanabilirsiniz.
Altyapı üzerinde kontrol ve yönetişim
Çalışanlarınızın AWS Hesaplarınızda oluşturabileceği kaynakları sınırlamak istiyorsanız: Hem AWS CloudFormation hem de Terraform size bunu yapmanın yollarını sunar.
Önce CloudFormation'dan bahsedelim. CloudFormation kendi başına şablonların nasıl kullanıldığı konusunda herhangi bir kontrol sağlamaz ancak AWS IAM politikalarını yalnızca AWS Hesabınızdaki kullanıcıların kaynak oluşturmak için yalnızca standart CloudFormation şablonlarını kullanmasına izin vermek için kullanabilirsiniz. S3 paketi örneğimizde, kullanıcılar için tüm "S3 Oluşturma" izinlerini sınırlandırmak ve yalnızca AWS Service Catalog veya Nested Stacks'tan S3 paketleri oluşturmalarına izin vermek isteyebilirsiniz.
Terraform, Sentinel kod aracı olarak bir politika kullanarak kullanıcılarınızın hangi kaynakları oluşturabileceğini kontrol etmenizi sağlar. Sentinel, Terraform aracılığıyla kullanıcı eylemlerine izin vermek veya bunları reddetmek için ayrıntılı, mantık tabanlı ilkeleri uygulamanıza olanak tanır. Örneğin, S3 paketleri oluşturan tüm kaynakları reddedebilir ve kullanıcıların yalnızca standart bir modülden S3 paketleri oluşturmasına izin verebilirsiniz.
Durum Yönetimi
Hem AWS CloudFormation hem de Terraform, sürdürdükleri kaynakları takip etmelidir.
Terraform , altyapınızın durumunu bir durum dosyasında saklar. Bu dosya varsayılan olarak yerel olarak depolanır, ancak onu S3 gibi uzak arka uçlarda depolayabilir ve birden çok kullanıcının aynı altyapı kümesinde değişiklik yapmasını sağlayabilirsiniz.
CloudFormation , en azından bizim görebildiğimiz bir durum dosyası tutmaz. CloudFormation yönetilen bir hizmettir, bu nedenle tüm durum bakımlarını ve kontrollerini arka planda yapar.
Hem AWS CloudFormation hem de Terraform, altyapınızda hangi değişikliklerin yapılacağını kontrol etmeniz için bir araca sahiptir. Terraform'da bir komut çalıştırabilirsiniz - “terraform planı” ve Terraform'un yapılandırma değişikliklerinizi nasıl uygulamayı planladığı. CloudFormation'da kullanıcılar, Değişiklik Kümeleri aracılığıyla bu bilgileri görebilir.
Dil
Terraform, HashiCorp tarafından oluşturulan bir dil olan HashiCorp Yapılandırma Dili, HCL'yi kullanır. Ek yerleşik özellikler ve yeteneklerle JSON'a çok benzer.
CloudFormation şablonları, YAML veya JSON biçimlerinde yazılır
Günlüğe kaydetme ve geri alma
Hem AWS CloudFormation hem de Terraform iyi günlük kaydı özelliklerine sahiptir. Tecrübelerime göre, hatalar ve sorunlar basitti (çoğunlukla).
CloudFormation: Varsayılan olarak, CloudFormation, başarısız bir yığın değişikliği durumunda tüm değişikliklerinizi geri alır. Bu iyi bir özelliktir ve herhangi bir hata ayıklama amacıyla devre dışı bırakılabilir.
Terraform: Terraform, başarısız olması durumunda değişikliklerinizi otomatik olarak geri almaz. Bu bir sorun değildir, çünkü her zaman terraform destroy komutunu çalıştırarak yarı sağlanan yapılandırmayı silebilir ve bir Terraform çalıştırmasını yeniden başlatabilirsiniz.
Dürbün
Terraform, AWS Cloud ile sınırlı değildir. Terraform ve CloudFormation arasında seçim yaparken en önemli faktör Terraform'un diğer bulut sağlayıcılarını ve hizmetlerini desteklemesidir.
Bu nedenle, birden çok bulut platformu için IAC kullanmayı planlıyorsanız, Terraform en iyi seçiminizdir. CloudFormation, güçlü bir araç olmasına rağmen yalnızca AWS ile sınırlıdır. Terraform'u kullanarak altyapıyı kurabilir ve uygulamanızı birden çok bulut platformunda dağıtabilir, böylece uygulamanızı daha kullanılabilir ve sağlam hale getirebilirsiniz.
Özellik Desteği
Genellikle, AWS yeni hizmetler ve özellikler sunarken CloudFormation, bir AWS Hizmeti olduğu için Terraform'dan önce güncellenecektir. Şu an itibariyle, her iki araç da hizmetlerin çoğunu ve bu hizmetlerin özelliklerini kapsamaktadır. Bu, Terraform kullanmanın küçük bir dezavantajı olabilir, ancak bir çözümümüz var.
Terraform kodunuz içinde bir CloudFormation yığını oluşturma olasılığınız da vardır. Bu nedenle, Terraform kullanıyorsanız ve bir özelliği yoksa, Terraform kodunuzun içinde geçici olarak bir CloudFormation yığını oluşturabilirsiniz.
Teknik Destek
Ücretli AWS teknik destek planı, CloudFormation desteğini de kapsar.
HashiCorp, Terraform'da da teknik destek için ödeme yaptı.
Çözüm
Hem AWS CloudFormation hem de Terraform güçlü ve tam gelişmiş araçlardır. Yukarıdaki farklılıklar, gereksinimlerinize göre aracı seçmek için bilinçli bir karar vermenize yardımcı olacaktır. Kişisel bir öneri olarak, gelecekte birden fazla bulut platformu kullanmayı planlıyorsanız veya şu anda birden fazla bulut kullanıyorsanız, tüm ihtiyaçlarınız için tek durak olarak Terraform'u kullanmalısınız. Yalnızca AWS için bir IAC aracı arıyorsanız, hem AWS CloudFormation hem de Terraform adil bir oyundur.
Terraform öğrenmekle ilgileniyorsanız, bu çevrimiçi kurslara göz atın.