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.
Terraform'yi yapılandırma: Henüz bunu yapmamışsanız, aşağıdaki seçeneklerden birini kullanarak Terraform'ı yapılandırabilirsiniz:
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.
Örnek dizinde dizinine
srcgidin.Çalışma dizinini başlatmak için terraform init'i çalıştırın.
terraform initYapı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.
Terraform planını çalıştırarak bir yürütme planı oluşturun.
terraform plan -out main.tfplanUyumluluk 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.jsonYü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>.
- Desenden sonra bir adla bir kaynak grubu oluşturulur:
Terraform docker pull görüntüsünü indirmek için docker pull'i çalıştırın.
docker pull eerkunt/terraform-complianceTestleri 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
RoleCreatorolması durumunda başarısız olur.

- Test başarısız olur çünkü etiketlerin varlığını gerektiren ilk kural başarılı olurken, ikinci kural ve etiketlerinin eksik
Aşağıdaki gibi değiştirerek
main.tf(ve etiketi eklenmiştir)RolehatayıCreatordü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
Söz
terraform validatedizimlerini doğrulamak için yeniden çalıştırın.terraform validateYeni
terraform planbir yürütme planı oluşturmak için yeniden çalıştırın.terraform plan -out main.tfplanUyumluluk 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.jsonYapı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
Azure'da Terraform sorunlarını giderme
Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme