Azure'da Terraform projeleri için tümleştirme testleri uygulama

Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform kullanarak,HCL söz dizimlerini kullanarak yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, Azure gibi bulut sağlayıcısını ve bulut altyapınızı oluşturan öğeleri belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.

Tümleştirme testleri, yeni sunulan bir kod değişikliğinin var olan kodu bozmadığını doğrular. DevOps'ta sürekli tümleştirme (CI), kod tabanı her değiştiğinde, örneğin biri bir çekme isteğini bir Git deposuna birleştirmek istediğinde, sistemin tamamını oluşturan bir süreçtir. Aşağıdaki listede tümleştirme testlerinin yaygın örnekleri yer alır:

  • Lint ve biçim gibi statik kod çözümleme araçları.
  • Yapılandırma dosyasının söz dizimini doğrulamak için terraform validate komutunu çalıştırın.
  • Yapılandırmanın beklendiği gibi çalıştığından emin olmak için terraform planını çalıştırın.

Bu makalede şunların nasıl yapılacağını öğreneceksiniz:

  • Terraform projeleri için tümleştirme testinin temellerini öğrenin.
  • Sürekli tümleştirme işlem hattı yapılandırmak için Azure DevOps kullanın.
  • Terraform kodunda statik kod analizini çalıştırın.
  • Yerel makinede Terraform yapılandırma dosyalarını doğrulamak için terraform validate çalıştırın.
  • Terraform yapılandırma dosyalarını uzak hizmetler açısından doğrulamak için terraform plan çalıştırın.
  • Sürekli tümleştirmeyi otomatikleştirmek için Azure Pipeline kullanın.

1. Ortamınızı yapılandırma

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz hesap oluşturun.
  • Azure DevOps organizasyonu ve proje: Henüz yoksa, bir Azure DevOps organizasyonu oluşturun .

  • Terraform Derleme & Yayın Görevleri uzantısını: Terraform derleme/yayın görevleri uzantısını Azure DevOps kuruluşunuza yükleyin.

  • Azure Aboneliğinize Azure DevOps erişimi verme: Azure Pipelines'ın Azure aboneliklerinize bağlanmasına izin vermek için adlı terraform-basic-testing-azure-connection bir Azure hizmet bağlantısı oluşturun

  • Örnek kod ve kaynaklar:GitHub'dan tümleştirme testi projesini indirin. Örneği indirdiğiniz dizin,örnek dizini olarak adlandırılır.

2. Yerel Terraform yapılandırmasını doğrulama

terraform validate komutu, Terraform dosyalarınızı içeren dizindeki komut satırından çalıştırılır. Bu komutların ana hedefi söz dizimini doğrulamaktır.

  1. Örnek dizinde src dizinine gidin.

  2. Çalışma dizinini başlatmak için terraform init çalıştırın.

    terraform init
    
  3. Yapılandırma dosyalarının söz dizimini doğrulamak için terraform validate komutunu çalıştırın.

    terraform validate
    

    Önemli noktalar:

    • Terraform yapılandırmasının geçerli olduğunu belirten bir ileti görürsünüz.
  4. main.tf dosyasını düzenleyin.

  5. 5. satıra, söz dizimini geçersiz kılan bir yazım hatası ekleyin. Örneğin, var.location yerine var.loaction yazın

  6. Dosyayı kaydedin.

  7. Doğrulamayı yeniden çalıştırın.

    terraform validate
    

    Önemli noktalar:

    • Hatadaki kod satırını ve hatanın açıklamasını gösteren bir hata iletisi görürsünüz.

Gördüğünüz gibi Terraform, yapılandırma kodunun söz diziminde bir sorun algılamıştır. Bu sorun, yapılandırmanın dağıtılmasını engeller.

Terraform dosyalarınızı sürüm denetim sisteminize göndermeden önce her zaman terraform validate çalıştırmak iyi bir uygulamadır. Ayrıca, bu doğrulama düzeyi sürekli tümleştirme işlem hattınızın bir parçası olmalıdır. Bu makalenin ilerleyen bölümlerinde azure işlem hattınıotomatik olarak doğrulayacak şekilde yapılandırmayı inceleyeceğiz.

3. Terraform yapılandırmasını doğrulama

Önceki bölümde Terraform yapılandırmasını nasıl doğrulayabileceğinizi gördünüz. Bu test düzeyi söz dizimine özeldi. Bu test, Azure'da zaten dağıtılmış olabilecek şeyleri dikkate almamıştı.

Terraform bir bildirimsel dildir, yani istediğiniz son sonucu belirlersiniz. Örneğin, bir kaynak grubunda 10 sanal makineniz olduğunu varsayalım. Ardından üç sanal makine tanımlayan bir Terraform dosyası oluşturursunuz. Bu planın uygulanması toplam sayıyı 13'e artırmaz. Bunun yerine Terraform, üç sanal makine kalacak şekilde yedi sanal makineyi siler. terraform plan çalıştırmak, sürprizleri önlemek için bir yürütme planı uygulamanın olası sonuçlarını onaylamanıza olanak tanır.

Terraform yürütme planını oluşturmak için terraform planını çalıştırırsınız. Bu komut, yapılandırmanın hangi bölümünün zaten dağıtılmış olduğunu denetlemek için hedef Azure aboneliğine bağlanır. Terraform daha sonra Terraform dosyasında belirtilen gereksinimleri karşılamak için gerekli değişiklikleri belirler. Bu aşamada Terraform hiçbir şey dağıtmıyor. Planı uygularsanız ne olacağını anlatıyor.

Makaleyi takip ediyorsanız ve önceki bölümdeki adımları gerçekleştirdiyseniz terraform plan komutunu çalıştırın:

terraform plan

terraform plançalıştırdıktan sonra Terraform, yürütme planını uygulamanın olası sonucunu görüntüler. Çıkış, eklenecek, değiştirilecek ve yok edilecek Azure kaynaklarını gösterir.

Varsayılan olarak, Terraform durumu Terraform dosyasıyla aynı yerel dizinde depolar. Bu desen tek kullanıcılı senaryolarda iyi çalışır. Ancak, aynı Azure kaynakları üzerinde birden çok kişi çalıştığında, yerel durum dosyaları eşitlenmemiş olabilir. Terraform, bu sorunu gidermek için uzak bir veri deposuna (Azure Depolama gibi) durum dosyaları yazmayı destekler. Bu senaryoda, yerel bir makinede terraform plan çalıştırmak ve uzak makineyi hedeflemek sorunlu olabilir. Sonuç olarak,sürekli tümleştirme işlem hattınızın bir parçası olarak bu doğrulama adımını otomatikleştirmek mantıklı olabilir.

4. Statik kod analizini çalıştırma

Statik kod analizi doğrudan Terraform yapılandırma kodu çalıştırılmadan yapılabilir. Bu analiz, güvenlik sorunları ve uyumluluk tutarsızlığı gibi sorunları algılamak için yararlı olabilir.

Aşağıdaki araçlar Terraform dosyaları için statik analiz sağlar:

Statik analiz genellikle sürekli tümleştirme işlem hattının bir parçası olarak yürütülür. Bu testler bir yürütme planı veya dağıtım oluşturulmasını gerektirmez. Sonuç olarak, diğer testlerden daha hızlı çalışırlar ve genellikle sürekli tümleştirme işleminde ilk olarak çalıştırılırlar.

5. Azure Pipeline kullanarak tümleştirme testlerini otomatikleştirme

Sürekli tümleştirme, bir değişiklik yapıldığında sistemin tamamını test etmeyi içerir. Bu bölümde, sürekli tümleştirmeyi uygulamak için kullanılan bir Azure Pipeline yapılandırması görürsünüz.

  1. İstediğiniz düzenleyiciyi kullanarak GitHub'da Terraform örnek projesinin yerel kopyasına göz atın.

  2. samples/integration-testing/src/azure-pipeline.yaml dosyasını açın.

  3. Adımlar bölümüne aşağı kaydırarak çeşitli yükleme ve doğrulama rutinlerini çalıştırmak için kullanılan standart bir adım kümesi bulabilirsiniz.

  4. 1. Adım: Checkov Statik Kod Analizi'ni çalıştırın yazan satırı gözden geçirin. Bu adımda, daha önce bahsedilen Checkov projesi örnek Terraform yapılandırmasında statik kod analizi çalıştırır.

    - bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory)
      displayName: Checkov Static Code Analysis
    

    Önemli noktalar:

    • Bu betik, Docker kapsayıcısının içine bağlanmış Terraform çalışma alanında Checkov'un çalıştırılmasından sorumludur. Microsoft tarafından yönetilen aracılar Docker etkindir. Docker kapsayıcısı içinde araçları çalıştırmak daha kolaydır ve Checkov'u Azure Pipeline aracısına yükleme gereksinimini ortadan kaldırır.
    • $(terraformWorkingDirectory) değişkeni azure-pipeline.yaml dosyasında tanımlanır.
  5. 2. Adım: Terraform'u Azure Pipelines aracısı üzerine yükleme yazan satırı gözden geçirin. Daha önce yüklediğiniz Terraform Derleme ve Yayın Görevi uzantısında , Azure Pipeline'ı çalıştıran aracıya Terraform'u yüklemek için bir komut vardır. Bu görev, bu adımda gerçekleştirilir.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
      displayName: 'Install Terraform'
      inputs:
        terraformVersion: $(terraformVersion)
    

    Önemli noktalar:

    • Yüklenecek Terraform sürümü, terraformVersion adlı bir Azure Pipeline değişkeni aracılığıyla belirtilir ve azure-pipeline.yaml dosyasında tanımlanır.
  6. Çalışma alanını başlatmak için 3. Adım: Terraform init'i çalıştırın yazan satırı gözden geçirin. Terraform aracıda yüklü olduğuna göre Terraform dizini başlatılabilir.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform init'
      inputs:
        command: init
        workingDirectory: $(terraformWorkingDirectory)
    

    Önemli noktalar:

    • command girişi, çalıştırılacak Terraform komutunu belirtir.
    • workingDirectory girişi Terraform dizininin yolunu gösterir.
    • $(terraformWorkingDirectory) değişkeni azure-pipeline.yaml dosyasında tanımlanır.
  7. HCL söz dizimini doğrulamak için 4. Adım: Terraform validate komutunu çalıştırın yazan satırı gözden geçirin. Proje dizini başlatıldıktan sonra, sunucudaki yapılandırmayı doğrulamak için terraform validate çalıştırılır.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform validate'
      inputs:
        command: validate
        workingDirectory: $(terraformWorkingDirectory)
    
  8. HCL söz dizimini doğrulamak için 5. Adım: Terraform planını çalıştırın yazan satırı gözden geçirin. Daha önce açıklandığı gibi, Terraform yapılandırmasının dağıtımdan önce geçerli olup olmadığını doğrulamak için yürütme planı oluşturulur.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform plan'
      inputs:
        command: plan
        workingDirectory: $(terraformWorkingDirectory)
        environmentServiceName: $(serviceConnection)
        commandOptions: -var location=$(azureLocation)
    

    Önemli noktalar:

    • Giriş, environmentServiceNameOrtamınızı yapılandırma bölümünde oluşturulan Azure hizmet bağlantısının adını ifade eder. Bağlantı Terraform'un Azure aboneliğinize erişmesine olanak tanır.
    • commandOptions girişi, Terraform komutuna argüman geçirmek amacıyla kullanılır. Bu durumda, bir konum belirtiliyor. $(azureLocation) değişkeni DAHA önce YAML dosyasında tanımlanır.

İşlem hattını Azure DevOps'a aktarma

  1. Azure DevOps projenizi açın ve Azure Pipelines bölümüne gidin.

  2. İşlem Hattı Oluştur düğmesini seçin.

  3. Kodunuz nerede? seçeneği için GitHub (YAML) seçeneğini belirleyin.

    Kodunuz nerede?

  4. Bu noktada Azure DevOps'a kuruluşunuza erişim yetkisi vermek zorunda olabilirsiniz. Bu konu hakkında daha fazla bilgi için GitHub depoları oluşturmamakalesine bakın.

  5. Depo listesinde, GitHub kuruluşunuzda oluşturduğunuz depo fork'unu seçin.

  6. İşlem hattınızı yapılandırın adımında, mevcut bir YAML işlem hattından başlamayı seçin.

    Mevcut YAML işlem hattı

  7. Var olan YAML işlem hattını seçin sayfası görüntülendiğinde dalını master belirtin ve YAML işlem hattının yolunu girin: samples/integration-testing/src/azure-pipeline.yaml.

    Mevcut YAML işlem hattını seçme

  8. GitHub'dan Azure YAML işlem hattını yüklemek için Devam'ı seçin.

  9. İşlem hattınızı gözden geçirin YAML sayfası görüntülendiğinde çalıştır'ı seçerek işlem hattını ilk kez oluşturup el ile tetikleyebilirsiniz.

    Azure Pipeline'ı çalıştırma

Sonuçları doğrulama

İşlem hattını Azure DevOps kullanıcı arabiriminden el ile çalıştırabilirsiniz. Ancak makalenin amacı otomatik sürekli tümleştirmeyi göstermektir. Çatallanmış deponuzun samples/integration-testing/src klasörüne bir değişiklik uygulayarak işlemi test edin. Değişiklik, üzerinde kod gönderdiğiniz dalda otomatik olarak yeni bir işlem hattı tetikler.

GitHub'den çalışan İşlem Hattı

Bu adımı tamamladıktan sonra, her şeyin doğru çalıştığından emin olmak için Azure DevOps'taki ayrıntılara erişin.

Azure DevOps Yeşil İşlem Hattı

Azure'da Terraform sorunlarını giderme

Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme

Sonraki adımlar