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.
- Bir test ortamına yapılandırma uygulanır.
- Sonuçları doğrulamak için kod çalıştırılır.
- 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.
Terraform'ı yapılandırma: Henüz yapmadıysanız, aşağıdaki seçeneklerden birini kullanarak Terraform'ı yapılandırın:
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-1
SSH oturumunu kullanarak ping işlemi yapılabilirvm-linux-2
Ö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.
Bash/terminal penceresi açın.
Azure hesabınızda oturum açın.
Bu örnek testi çalıştırmak için bir SSH özel/ortak anahtar çifti adı
id_rsa
veid_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"
Örnek dizinde dizine
src/test
gidin.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 test
sonra 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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin