Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beginnen Sie mit Azure Virtual Network Manager, indem Sie Terraform verwenden, um die Konnektivität für alle virtuellen Netzwerke bereitzustellen.
In diesem Schnellstart stellen Sie drei virtuelle Netzwerke bereit und erstellen mit Azure Virtual Network Manager eine Cloudnetzwerktopologie. Anschließend überprüfen Sie, ob die Konnektivitätskonfiguration angewandt wurde. Sie können aus einer Bereitstellung mit einem Abonnementbereich oder einem Verwaltungsgruppenbereich wählen. Erfahren Sie mehr über Netzwerk-Manager-Bereiche.
Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Mithilfe von Terraform erstellen Sie Konfigurationsdateien mit der HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nachdem Sie Ihre Konfigurationsdateien erstellt haben, erstellen Sie einen Ausführungsplan , mit dem Sie eine Vorschau ihrer Infrastrukturänderungen anzeigen können, bevor sie bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen Sie einen zufälligen Wert für den Namen der Azure-Ressourcengruppe mithilfe von random_pet.
- Erstellen Sie eine Azure-Ressourcengruppe mit azurerm_resource_group.
- Erstellen Sie ein Array virtueller Netzwerke mithilfe von azurerm_virtual_network.
- Erstellen Sie ein Array von Subnetzen mit azurerm_subnet.
- Erstellen Sie einen virtuellen Netzwerk-Manager mit azurerm_virtual_network_manager.
- Erstellen Sie eine Netzwerk-Manager-Netzwerkgruppe mit azurerm_network_manager_network_group.
- Erstellen Sie ein statisches Netzwerk-Manager-Mitglied mit azurerm_network_manager_static_member.
- Erstellen Sie eine Netzwerk-Manager-Konnektivitätskonfiguration mit azurerm_network_manager_connectivity_configuration.
- Erstellen Sie eine Netzwerk-Manager-Bereitstellung mit azurerm_network_manager_deployment.
Voraussetzungen
- Installieren und Konfigurieren von Terraform
- Um dynamische Netzwerkgruppen zu ändern, müssen Sie nur Zugriff über azure RBAC-Rollenzuweisung erhalten . Klassische Administrator-/Legacyautorisierung wird nicht unterstützt.
Implementieren des Terraform-Codes
In diesem Codebeispiel wird Azure Virtual Network Manager im Abonnementbereich implementiert.
Hinweis
Der Beispielcode für diesen Artikel befindet sich im Azure Terraform GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.
Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens
providers.tf
, und fügen Sie den folgenden Code ein: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 {} }
Erstellen Sie eine Datei namens
main.tf
, und fügen Sie den folgenden Code ein:# 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] }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein: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" }
Erstellen Sie eine Datei namens
outputs.tf
, und fügen Sie den folgenden Code ein:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_names" { value = azurerm_virtual_network.vnet[*].name }
Implementieren des Terraform-Codes
In diesem Codebeispiel wird Azure Virtual Network Manager im Verwaltungsgruppenbereich implementiert.
Hinweis
Der Beispielcode für diesen Artikel befindet sich im Azure Terraform GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.
Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens
providers.tf
, und fügen Sie den folgenden Code ein: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 {} }
Erstellen Sie eine Datei namens
main.tf
, und fügen Sie den folgenden Code ein:# 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] }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein: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 }
Erstellen Sie eine Datei namens
outputs.tf
, und fügen Sie den folgenden Code ein:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_names" { value = azurerm_virtual_network.vnet[*].name }
Initialisieren von Terraform
Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.
terraform init -upgrade
Wichtige Punkte:
- Der Parameter
-upgrade
aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.
Erstellen eines Terraform-Ausführungsplans
Führen Sie terraform Plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Wichtige Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
Anwenden eines Terraform-Ausführungsplans
Führen Sie terraform aus , um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Wichtige Punkte:
- Der Beispielbefehl
terraform apply
setzt voraus, dass Sie zuvorterraform plan -out main.tfplan
ausgeführt haben. - Wenn Sie einen anderen Dateinamen für den Parameter
-out
angegeben haben, verwenden Sie denselben Dateinamen im Aufruf vonterraform apply
. - Wenn Sie den Parameter
-out
nicht verwendet haben, rufen Sieterraform apply
ohne Parameter auf.
Überprüfen der Ergebnisse
Rufen Sie den Namen der Azure-Ressourcengruppe ab.
resource_group_name=$(terraform output -raw resource_group_name)
Rufen Sie die Namen des virtuellen Netzwerks ab.
terraform output virtual_network_names
Führen Sie für jeden virtuellen Netzwerknamen, der im vorherigen Schritt gedruckt wurde, az Network Manager list-effective-connectivity-config aus, um die effektiven (angewendeten) Konfigurationen zu drucken. Ersetzen Sie den Platzhalter „
<virtual_network_name>
“ durch den Namen des virtuellen Netzwerks.az network manager list-effective-connectivity-config \ --resource-group $resource_group_name \ --vnet-name <virtual_network_name>
Bereinigen von Ressourcen
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:
Führen Sie terraform plan aus, und geben Sie die
destroy
Kennzeichnung an.terraform plan -destroy -out main.destroy.tfplan
Wichtige Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
- Durch den Befehl
Führen Sie terraform apply aus, um den Ausführungsplan anzuwenden.
terraform apply main.destroy.tfplan
Problembehandlung für Terraform in Azure
Behandeln häufiger Probleme bei der Verwendung von Terraform in Azure