Aracılığıyla paylaş


Terraform ve Azure ile uyumluluk testi 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.

Uyumluluk testi çoğu zaman sürekli tümleştirme sürecinin bir parçasıdır ve kullanıcı tanımlı ilkelerin izlenmesini sağlamak için kullanılır. Örneğin, Azure kaynaklarınız için jeopolitik adlandırma kuralları tanımlayabilirsiniz. Diğer bir yaygın örnek, tanımlı bir görüntü alt kümesinden sanal makineler oluşturmaktır. Uyumluluk testi, bu ve diğer birçok senaryoda kuralları zorunlu kılmak için kullanılır.

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

  • Uyumluluk testinin ne zaman kullanılacağını anlama
  • Uyumluluk testi yapmayı öğrenin
  • Örnek uyumluluk testlerini 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ı: Terraform uyumluluk aracını aşağıdaki komutu çalıştırarak yükleyin: pip install terraform-compliance.

  • Örnek kod ve kaynaklar: DownGit aracını kullanarak GitHub'dan uyumluluk testi projesini indirin ve örnek kodu içerecek şekilde yeni bir dizine açın. Bu dizin örnek dizin olarak adlandırılır.

2. Uyumluluk testlerini ve denetimlerini anlama

Uyumluluk testi, bir sistemin belirlenmiş standartları karşılayıp karşılamadığını belirlemek için 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 uygulanıp uygulanmadığını denetlemek için bir analiz yapar. Çoğu zaman, aynı anda çalışarak, artan kaliteye yol açan standartları geliştirmeye odaklanır.

Uyumluluk testi ile dikkate alınması gereken iki önemli kavram vardır: uyumluluk testi ve uyumluluk denetimleri.

  • Uyumluluk testi , her geliştirme yaşam döngüsü aşamasının çıktısının üzerinde anlaşmaya varılan gereksinimlere uygun olmasını sağlar.
  • Uyumluluk denetimleri , projelerin başında geliştirme döngüsüyle tümleştirilmelidir. Daha sonraki bir aşamada uyumluluk denetimleri eklemeye çalışmak, gereksinimin kendisi yeterli şekilde belgelenmediğinde giderek daha zor hale gelir.

Uyumluluk denetimleri yapmak oldukça basittir. Geliştirme yaşam döngüsünün her aşaması için bir dizi standart ve yordam geliştirilip belgelenmiştir. Her aşamanın çıkışı, belgelenen gereksinimlerle karşılaştırılır. Testin sonuçları, önceden belirlenmiş standartlara uymayan herhangi bir "boşluk" şeklindedir. Uyumluluk testi, inceleme süreci aracılığıyla yapılır ve gözden geçirme sürecinin sonucu belgelenmelidir.

Şimdi belirli bir örneğe göz atalım.

Sık karşılaşılan bir sorun, birden çok geliştirici uyumsuz değişiklikler uyguladığında bozulan ortamlardır. Bir kişinin bir değişiklik üzerinde çalıştığını ve test ortamında VM oluşturma gibi kaynakları uyguladığını varsayalım. Daha sonra başka bir kişi kodun farklı bir sürümünü uygulayarak bu VM'nin farklı bir sürümünü sağlar. Burada gerekli olan, belirtilen kurallara uygun olduğundan emin olmak için gözetimdir.

Bu sorunu çözmenin bir yolu, role ve creator etiketleri gibi etiketleme kaynakları için bir ilke tanımlamak olabilir. İlkeleri tanımladıktan sonra, ilkelerin izlendiğinden emin olmak için Terraform uyumluluğu gibi bir araç kullanılır.

Terraform uyumluluğu , negatif testlere odaklanır. Negatif test, sistemin beklenmeyen girişleri veya istenmeyen davranışları düzgün bir şekilde işleyebildiğini sağlama işlemidir. Fuzzing , negatif test örneğidir. Fuzzing ile, girişi alan bir sistem, beklenmeyen girişleri güvenli bir şekilde işleyebileceğinden emin olmak için test edilir.

Neyse ki Terraform, bulut altyapısı varlıkları oluşturan, güncelleştiren veya yok eden tüm API'ler için bir soyutlama katmanıdır. Terraform ayrıca yerel yapılandırmanın ve uzak API yanıtlarının eşitlenmesini sağlar. Terraform çoğunlukla Bulut API'lerine karşı kullanıldığından, altyapıya dağıtılan kodun belirli ilkelere uydığından emin olmak için bir yönteme ihtiyacımız vardır. Terraform uyumluluğu - ücretsiz ve açık kaynak bir araç - Terraform yapılandırmaları için bu işlevselliği sağlar.

VM örneğini kullanarak bir uyumluluk ilkesi şu şekilde olabilir: "Azure kaynağı oluşturuyorsanız, bir etiket içermelidir".

Terraform uyumluluk aracı, örnek gibi ilkeler oluşturduğunuz bir test çerçevesi sağlar. Ardından bu ilkeleri Terraform yürütme planınızda çalıştırırsınız.

Terraform uyumluluğu, BDD veya davranış temelli geliştirme ilkeleri uygulamanızı sağlar. BDD, bir sistemin ne yapması gerektiğini tanımlamak için tüm paydaşların birlikte çalıştığı işbirliğine dayalı bir süreçtir. Bu paydaşlar genellikle geliştiriciler, test ediciler ve geliştirilmekte olan sisteme ilgi duyan veya bundan etkilenecek kişileri içerir. BDD'nin amacı, ekipleri sistemin nasıl davranması gerektiğini ortak bir şekilde anlayan somut örnekler oluşturmaya teşvik etmektir.

3. Uyumluluk testi örneğini inceleme

Bu makalenin önceki bölümlerinde, bir test ortamı için VM oluşturmaya yönelik uyumluluk testi örneği hakkında bilgi edinmiştiniz. Bu bölümde bu örneğin BDD Özelliğine ve Senaryosuna nasıl çevrildiği gösterilmektedir. Kural, BDD'yi desteklemek için kullanılan bir araç olan Cucumber kullanılarak ilk olarak ifade edilir.

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 aşağıdaki gibi kurala uyar.

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 yazılabilir:

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 kodda belirli bir etikete yönelik bir test gösterilmektedir:

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ırın

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

  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. Terraform planını çalıştırarak 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 komutunu çalıştırın.

    terraform show -json main.tfplan > main.tfplan.json
    
  6. Terraform uyumluluk görüntüsünü indirmek için docker pull komutunu çalıştırın.

    docker pull eerkunt/terraform-compliance
    
  7. Testleri bir docker kapsayıcısında çalıştırmak için docker run komutunu ç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ı olsa da ve etiketlerinin eksik olması RoleCreator durumunda ikinci kural başarısız olur.

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

  8. Hatanın düzeltilmesi için main.tf öğesini aşağıdaki şekilde değiştirin: Role ve Creator etiketleri eklenmelidir.

      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ğrulayın

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

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

    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 komutunu çalıştırın.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Yapılandırmayı test etmek için docker run komutunu yeniden çalıştırın. Özelliğin tamamı 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

  5. Yürütme planını uygulamak için terraform apply komutunu çalıştırın.

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Önemli noktalar:

    • Deseni izleyen bir adla bir kaynak grubu oluşturulur: rg-hello-tf-<random_number>.

Azure'da Terraform sorunlarını giderme

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

Sonraki Adımlar