Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tüm sanal ağlarınız için bağlantı sağlamak üzere Terraform kullanarak Azure Sanal Ağ Manager'ı kullanmaya başlayın.
Bu hızlı başlangıçta üç sanal ağ dağıtacak ve ağ topolojisi oluşturmak için Azure Sanal Ağ Manager'ı kullanacaksınız. Ardından, bağlantı yapılandırmasının uygulandığını doğrularsınız. Abonelik kapsamına veya yönetim grubu kapsamına sahip bir dağıtım arasından seçim yapabilirsiniz. Ağ yöneticisi kapsamları hakkında daha fazla bilgi edinin.
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.
Bu makalede şunları öğreneceksiniz:
- random_pet kullanarak Azure kaynak grubu adı için rastgele bir değer oluşturun.
- azurerm_resource_group kullanarak bir Azure kaynak grubu oluşturun.
- azurerm_virtual_network kullanarak bir sanal ağ dizisi oluşturun.
- azurerm_subnet kullanarak bir alt ağ dizisi oluşturun.
- azurerm_virtual_network_manager kullanarak bir sanal ağ yöneticisi oluşturun.
- azurerm_network_manager_network_group kullanarak bir ağ yöneticisi ağ grubu oluşturun.
- azurerm_network_manager_static_member kullanarak bir ağ yöneticisi statik üyesi oluşturun.
- azurerm_network_manager_connectivity_configuration kullanarak bir ağ yöneticisi bağlantı yapılandırması oluşturun.
- azurerm_network_manager_deployment kullanarak bir ağ yöneticisi dağıtımı oluşturun.
Önkoşullar
- Terraform'u yükleme ve yapılandırma
- Dinamik ağ gruplarını değiştirmek için gerekli izinlere bakınız.
Abonelik kapsamında Terraform kodunu uygulayın
Bu kod örneği, abonelik kapsamında Azure Sanal Ağ Yöneticisi'ni uygular.
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ıracağınız bir dizin oluşturun ve bu dizini geçerli dizin yapın.
adlı
providers.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.56.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }adlı
main.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:# Create the Resource Group resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create three virtual networks resource "random_string" "prefix" { length = 4 special = false upper = false } resource "random_pet" "virtual_network_name" { prefix = "vnet-${random_string.prefix.result}" } resource "azurerm_virtual_network" "vnet" { count = 3 name = "${random_pet.virtual_network_name.id}-0${count.index}" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location address_space = ["10.${count.index}.0.0/16"] } # Add a subnet to each virtual network resource "azurerm_subnet" "subnet_vnet" { count = 3 name = "default" virtual_network_name = azurerm_virtual_network.vnet[count.index].name resource_group_name = azurerm_resource_group.rg.name address_prefixes = ["10.${count.index}.0.0/24"] } # Create a Virtual Network Manager instance data "azurerm_subscription" "current" { } resource "azurerm_network_manager" "network_manager_instance" { name = "network-manager" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name scope_accesses = ["Connectivity"] description = "example network manager" scope { subscription_ids = [data.azurerm_subscription.current.id] } } # Create a network group resource "azurerm_network_manager_network_group" "network_group" { name = "network-group" network_manager_id = azurerm_network_manager.network_manager_instance.id } # Add three virtual networks to a network group as dynamic members with Azure Policy resource "random_pet" "network_group_policy_name" { prefix = "network-group-policy" } resource "azurerm_policy_definition" "network_group_policy" { name = "${random_pet.network_group_policy_name.id}" policy_type = "Custom" mode = "Microsoft.Network.Data" display_name = "Policy Definition for Network Group" metadata = <<METADATA { "category": "Azure Virtual Network Manager" } METADATA policy_rule = <<POLICY_RULE { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/virtualNetworks" }, { "allOf": [ { "field": "Name", "contains": "${random_pet.virtual_network_name.id}" } ] } ] }, "then": { "effect": "addToNetworkGroup", "details": { "networkGroupId": "${azurerm_network_manager_network_group.network_group.id}" } } } POLICY_RULE } resource "azurerm_subscription_policy_assignment" "azure_policy_assignment" { name = "${random_pet.network_group_policy_name.id}-policy-assignment" policy_definition_id = azurerm_policy_definition.network_group_policy.id subscription_id = data.azurerm_subscription.current.id } # Create a connectivity configuration resource "azurerm_network_manager_connectivity_configuration" "connectivity_config" { name = "connectivity-config" network_manager_id = azurerm_network_manager.network_manager_instance.id connectivity_topology = "Mesh" applies_to_group { group_connectivity = "None" network_group_id = azurerm_network_manager_network_group.network_group.id } } # Commit deployment resource "azurerm_network_manager_deployment" "commit_deployment" { network_manager_id = azurerm_network_manager.network_manager_instance.id location = azurerm_resource_group.rg.location scope_access = "Connectivity" configuration_ids = [azurerm_network_manager_connectivity_configuration.connectivity_config.id] }adlı
variables.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" }adlı
outputs.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_names" { value = azurerm_virtual_network.vnet[*].name }
Terraform kodunu yönetim grubu kapsamında uygulayın
Bu kod örneği, yönetim grubu kapsamında Azure Sanal Ağ Yöneticisi'ı uygular.
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ıracağınız bir dizin oluşturun ve bu dizini geçerli dizin yapın.
adlı
providers.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.56.0, < 4.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }adlı
main.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:# Create the Resource Group resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create three virtual networks resource "random_string" "prefix" { length = 4 special = false upper = false } resource "random_pet" "virtual_network_name" { prefix = "vnet-${random_string.prefix.result}" } resource "azurerm_virtual_network" "vnet" { count = 3 name = "${random_pet.virtual_network_name.id}-0${count.index}" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location address_space = ["10.${count.index}.0.0/16"] } # Add a subnet to each virtual network resource "azurerm_subnet" "subnet_vnet" { count = 3 name = "default" virtual_network_name = azurerm_virtual_network.vnet[count.index].name resource_group_name = azurerm_resource_group.rg.name address_prefixes = ["10.${count.index}.0.0/24"] } data "azurerm_subscription" "current" { } # Create a Management Group resource "random_pet" "management_group_name" { prefix = "AVNM-management-group" } resource "azurerm_management_group" "mg" { display_name = random_pet.management_group_name.id subscription_ids = [ data.azurerm_subscription.current.subscription_id, ] } data "azurerm_client_config" "this" {} resource "azurerm_role_assignment" "management_group_owner" { principal_id = coalesce(var.msi_id, data.azurerm_client_config.this.object_id) scope = azurerm_management_group.mg.id role_definition_name = "Contributor" } # register Microsoft.Network to the Management Group resource "null_resource" "register_rp_to_mg" { provisioner "local-exec" { command = "az provider register --namespace Microsoft.Network -m ${azurerm_management_group.mg.name}" } depends_on = [azurerm_role_assignment.management_group_owner] } resource "time_sleep" "wait_5_seconds" { create_duration = "5s" depends_on = [null_resource.register_rp_to_mg] } # Create a Virtual Network Manager instance resource "azurerm_network_manager" "network_manager_instance" { name = "network-manager" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name scope_accesses = ["Connectivity"] description = "example network manager" scope { management_group_ids = [azurerm_management_group.mg.id] } depends_on = [time_sleep.wait_5_seconds] } # Create a network group resource "azurerm_network_manager_network_group" "network_group" { name = "network-group" network_manager_id = azurerm_network_manager.network_manager_instance.id } # Add three virtual networks to a network group as dynamic members with Azure Policy resource "random_pet" "network_group_policy_name" { prefix = "network-group-policy" } resource "azurerm_policy_definition" "network_group_policy" { name = random_pet.network_group_policy_name.id policy_type = "Custom" mode = "Microsoft.Network.Data" display_name = "Policy Definition for Network Group" metadata = <<METADATA { "category": "Azure Virtual Network Manager" } METADATA policy_rule = <<POLICY_RULE { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/virtualNetworks" }, { "allOf": [ { "field": "Name", "contains": "${random_pet.virtual_network_name.id}" } ] } ] }, "then": { "effect": "addToNetworkGroup", "details": { "networkGroupId": "${azurerm_network_manager_network_group.network_group.id}" } } } POLICY_RULE } resource "azurerm_subscription_policy_assignment" "azure_policy_assignment" { name = "${random_pet.network_group_policy_name.id}-policy-assignment" policy_definition_id = azurerm_policy_definition.network_group_policy.id subscription_id = data.azurerm_subscription.current.id } # Create a connectivity configuration resource "azurerm_network_manager_connectivity_configuration" "connectivity_config" { name = "connectivity-config" network_manager_id = azurerm_network_manager.network_manager_instance.id connectivity_topology = "Mesh" applies_to_group { group_connectivity = "None" network_group_id = azurerm_network_manager_network_group.network_group.id } } # Commit deployment resource "azurerm_network_manager_deployment" "commit_deployment" { network_manager_id = azurerm_network_manager.network_manager_instance.id location = azurerm_resource_group.rg.location scope_access = "Connectivity" configuration_ids = [azurerm_network_manager_connectivity_configuration.connectivity_config.id] }adlı
variables.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" } variable "msi_id" { type = string description = "(Optional) Manage identity id that be used as authentication method. Defaults to `null`." default = null }adlı
outputs.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_names" { value = azurerm_virtual_network.vnet[*].name }
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:
-
-upgradeparametresi, 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 çalıştırma planı oluşturun
Terraform planını çalıştırarak yürütme planı oluşturun.
terraform plan -out main.tfplan
Önemli noktalar:
-
terraform plankomutu bir yürütme planı oluşturur, ancak bunu çalıştırmaz. 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ı
-outparametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-outkullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
Terraform yürütme planını uygulayın
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 applykomutu, daha önceterraform plan -out main.tfplankomutunu çalıştırdığınızı varsayar. - parametresi için
-outfarklı bir dosya adı belirttiyseniz, çağrısındaterraform applyaynı dosya adını kullanın. - parametresini
-outkullanmadıysanız, parametresiz olarak çağırınterraform apply.
Sonuçları doğrulama
Azure kaynak grubu adını alın.
resource_group_name=$(terraform output -raw resource_group_name)Sanal ağ adlarını alın.
terraform output virtual_network_namesÖnceki adımda yazdırılan her sanal ağ adı için, etkin (uygulanan) yapılandırmaları yazdırmak için az network manager list-effective-connectivity-config komutunu çalıştırın. Yer tutucuyu
<virtual_network_name>sanal ağ adıyla değiştirin.az network manager list-effective-connectivity-config \ --resource-group $resource_group_name \ --vnet-name <virtual_network_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 komutunu çalıştırın ve
destroybayrağını belirtin.terraform plan -destroy -out main.destroy.tfplanÖnemli noktalar:
-
terraform plankomutu bir yürütme planı oluşturur, ancak bunu çalıştırmaz. 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ı
-outparametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin-outkullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
-
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