Créer un réseau spoke dans Azure à l’aide de Terraform
Terraform permet la définition, l’aperçu et le déploiement d’une infrastructure cloud. Terraform vous permet de créer des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier un fournisseur de services cloud, tel qu’Azure, et les éléments qui composent votre infrastructure cloud. Après avoir créé vos fichiers de configuration, vous créez un plan d’exécution qui vous permet d’afficher un aperçu de vos modifications d’infrastructure avant leur déploiement. Une fois que vous avez vérifié les modifications, vous appliquez le plan d’exécution pour déployer l’infrastructure.
Dans cet article, vous implémentez deux réseaux spoke distincts pour illustrer la séparation des charges de travail. Les réseaux partagent des ressources communes via le réseau virtuel hub. Les membres spokes peuvent servir à isoler les charges de travail dans leurs propres réseaux virtuels, qui sont alors gérées séparément des autres membres spokes. Chaque charge de travail peut inclure plusieurs niveaux, avec plusieurs sous-réseaux connectés à l’aide d’équilibreurs de charge Azure.
Dans cet article, vous apprendrez comment :
- Implémenter les réseaux virtuels spoke dans une topologie hub-and-spoke
- Créer des machines virtuelles dans les réseaux spoke
- Établir des peerings de réseaux virtuels avec les réseaux hub
1. Configurer votre environnement
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Configurez Terraform : Si vous ne l’avez pas déjà fait, configurez Terraform à l’aide de l’une des options suivantes :
Créez une topologie de réseau hybride hub-and-spoke avec Terraform dans Azure.
Créez une appliance de réseau virtuel hub avec Terraform dans Azure.
2. Implémenter le code Terraform
Deux scripts spoke sont créés dans cette section. Chaque script définit un réseau virtuel spoke et une machine virtuelle pour la charge de travail. Un réseau virtuel appairé du hub au spoke est ensuite créé.
Faites de l’exemple de répertoire créé dans le premier article de cette série le répertoire actif.
Créez un fichier nommé
spoke1.tf
et insérez le code suivant :locals { spoke1-location = "eastus" spoke1-resource-group = "spoke1-vnet-rg" prefix-spoke1 = "spoke1" } resource "azurerm_resource_group" "spoke1-vnet-rg" { name = local.spoke1-resource-group location = local.spoke1-location } resource "azurerm_virtual_network" "spoke1-vnet" { name = "spoke1-vnet" location = azurerm_resource_group.spoke1-vnet-rg.location resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name address_space = ["10.1.0.0/16"] tags = { environment = local.prefix-spoke1 } } resource "azurerm_subnet" "spoke1-mgmt" { name = "mgmt" resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke1-vnet.name address_prefixes = ["10.1.0.64/27"] } resource "azurerm_subnet" "spoke1-workload" { name = "workload" resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke1-vnet.name address_prefixes = ["10.1.1.0/24"] } resource "azurerm_virtual_network_peering" "spoke1-hub-peer" { name = "spoke1-hub-peer" resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke1-vnet.name remote_virtual_network_id = azurerm_virtual_network.hub-vnet.id allow_virtual_network_access = true allow_forwarded_traffic = true allow_gateway_transit = false use_remote_gateways = true depends_on = [azurerm_virtual_network.spoke1-vnet, azurerm_virtual_network.hub-vnet , azurerm_virtual_network_gateway.hub-vnet-gateway] } resource "azurerm_network_interface" "spoke1-nic" { name = "${local.prefix-spoke1}-nic" location = azurerm_resource_group.spoke1-vnet-rg.location resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name enable_ip_forwarding = true ip_configuration { name = local.prefix-spoke1 subnet_id = azurerm_subnet.spoke1-mgmt.id private_ip_address_allocation = "Dynamic" } } resource "azurerm_virtual_machine" "spoke1-vm" { name = "${local.prefix-spoke1}-vm" location = azurerm_resource_group.spoke1-vnet-rg.location resource_group_name = azurerm_resource_group.spoke1-vnet-rg.name network_interface_ids = [azurerm_network_interface.spoke1-nic.id] vm_size = var.vmsize storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "16.04-LTS" version = "latest" } storage_os_disk { name = "myosdisk1" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "${local.prefix-spoke1}-vm" admin_username = var.username admin_password = var.password } os_profile_linux_config { disable_password_authentication = false } tags = { environment = local.prefix-spoke1 } } resource "azurerm_virtual_network_peering" "hub-spoke1-peer" { name = "hub-spoke1-peer" resource_group_name = azurerm_resource_group.hub-vnet-rg.name virtual_network_name = azurerm_virtual_network.hub-vnet.name remote_virtual_network_id = azurerm_virtual_network.spoke1-vnet.id allow_virtual_network_access = true allow_forwarded_traffic = true allow_gateway_transit = true use_remote_gateways = false depends_on = [azurerm_virtual_network.spoke1-vnet, azurerm_virtual_network.hub-vnet, azurerm_virtual_network_gateway.hub-vnet-gateway] }
Créez un fichier nommé
spoke2.tf
et insérez le code suivant :locals { spoke2-location = "eastus" spoke2-resource-group = "spoke2-vnet-rg" prefix-spoke2 = "spoke2" } resource "azurerm_resource_group" "spoke2-vnet-rg" { name = local.spoke2-resource-group location = local.spoke2-location } resource "azurerm_virtual_network" "spoke2-vnet" { name = "${local.prefix-spoke2}-vnet" location = azurerm_resource_group.spoke2-vnet-rg.location resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name address_space = ["10.2.0.0/16"] tags = { environment = local.prefix-spoke2 } } resource "azurerm_subnet" "spoke2-mgmt" { name = "mgmt" resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke2-vnet.name address_prefixes = ["10.2.0.64/27"] } resource "azurerm_subnet" "spoke2-workload" { name = "workload" resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke2-vnet.name address_prefixes = ["10.2.1.0/24"] } resource "azurerm_virtual_network_peering" "spoke2-hub-peer" { name = "${local.prefix-spoke2}-hub-peer" resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name virtual_network_name = azurerm_virtual_network.spoke2-vnet.name remote_virtual_network_id = azurerm_virtual_network.hub-vnet.id allow_virtual_network_access = true allow_forwarded_traffic = true allow_gateway_transit = false use_remote_gateways = true depends_on = [azurerm_virtual_network.spoke2-vnet, azurerm_virtual_network.hub-vnet, azurerm_virtual_network_gateway.hub-vnet-gateway] } resource "azurerm_network_interface" "spoke2-nic" { name = "${local.prefix-spoke2}-nic" location = azurerm_resource_group.spoke2-vnet-rg.location resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name enable_ip_forwarding = true ip_configuration { name = local.prefix-spoke2 subnet_id = azurerm_subnet.spoke2-mgmt.id private_ip_address_allocation = "Dynamic" } tags = { environment = local.prefix-spoke2 } } resource "azurerm_virtual_machine" "spoke2-vm" { name = "${local.prefix-spoke2}-vm" location = azurerm_resource_group.spoke2-vnet-rg.location resource_group_name = azurerm_resource_group.spoke2-vnet-rg.name network_interface_ids = [azurerm_network_interface.spoke2-nic.id] vm_size = var.vmsize storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "16.04-LTS" version = "latest" } storage_os_disk { name = "myosdisk1" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "${local.prefix-spoke2}-vm" admin_username = var.username admin_password = var.password } os_profile_linux_config { disable_password_authentication = false } tags = { environment = local.prefix-spoke2 } } resource "azurerm_virtual_network_peering" "hub-spoke2-peer" { name = "hub-spoke2-peer" resource_group_name = azurerm_resource_group.hub-vnet-rg.name virtual_network_name = azurerm_virtual_network.hub-vnet.name remote_virtual_network_id = azurerm_virtual_network.spoke2-vnet.id allow_virtual_network_access = true allow_forwarded_traffic = true allow_gateway_transit = true use_remote_gateways = false depends_on = [azurerm_virtual_network.spoke2-vnet, azurerm_virtual_network.hub-vnet, azurerm_virtual_network_gateway.hub-vnet-gateway] }
Résoudre les problèmes liés à Terraform sur Azure
Résoudre les problèmes courants liés à l’utilisation de Terraform sur Azure
Étapes suivantes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour