Hızlı Başlangıç: Terraform kullanarak Azure DevTest Labs'de laboratuvar oluşturma
Bu makalede Terraform kullanarak Azure DevTest Labs içindeki bir laboratuvarda Windows Server 2019 Datacenter sanal makinesi oluşturmak için Terraform'un nasıl kullanılacağı gösterilmektedir.
Bu makalede şunları öğreneceksiniz:
- random_pet kullanarak Azure kaynak grubu adı için rastgele bir evcil hayvan adı oluşturma
- azurerm_resource_group kullanarak Azure kaynak grubu oluşturma
- random_password kullanarak rastgele parola oluşturma
- azurerm_dev_test_lab kullanarak Azure DevTest Labs içinde laboratuvar oluşturma
- azurerm_dev_test_virtual_network kullanarak Azure DevTest Labs içinde sanal ağ oluşturma
- azurerm_dev_test_windows_virtual_machine kullanarak Azure DevTest Labs içinde Windows sanal makinesi oluşturma
Önkoşullar
Terraform kodunu uygulama
Not
Bu makalenin örnek kodu Azure Terraform GitHub deposunda bulunur. Terraform'un geçerli ve önceki sürümlerinden test sonuçlarını içeren günlük dosyasını görüntüleyebilirsiniz.
Azure kaynaklarını yönetmek için Terraform'un nasıl kullanılacağını gösteren diğer makalelere ve örnek koda bakın
Örnek Terraform kodunu test edip çalıştırmak ve geçerli dizin yapmak için bir dizin oluşturun.
adlı
main.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "random_string" "vm_suffix" { length = 5 upper = false special = false numeric = false } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } resource "random_password" "password" { count = var.password == null ? 1 : 0 length = 20 special = true min_numeric = 1 min_upper = 1 min_lower = 1 min_special = 1 } locals { password = try(random_password.password[0].result, var.password) } resource "azurerm_dev_test_lab" "lab" { name = var.lab_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } resource "azurerm_dev_test_virtual_network" "vnet" { name = "Dtl${var.lab_name}" lab_name = azurerm_dev_test_lab.lab.name resource_group_name = azurerm_resource_group.rg.name } resource "azurerm_dev_test_windows_virtual_machine" "vm" { name = "ExampleVM-${random_string.vm_suffix.result}" lab_name = azurerm_dev_test_lab.lab.name lab_subnet_name = "Dtl${var.lab_name}Subnet" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location storage_type = "Standard" size = var.vm_size username = var.user_name password = local.password allow_claim = false lab_virtual_network_id = azurerm_dev_test_virtual_network.vnet.id gallery_image_reference { offer = "WindowsServer" publisher = "MicrosoftWindowsServer" sku = "2019-Datacenter" version = "latest" } }
adlı
outputs.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "lab_name" { value = azurerm_dev_test_lab.lab.name } output "vm_name" { value = azurerm_dev_test_windows_virtual_machine.vm.name } output "password" { sensitive = true value = local.password }
adlı
providers.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=0.12" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
adlı
variables.tf
bir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "resource_group_location" { type = string default = "eastus" description = "Location for all resources." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "lab_name" { type = string description = "The name of the new lab instance to be created" default = "ExampleLab" } variable "vm_size" { type = string description = "The size of the vm to be created." default = "Standard_D4_v3" } variable "user_name" { type = string description = "The username for the local account that will be created on the new vm." default = "exampleuser" } variable "password" { type = string description = "The password for the local account that will be created on the new vm." sensitive = true default = null }
Terraform'u başlatma
Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.
terraform init -upgrade
Önemli noktalar:
-upgrade
parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.
Terraform yürütme planı oluşturma
Terraform planını çalıştırarak yürütme planı oluşturun.
terraform plan -out main.tfplan
Önemli noktalar:
- komutu
terraform plan
bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-out
parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-out
kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
Terraform yürütme planı uygulama
Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.tfplan
Önemli noktalar:
- Örnek
terraform apply
komut, daha önce komutunu çalıştırdığınızıterraform plan -out main.tfplan
varsayar. - parametresi için
-out
farklı bir dosya adı belirttiyseniz, çağrısındaterraform apply
aynı dosya adını kullanın. - parametresini
-out
kullanmadıysanız, parametresiz olarak çağırınterraform apply
.
Sonuçları doğrulama
Laboratuvarın oluşturulduğu Azure kaynak adını alın.
resource_group_name=$(terraform output -raw resource_group_name)
Laboratuvar adını alın.
lab_name=$(terraform output -raw lab_name)
Bu makalede oluşturduğunuz laboratuvarın sanal makinelerini listelemek için az lab vm list komutunu çalıştırın.
az lab vm list --resource-group $resource_group_name \ --lab-name $lab_name
Kaynakları temizleme
Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:
terraform planını çalıştırın ve bayrağını
destroy
belirtin.terraform plan -destroy -out main.destroy.tfplan
Önemli noktalar:
- komutu
terraform plan
bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-out
parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-out
kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
- komutu
Yürütme planını uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.destroy.tfplan
Azure'da Terraform sorunlarını giderme
Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme