HashiCorp’un DevOps dünyasında sıklıkla kullanılan araçlarından Vagrant ve Terraform’u sizlere anlatacağımı daha önceki makalede belirtmiştim. Hatta firma ve kurucusu Mitchell Hashimoto hakkında bilgileri sizlere anlatmıştım. Okumayanlar bu linkten o yazıya erişebilirler. Bu yazıyıda ise en sık kullanılan Infrastructure as a Code araçlarından bir tanesi olan Terraform’u inceleyeğiz. Amacım sizlere tüm detayları ile Terraform’u anlatmak olmayacak, Terraform kullanarak Azure üzerinde sanal makine oluşturmaya kadar devam edecek bir makale serisi yapmak olacak.
İsterseniz Terraform nedir? Nerelerde kullanılır? Gibi temel bir giriş ile başlayalım. Sonrasında diğer detaylar ile devam edelim. Terraform, altyapının güvenli ve verimli bir şekilde oluşturulması, değiştirilmesi ve versiyonlandırılması için bir araçtır. Terraform, mevcut ve popüler servis sağlayıcılarının yanı sıra özel kurum içi çözümleri yönetebilir. Yukarıda bahsettiğimgibi ben bu makale serisinde Azure üzerinde ilerleyeceğim. Yazının ilerleyen bölümlerinde Terraform Provider’lardan bahsedeceğim orada Terraform tarafından kullanılan kaynakları da daha detaylı görebileceksiniz.
Terraform’un ne olduğu, ne işe yaradığı konusu daha netlik kazansın diye kısa bir senaryo ile devam etmek istiyorum. Biliyorsunuz birçok kurumsal firmanın gündeminde Multi-Cloud yani çoklu bulut senaryoları mevcut, bunun nedenlerini şu şekilde özetleyebiliriz hata toleransını arttırmak için altyapıyı birden çok bulutta yaymak, tek bir bulut hizmet sağlayıcısı ve tek bölgesinde yaşanacak kesintiler yerine bu riski dağıtmak firmalara çok mantıklı gelmektedir. Ancak bulut sağlayacıların altyapı yönetimi için mevcut olan araçları yine o firmalara özgü olmakta ve bu tarz multi cloud dağıtımlarını gerçekleştirmeyi zorlaştırmakta. AWS için bu araç CloudFormation olurken, Google Cloud Platform için Deployment Manager, Azure içinse de Resource Manager olmakta. Lütfen böyle çoklu bir bulut yapısını yönettiğinizi düşünün hangi araçı ne zaman kullanacağınızı hangi kodu nereye yazacağınızı bile karıştıracaksınızdır 🙂 Bu noktada yardıma Terraform gelmekte ve bulut bağımsız çapraz bulut bağımlılıklarını ele almak için tek bir konfigürasyonun kullanılmasına izin verir. Çok büyük yapılara sahip firmalar için multi-cloud altyapıları oluşturmasına yardımcı olarak yönetimi ve düzenlemeyi basitleştirir.
Vagrant’ta bahsettiğim kavramlardan bir tanesi olan Providers’a sıra geldi, ama burada dikkat etmeniz gereken Vagrant sadece sanallaştırma ortamları birer Providers’ken Terraform’da durum biraz daha farklı. Terraform, fiziksel makineler, sanal makineler, switch’ler, container’lar ve daha fazlası gibi altyapı kaynaklarını oluşturmak, yönetmek ve güncellemek için kullanılır. Hemen hemen her türlü altyapı türü Terraform’da bir kaynak -resource olarak temsil edilebilir. İşte Vagrant Providers’taki fark burada daha net görünmekte, Terraform Provider’lar, API etkileşimlerini anlar ve kaynakları belirler. Provider’lara örnekler IaaS’ta AWS, GCP, Microsoft Azure iken PaaS’ta Heroku ve SaaS’ta Terraform Enterprise, DNSimple, CloudFlare verilebilir. Tüm Proivder’lara bu linkten ulaşabilirsiniz.
Terraform’u indirmek için bu linkten aşağıdaki sayfaya gitmeniz ve size uygun işletim sistemine ait paketi kurmanız gerekmektedir.
Linkten indirmiş olduğum terraform_0.11.8_windows_amd64.zip dosyasını istediğiniz bir klasöre çıkarabilirsiniz ben aşağıdaki ekran görüntüsünde gördüğünüz path’e çıkardım ve terraform – version komutu ile doğrulama yapıyorum.
Terraform, Cloud Shell’de varsayılan olarak yüklü olarak gelmektedir. Azure portal’a hesabım ile login oluyorum ve Cloud Shell’e terraform –version komutunu çalıştırarak burada kontrol işlemini gerçekleştiriyorum.
Terraform ile Azure VM Provisioning makale serisinin ilkini böylelikle tamamlamış oluyorum. Serinin ikinci makalesinde biraz daha Terraform’u inceleyeğiz ve Azure’a Terraform erişimini yapıp, Terraform ortam değişkenlerini yapılandıracağız.
Bir başka Azure yazısında görüşmek üzere.
Ka®a