Terraform projelerinde uçtan uca Terratest 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.

Uçtan uca (E2E) test, bir programın üretime dağıtmadan önce çalıştığını doğrulamak için kullanılır. Bir sanal ağa iki sanal makine dağıtan bir Terraform modülü örnek bir senaryo olabilir. İki makinenin birbirine ping göndermesini engellemek isteyebilirsiniz. Bu örnekte, dağıtımdan önce hedeflenen sonucu doğrulamak için bir test tanımlayabilirsiniz.

E2E testi genellikle üç adımlı bir işlemdir.

  1. Bir test ortamına yapılandırma uygulanır.
  2. Sonuçları doğrulamak için kod çalıştırılır.
  3. Test ortamı yeniden başlatılır veya indirilir (sanal makineyi serbest bırakma gibi).

Bu makalede şunları öğreneceksiniz:

  • Terratest ile uçtan uca testlerin temellerini anlama
  • Golang kullanarak uçtan uca test yazmayı öğrenin
  • Kod deponuza işlendiğinde uçtan uca testleri otomatik olarak tetikleme amacıyla Azure DevOps'un nasıl kullanılacağını öğrenin

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

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Go programlama dili: Go'u yükleyin.

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

2. Uçtan uca testi anlama

Uçtan uca testler sistemin kolektif bir bütün olarak çalıştığını doğrular. Bu tür testler, belirli modüllerin test edilmesinden farklı olarak güncelleştirilir. Terraform projeleri için uçtan uca test, dağıtılanların doğrulanmasına olanak tanır. Bu test türü, dağıtım öncesi senaryoları test eden diğer birçok türden farklıdır. Uçtan uca testler, birden çok modül içeren ve birden çok kaynak üzerinde işlem yapabilen karmaşık sistemleri test etmek için kritik öneme sahiptir. Bu tür senaryolarda, çeşitli modüllerin doğru etkileşimde olup olmadığını belirlemenin tek yolu uçtan uca testtir.

Bu makalede Terratest kullanarak uçtan uca test gerçekleştirmeye odaklanmaktadır. Terratest, aşağıdaki görevi yapmak için gereken tüm tesisatı sağlar:

  • Terraform yapılandırması dağıtma
  • Dağıtılanları doğrulamak için Go dilini kullanarak bir test yazmanızı sağlar
  • Testleri aşamalar halinde düzenleme
  • Dağıtılan altyapıyı yok edin

3. Test örneğini anlama

Bu makale için Azure/terraform örnek deposunda bulunan bir örnek kullanıyoruz.

Bu örnek, aynı sanal ağa iki Linux sanal makinesi dağıtan bir Terraform yapılandırması tanımlar. Bir VM - adlandırılmış vm-linux-1 - bir genel IP adresine sahiptir. SSH bağlantılarına izin vermek için yalnızca 22 numaralı bağlantı noktası açılır. İkinci SANAL makinenin vm-linux-2 tanımlı genel IP adresi yok.

Test aşağıdaki senaryoları doğrular:

  • Altyapı doğru dağıtıldı
  • Bağlantı noktası 22'yi kullanarak vm-linux-1
  • üzerinde vm-linux-1SSH oturumunu kullanarak ping işlemi yapılabilir vm-linux-2

Sample end-to-end test scenario

Örneği indirdiyseniz, bu senaryo için Terraform yapılandırması dosyasında bulunabilirsrc/main.tf. Dosya, main.tf önceki şekilde gösterilen Azure altyapısını dağıtmak için gereken her şeyi içerir.

Sanal makine oluşturmayı bilmiyorsanız bkz . Terraform kullanarak Azure'da altyapı ile Linux VM oluşturma.

Dikkat

Bu makalede sunulan örnek senaryo yalnızca çizim amaçlıdır. Uçtan uca testin adımlarına odaklanmak için işleri bilerek basit tuttuk. Genel IP adresi üzerinden SSH bağlantı noktalarını kullanıma sunan üretim sanal makinelerinin olmasını önermeyiz.

4. Test örneğini inceleyin

Uçtan uca test Go dilinde yazılır ve Terratest çerçevesini kullanır. Örneği indirdiyseniz, test dosyasında tanımlanırsrc/test/end2end_test.go.

Aşağıdaki kaynak kodu Terratest kullanan golang testinin standart yapısını gösterir:

package test

import (
    "testing"

    "github.com/gruntwork-io/terratest/modules/terraform"
    test_structure "github.com/gruntwork-io/terratest/modules/test-structure"
)

func TestEndToEndDeploymentScenario(t *testing.T) {
    t.Parallel()

    fixtureFolder := "../"

    // Use Terratest to deploy the infrastructure
    test_structure.RunTestStage(t, "setup", func() {
        terraformOptions := &terraform.Options{
            // Indicate the directory that contains the Terraform configuration to deploy
            TerraformDir: fixtureFolder,
        }

        // Save options for later test stages
        test_structure.SaveTerraformOptions(t, fixtureFolder, terraformOptions)

        // Triggers the terraform init and terraform apply command
        terraform.InitAndApply(t, terraformOptions)
    })

    test_structure.RunTestStage(t, "validate", func() {
        // run validation checks here
        terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
		    publicIpAddress := terraform.Output(t, terraformOptions, "public_ip_address")
    })

    // When the test is completed, teardown the infrastructure by calling terraform destroy
    test_structure.RunTestStage(t, "teardown", func() {
        terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
        terraform.Destroy(t, terraformOptions)
    })
}

Önceki kod parçacığında görebileceğiniz gibi, test üç aşamadan oluşur:

  • kurulum: Yapılandırmayı dağıtmak için Terraform'u çalıştırır
  • validate': Doğrulama denetimleri ve onayları
  • teardown: Test çalıştırıldıktan sonra altyapıyı temizler

Aşağıdaki listede Terratest çerçevesi tarafından sağlanan bazı önemli işlevler gösterilmektedir:

  • terraform. InitAndApply: Go kodunu çalıştırmayı ve terraform apply go kodundan çalıştırmayı terraform init etkinleştirir
  • terraform. Çıkış: Dağıtım çıkış değişkeninin değerini alır.
  • terraform. Destroy: Go kodundan terraform destroy komutunu çalıştırır.
  • test_structure. LoadTerraformOptions: Yapılandırma ve değişkenler gibi Terraform seçeneklerini durumdan yükler
  • test_structure. SaveTerraformOptions: Yapılandırma ve değişkenler gibi Terraform seçeneklerini duruma kaydeder

5. Test örneğini çalıştırma

Aşağıdaki adımlar, örnek yapılandırma ve dağıtıma karşı testi çalıştırır.

  1. Bash/terminal penceresi açın.

  2. Azure hesabınızda oturum açın.

  3. Bu örnek testi çalıştırmak için bir SSH özel/ortak anahtar çifti adı id_rsa ve id_rsa.pub giriş dizininizde olması gerekir. değerini giriş dizininizin adıyla değiştirin <your_user_name> .

    export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
    
  4. Örnek dizinde dizine src/test gidin.

  5. Testi çalıştırın.

    go test -v ./ -timeout 10m
    

6. Sonuçları doğrulayın

başarıyla çalıştırıldıktan go testsonra aşağıdaki çıkışa benzer sonuçlar görürsünüz:

--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok      test    391.052s

Azure'da Terraform sorunlarını giderme

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

Sonraki adımlar