Terraform ve Azure ile uyumluluk testi uygulama

Uyumluluk testi çoğu zaman sürekli tümleştirme sürecinin bir parçası olur ve kullanıcı tanımlı ilkelerin izlen olduğundan emin olmak için kullanılır. Örneğin, Azure kaynaklarınız için jeopolitik adlandırma kuralları tanımlayabilirsiniz. Bir diğer yaygın örnek de görüntülerin tanımlanmış bir alt kümesinden sanal makineler oluşturmaktır. Uyumluluk testi, bu ve diğer birçok senaryoda kuralları uygulamak için kullanılabilir.

Bu makalede şunları öğreneceksiniz:

  • Uyumluluk testlerini ne zaman kullanabileceğini anlama
  • Uyumluluk testi yapmayı öğrenin
  • Örnek uyumluluk testini görme ve çalıştırma

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

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Docker:Docker'ı yükleyin.

  • Python:Python yükleyin.

  • Terraform uyumluluk aracı: Aşağıdaki komutu çalıştırarak Terraform uyumluluk aracını yükleyin: .

  • Örnek kod ve kaynaklar: DownGit aracını kullanarak, uyumluluk GitHub projesini indirin ve örnek kodu içeren yeni bir dizinde sıkıştırmayı açın. Bu dizin, örnek dizini olarak adlandırılır.

2. Uyumluluk testlerini ve denetimlerini anlama

Uyumluluk testi, sistemin belirli standartlara uygun olup olmadığını belirlemek için kullanılan işlevsiz bir test tekniğidir. Uyumluluk testi, uyumluluk testi olarak da bilinir.

Çoğu yazılım ekibi, standartların düzgün bir şekilde zorunlu kılındığını ve uygulandığını kontrol etmek için bir analiz yapar. Genellikle aynı anda çalışarak kaliteyi artıran standartlar geliştirin.

Uyumluluk testi ile göz önünde bulunduracak iki önemli kavram vardır: uyumluluk testi ve uyumluluk denetimleri.

  • Uyumluluk testi, her geliştirme yaşam döngüsü aşamasının çıkışlarının üzerinde anlaşmaya varan gereksinimlere uygunluğunu sağlar.
  • Uyumluluk denetimleri, projelerin başında geliştirme döngüsüyle tümleştirmelisiniz. Daha sonraki bir aşamada uyumluluk denetimleri eklemeye çalışma, gereksinim yeterince belgelenmiş değilse giderek daha zor hale gelir.

Uyumluluk denetimleri yapmak doğrudan ileriye doğru ilerler. Geliştirme yaşam döngüsünün her aşaması için bir dizi standart ve yordam geliştiriliyor ve belgelenmiş. Her aşamanın çıktısı, belgelenmiş gereksinimlerle karşılaştırıldı. Testin sonuçları, önceden belirlenen standartlara uymayan "boşluklar"dır. Uyumluluk testi, inceleme süreci aracılığıyla yapılır ve gözden geçirme sürecinin sonucu belgelenmiş olur.

Şimdi belirli bir örneği göz at bakalım.

Yaygın bir sorun, birden çok geliştirici uyumsuz değişiklikler uygulamazken bozan ortamlardır. Bir kişinin bir değişiklik üzerinde çalıştığını ve test ortamında VM oluşturma gibi kaynakları geçerli olduğunu diyelim. Daha sonra başka bir kişi, kodun vm'nin farklı bir sürümünü sağlar. Burada gerekli olan, belirtilen kurallara uygunluğu sağlamak için gözetimdir.

Bu sorunu ele alamanın bir yolu, ve etiketleri gibi kaynakları etiketlemeye ilişkin bir ilke rolecreator tanımlamaktır. İlkeleri tanımladığınız zaman, ilkelerin uyulması için Terraform uyumluluğu gibi bir araç kullanılır.

Terraform uyumluluğu, negatif teste odaklanır. Negatif test, sistemin beklenmeyen girişleri veya istenmeyen davranışları iyi bir şekilde işleyene kadar devam etmelerini sağlama sürecidir. Fuzzing bir negatif test örneğidir. Fuzzing ile girişi alan bir sistem, beklenmeyen girişi güvenle işleyemelerini sağlamak için test edilir.

Neyse ki Terraform, bulut altyapısı varlıklarını oluşturan, güncel alan veya yok eden tüm API'ler için bir soyutlama katmanıdır. Terraform ayrıca yerel yapılandırmayı ve uzak API yanıtlarını eşitler. Terraform çoğunlukla Bulut API'lerine karşı kullandığından, altyapıya dağıtılan kodun belirli ilkelere uygun olduğundan emin olmak için bir yol gerekir. Ücretsiz ve açık kaynak bir araç olan Terraform uyumluluğu, Terraform yapılandırmaları için bu işlevselliği sağlar.

VM örneği kullanılarak bir uyumluluk ilkesi şu şekilde olabilir: "Azure kaynağı oluşturuyorsanız, bir etiketi olmalıdır".

Terraform uyumluluk aracı, örnek gibi ilkeler oluşturmak için bir test çerçevesi sağlar. Ardından bu ilkeleri Terraform yürütme planınıza göre çalıştırarak.

Terraform uyumluluğu BDD veya davranış odaklı geliştirme , ilkeleri uygulamanaolanak sağlar. BDD, bir sistemin ne yapmaları gerektiğini tanımlamak için tüm paydaşların birlikte çalışmalarına yönelik işbirliğine dayalı bir süreçtir. Bu proje katılımcıları genellikle geliştiricileri, test edenleri ve geliştirilen sistemden etkilanacak olan veya bu durumdan etkilanacak olan herkesi içerir. BDD'nin amacı, ekipleri sistemin nasıl davranması gerektiği konusunda ortak bir anlayışa sahip olan somut örnekler derlemeye teşvik etmektir.

3. Uyumluluk testi örneğini inceleme

Bu makalenin önceki makalesinde, bir test ortamı için VM oluşturma uyumluluk testi örneği hakkında bilgi edindi. Bu bölümde bu örneğin bir BDD Özelliğine ve Senaryosuna nasıl çevrilebilir olduğu açıklandı. Kural ilk olarak BDD'yidesteklemek için kullanılan bir araç olan Lisans kullanılarak ifade edildi.

when creating Azure resources, every new resource should have a tag

Önceki kural aşağıdaki gibi çevrilir:

If the resource supports tags
Then it must contain a tag
And its value must not be null

Terraform HCL kodu daha sonra kurala aşağıdaki gibi bağlı olacaktır.

resource "random_uuid" "uuid" {}

resource "azurerm_resource_group" "rg" {
  name     = "rg-hello-tf-${random_uuid.uuid.result}"
  location = var.location

  tags = {
    environment = "dev"
    application = "Azure Compliance"
  } 
}

İlk ilke aşağıdaki gibi bir BDD özellik senaryosu olarak yazlanabilir:

Feature: Test tagging compliance  # /target/src/features/tagging.feature
    Scenario: Ensure all resources have tags
        If the resource supports tags
        Then it must contain a tag
        And its value must not be null

Aşağıdaki kod belirli bir etikete yönelik bir test gösterir:

Scenario Outline: Ensure that specific tags are defined
    If the resource supports tags
    Then it must contain a tag <tags>
    And its value must match the "<value>" regex

    Examples:
      | tags        | value              |
      | Creator     | .+                 |
      | Application | .+                 |
      | Role        | .+                 |
      | Environment | ^(prod\|uat\|dev)$ |

4. Uyumluluk testi örneğini çalıştırma

Bu bölümde örneği indirip test edin.

  1. Örnek dizinde dizinine src gidin.

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

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

    terraform validate
    

    Önemli noktalar:

    • Terraform yapılandırmasının geçerli olduğunu belirten bir ileti görüyorsunuz.
  4. Terraform planını çalıştırarak bir yürütme planı oluşturun.

    terraform plan -out main.tfplan
    
  5. Uyumluluk adımı için yürütme planını JSON'a dönüştürmek için terraform show'u çalıştırın.

    terraform show -json main.tfplan > main.tfplan.json
    
  6. Yürütme planını uygulamak için terraform apply'i çalıştırın.

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Önemli noktalar:

    • Desenden sonra bir adla bir kaynak grubu oluşturulur: rg-hello-tf-<random_number> .
  7. Terraform docker pull görüntüsünü indirmek için docker pull'i çalıştırın.

    docker pull eerkunt/terraform-compliance
    
  8. Testleri bir docker kapsayıcısı içinde çalıştırmak için docker run'ı çalıştırın.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Önemli noktalar:

    • Test başarısız olur çünkü etiketlerin varlığını gerektiren ilk kural başarılı olurken, ikinci kural ve etiketlerinin eksik RoleCreator olması durumunda başarısız olur.

    Başarısız test örneği

  9. Aşağıdaki gibi değiştirerek main.tf (ve etiketi eklenmiştir) Role hatayı Creator düzeltin.

      tags = {
        Environment = "dev"
        Application = "Azure Compliance"
        Creator     = "Azure Compliance"
        Role        = "Azure Compliance"
      } 
    
    

    Önemli noktalar:

    • Yapılandırma artık ilkeyle uyumlu.

5. Sonuçları doğrulama

  1. Söz terraform validate dizimlerini doğrulamak için yeniden çalıştırın.

    terraform validate
    
  2. Yeni terraform plan bir yürütme planı oluşturmak için yeniden çalıştırın.

    terraform plan -out main.tfplan
    
  3. Uyumluluk adımı için yürütme planını JSON'a dönüştürmek için terraform show'u çalıştırın.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Yapılandırmayı test etmek için docker run'ı yeniden çalıştırın. Tam özellik uygulanmışsa test başarılı olur.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Başarılı bir test örneği

Azure'da Terraform sorunlarını giderme

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

Sonraki adımlar