IaC Araçlarını Anlama: AWS CDK ve Terraform

Yayınlanan: 2022-03-31

AWS CDK ve Terraform – hangisini seçeceğinizden emin değil misiniz? Bu makale bilinçli bir karara varmanıza yardımcı olacaktır.

Bulut Bilişim, bilgi ve teknoloji dünyasında devrim yarattı. Uygulamaları dağıtma ve sürdürme şeklimizden geliştirme uygulamalarına kadar her şey Bulut Bilişim'den oldukça etkilendi. Tüm yeni uygulamalar, bulutta yerel olacak ve bulut hizmetleriyle uyumlu olacak şekilde geliştirildi.

Bulut Bilişim, bulut hizmetlerini giderek daha fazla talep gören yüksek düzeyde kullanılabilir, ölçeklenebilir ve verimli mimariler geliştirmemize yardımcı olur. Bulut bilişimdeki bu patlama ile birlikte altyapıyı bir kod olarak koruma ihtiyacı ortaya çıkıyor. Bulut kaynaklarının konsol aracılığıyla manuel olarak bakımı, izlenmesi çok zor olabilen karmaşık bir görev olabilir.

Bir kod olarak altyapı, yani IAC veya IAAC, bu sorunu çözer. IAC kullanarak kaynaklarımızı kod olarak tanımlayabilir ve bu kodu bulut hizmetlerini sağlamak için kullanabiliriz. Altyapıyı kod olarak kullanmak, birden çok geliştiricinin altyapı üzerinde işbirliği yapmasına ve geliştiriciler tarafından yapılan değişiklikleri takip etmesine olanak tanır.

AWS'de Kod Olarak Altyapı

AWS, dünya çapında en büyük ve en yaygın kullanılan bulut sağlayıcısıdır. Kendi IAC aracına, AWS CloudFormation veya AWS CDK'ye sahiptir ve ayrıca Terraform gibi 3. taraf IAC araçlarının kaynak sağlamasına olanak tanır. AWS için IAC araçlarını seçerken 3. taraf bir araç olan Terraform, AWS Tarafından Yönetilen araçlar, AWS CloudFormation ve AWS CDK ile tam bir rekabet halindedir.

Bu araçların her birinin sağladığı çok sayıda seçenek ve özellik ile doğru IAC aracını seçmek zor olabilir. Bu yazıda AWS CDK ve Terraform arasındaki farkı tartışacağız. AWS CDK, Cloudformation'ı dahili olarak kullanır, bu nedenle Cloudformation ve Terraform hakkında daha ayrıntılı bir görünüm için lütfen IAC araçlarını anlama: CloudFormation ve Terraform ile ilgili makaleye bakın.

Terraform

Terraform, başlangıçta Hashicorp tarafından geliştirilen açık kaynaklı bir Kod olarak Altyapı aracıdır. Yalnızca AWS'yi değil, diğer bulut sağlayıcılarını da destekleyen son derece doğru ve olgun bir araçtır. Terraform, tüm AWS hizmetlerini destekler ve geliştirme topluluğu, AWS'nin hizmetlerine eklediği herhangi bir yeni özelliği hemen yakalar. Hashicorp tarafından geliştirilen dilde (HCL) kod yazmamızı sağlar. HCL, altyapı kaynaklarını tanımlamak için JSON benzeri bir dildir.

AWS CDK'si

AWS CDK, AWS CloudFormation'ı çevreleyen bir sarmalayıcıdır. AWS CDK'nin çalışmasını anlamak için AWS CloudFormation hakkında biraz bilgi sahibi olmalısınız. AWS CloudFormation, AWS altyapısını YML veya JSON biçiminde tanımlamamıza olanak tanıyan, AWS tarafından yönetilen bir araçtır. JSON ve YML'yi okumak kolay olsa da gerçek programlama dilleri değildir. Döngüler ve işlevler için yerel destek yoktur, bu da büyük altyapıların bakımını giderek daha zor hale getirir. AWS CDK'nin devreye girdiği yer burasıdır.

AWS CDK, altyapınızı sağlamak için JAVA veya Python gibi tanıdık programlama dillerini kullanmanıza olanak tanıyan AWS CloudFromation'ı çevreleyen bir sarmalayıcıdır. Bu, kod yazmayı ve korumayı kolaylaştırır.

Terraform ve AWS CDK: Farklar

#1. Dil ve Kullanım Kolaylığı

AWS CDK ve Terraform arasındaki farkı anlamak için dil ve kullanım kolaylığı hayati önem taşır.

Önce Terraform'dan bahsedelim. Terraform, kaynakları ve diğer verileri, HCL'yi veya HashiCorp Yapılandırma Dili'ni tanımlamak için JSON benzeri bir dil kullanır. Oldukça basittir ve yeni başlayanlar için bile belgelerin anlaşılması ve takip edilmesi kolaydır.

S3 kovası oluşturmak için bir kod görelim.

 resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }

Kodun okunması oldukça basittir ve bu kaynağın desteklediği diğer parametreleri Terraform belgelerinde görebilirsiniz.

Daha önce de belirtildiği gibi, AWS CDK, kaynaklarımızı programlama dillerinde tanımlamamızı sağlayan bir CloudFormation sarmalayıcıdır. Bir S3 kovası oluşturmak için bir AWS CDK kodu görelim.

 import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }

Terraform kodu CDK'den biraz daha düzenli görünebilir, ancak hem Terraform hem de CDK kodları oldukça basittir. Küçük bir proje için IAC kullanmayı planlıyorsanız, hem Terraform hem de CDK, dil ve kullanım kolaylığı açısından harika seçeneklerdir.

Ancak, birçok geliştiricinin bulunduğu büyük bir proje için doğru IAC aracını seçerken Terraform'un bir dezavantajı vardır. Terraform ne kadar basit olursa olsun, yeni bir dildir ve geliştiricilerinizi, kullanılan diğer programlama dillerine benzemeyen yepyeni bir dilde eğitmeniz gerekecektir. Daha da önemlisi, Terraform'da veri işleme, diğer programlama dillerinde olduğu kadar basit değildir. Örneğin, listeler ve nesneler arasında yineleme yapmak ve değerleri dönüştürmek, özellikle yeni başlayanlar için o kadar basit değildir.

Şahsen, kullanım kolaylığını göz önünde bulundurursam AWS CDK'yi Terraform'a tercih ederim. Terraform'u kullanırken, istenen sonuçları elde etmek için geçici çözümler veya karmaşık komut dosyaları kullanmak zorunda kaldığım zamanlar oldu. Veriler üzerinde sahip olduğumuz kontrol ve verileri AWS CDK dillerinde kolayca manipüle etme yeteneği, AWS CDK için büyük bir kazançtır.

#2. Dürbün

Terraform, çok bulutlu bir IAC aracıdır; bu, Terraform'u yalnızca AWS ile değil, Azure veya GCP gibi diğer bulut sağlayıcılarıyla da kullanabileceğiniz anlamına gelir. Terraform, çoklu bulut dağıtımları oluşturmak ve uygulamanız için herhangi bir sayıda bulut sağlayıcısına sahip olmak için harika bir araçtır.

Bulut Sağlayıcının hizmetlerindeki bir sorun nedeniyle yaygın olarak kullanılan küresel platformların çöktüğü zamanlar olmuştur. Günümüzde uygulamalarınız için birden fazla bulut sağlayıcıya sahip olmak akıllıca bir karardır.

AWS CDK, IAC için bir AWS teklifidir. CDK ne kadar güçlü ve olgun olursa olsun, yalnızca AWS Cloud ile sınırlıdır.

IAC araçlarının kapsamı düşünüldüğünde, Terraform ikisinin bariz kazananıdır. Geliştiricilerinizin tüm bulut platformları için tek bir araç kullanmasını sağlamak çok mantıklı.

#3. Verim

Doğru IAC aracını seçerken performans genellikle en önemli kriter değildir, ancak büyük projelerde önemli olabilir. Terraform, kaynakları AWS SDK kullanarak dağıtırken, CDK kodu önce CloudFormation şablonlarına dönüştürülür ve ardından uygulanır.

Terraform, özellikle CDK'nin kodu CloudFormation Şablonuna dönüştürmesi için gereken süre nedeniyle AWS CDK'den biraz daha hızlı çalışır.

#4. modülerlik

Modüller oluşturmak için hem Terraform hem de AWS CDK kullanılabilir. Terraform, modüller için yerel desteğe sahiptir. Kendi modüllerinizi oluşturabilir ve bunları kuruluşunuzda kullanmak üzere özel bir modül kayıt defterinde barındırabilirsiniz. Terraform ayrıca genel modülleri barındırmak ve kullanmak için bir genel modül kaydına sahiptir.

AWS CDK'de aynı sonucu elde etmek için yeniden kullanılabilir işlevler, sınıflar oluşturabilir ve bu kodu kuruluşunuzda paylaşabilirsiniz. Bu, diğer AWS IAC aracı olarak AWS CDK'da büyük bir artıdır – CloudFormation, modüller olarak kod oluşturmanıza ve yeniden kullanmanıza izin vermez. Bu gereksinimi elde etmek için CloudFormation'da iç içe geçmiş yığınları kullanabilirsiniz ancak AWS CDK kullanmak çok daha uygun bir alternatiftir.

Sonuç olarak, her iki araç da bu açıdan benzer.

#5. Kontrol ve Yönetim

Sonuç olarak, AWS Konsoluna tüm erişim, AWS'nin Kimlik Yönetim Hizmeti olan IAM tarafından kontrol edilir. Belirli eylemlere izin vermek ve bunları reddetmek için IAM politikalarını hem AWS CDK hem de Terraform ile kullanabilirsiniz. IAM, hesabınızda hangi işlemlerin yapılabileceği üzerinde ayrıntılı kontrol sahibi olmanızı sağlar.

Hesap kaynaklarına erişimi kontrol etmek için IAM kullanmaya ek olarak, Terraform, bir kod çerçevesi olarak Sentinel olan bir politika sunar. Sentinel, bir kullanıcının eylemlerini Terraform aracılığıyla doğru bir şekilde kontrol etmek için ayrıntılı politikalar yazmanıza olanak tanır.

Çözüm

AWS CDK, CloudFormation'ı dahili olarak kullandığından, AWS CDK ve Terraform arasındaki farkları daha iyi anlamak için CloudFormation ve Terraform makalesini incelemenizi öneririm.

Genel olarak, hem AWS CDK hem de Terraform olgun ve güçlü araçlardır. Veri işleme söz konusu olduğunda Terraform'un hafif bir dezavantajı vardır. Ancak, deneyimlerime göre, Terraform yazma konusunda daha rahat olduğunuzda, geçici çözümleri kullanmak ve veri dönüştürmeleri yapmak daha kolay hale geliyor. Çoklu bulut operasyonları için Terraform bariz bir seçimdir; Ancak, bulut sağlayıcınız olarak AWS'yi kullanmak istiyorsanız, AWS CDK mükemmel bir alternatiftir.