Terraform kullanarak Azure'da merkez sanal ağ gereci oluşturma

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.

VPN cihazı, şirket içi ağa dış bağlantı sağlayan bir cihazdır. VPN cihazı bir donanım cihazı veya yazılım çözümü olabilir. Yazılım çözümüne örnek olarak Windows Server 2012'deki Yönlendirme ve Uzaktan Erişim Hizmeti (RRAS) gösterilebilir. VPN gereçleri hakkında daha fazla bilgi için bkz . Siteden Siteye VPN Gateway bağlantıları için VPN cihazları hakkında.

Azure desteği seçebileceğiniz çok çeşitli ağ sanal gereçleri vardır. Bu makale için bir Ubuntu görüntüsü kullanılır. Azure'da desteklenen çok çeşitli cihaz çözümleri hakkında daha fazla bilgi edinmek için Ağ Gereçleri giriş sayfasına bakın.

Bu makalede şunları öğreneceksiniz:

  • Merkez-uç topolojisinde Hub VNet'ini uygulama
  • Alet işlevi gören Hub Ağ Sanal Makinesi oluşturma
  • CustomScript uzantılarını kullanarak yolları etkinleştirme
  • Merkez-Uç ağ geçidi rota tabloları oluşturma

1. Ortamınızı yapılandırma

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Azure'da Terraform ile merkez-uç hibrit ağ topolojisi oluşturun.

  • Azure'da Terraform ile şirket içi sanal ağ oluşturma.

  • Azure'da Terraform ile bir merkez sanal ağı oluşturun.

2. Terraform kodunu uygulama

  1. Bu serinin ilk makalesinde oluşturulan örnek dizini geçerli dizin yapın.

  2. adlı hub-nva.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    locals {
        prefix-hub-nva         = "hub-nva"
        hub-nva-location       = "eastus"
        hub-nva-resource-group = "hub-nva-rg"
    }
    
    resource "azurerm_resource_group" "hub-nva-rg" {
        name     = "${local.prefix-hub-nva}-rg"
        location = local.hub-nva-location
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_network_interface" "hub-nva-nic" {
        name                 = "${local.prefix-hub-nva}-nic"
        location             = azurerm_resource_group.hub-nva-rg.location
        resource_group_name  = azurerm_resource_group.hub-nva-rg.name
        enable_ip_forwarding = true
    
        ip_configuration {
        name                          = local.prefix-hub-nva
        subnet_id                     = azurerm_subnet.hub-dmz.id
        private_ip_address_allocation = "Static"
        private_ip_address            = "10.0.0.36"
        }
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_virtual_machine" "hub-nva-vm" {
        name                  = "${local.prefix-hub-nva}-vm"
        location              = azurerm_resource_group.hub-nva-rg.location
        resource_group_name   = azurerm_resource_group.hub-nva-rg.name
        network_interface_ids = [azurerm_network_interface.hub-nva-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-hub-nva}-vm"
        admin_username = var.username
        admin_password = var.password
        }
    
        os_profile_linux_config {
        disable_password_authentication = false
        }
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_virtual_machine_extension" "enable-routes" {
        name                 = "enable-iptables-routes"
        virtual_machine_id   = azurerm_virtual_machine.hub-nva-vm.id
        publisher            = "Microsoft.Azure.Extensions"
        type                 = "CustomScript"
        type_handler_version = "2.0"
    
    
        settings = <<SETTINGS
        {
            "fileUris": [
            "https://raw.githubusercontent.com/mspnp/reference-architectures/master/scripts/linux/enable-ip-forwarding.sh"
            ],
            "commandToExecute": "bash enable-ip-forwarding.sh"
        }
    SETTINGS
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_route_table" "hub-gateway-rt" {
        name                          = "hub-gateway-rt"
        location                      = azurerm_resource_group.hub-nva-rg.location
        resource_group_name           = azurerm_resource_group.hub-nva-rg.name
        disable_bgp_route_propagation = false
    
        route {
        name           = "toHub"
        address_prefix = "10.0.0.0/16"
        next_hop_type  = "VnetLocal"
        }
    
        route {
        name                   = "toSpoke1"
        address_prefix         = "10.1.0.0/16"
        next_hop_type          = "VirtualAppliance"
        next_hop_in_ip_address = "10.0.0.36"
        }
    
        route {
        name                   = "toSpoke2"
        address_prefix         = "10.2.0.0/16"
        next_hop_type          = "VirtualAppliance"
        next_hop_in_ip_address = "10.0.0.36"
        }
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_subnet_route_table_association" "hub-gateway-rt-hub-vnet-gateway-subnet" {
        subnet_id      = azurerm_subnet.hub-gateway-subnet.id
        route_table_id = azurerm_route_table.hub-gateway-rt.id
        depends_on = [azurerm_subnet.hub-gateway-subnet]
    }
    
    resource "azurerm_route_table" "spoke1-rt" {
        name                          = "spoke1-rt"
        location                      = azurerm_resource_group.hub-nva-rg.location
        resource_group_name           = azurerm_resource_group.hub-nva-rg.name
        disable_bgp_route_propagation = false
    
        route {
        name                   = "toSpoke2"
        address_prefix         = "10.2.0.0/16"
        next_hop_type          = "VirtualAppliance"
        next_hop_in_ip_address = "10.0.0.36"
        }
    
        route {
        name           = "default"
        address_prefix = "0.0.0.0/0"
        next_hop_type  = "vnetlocal"
        }
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_subnet_route_table_association" "spoke1-rt-spoke1-vnet-mgmt" {
        subnet_id      = azurerm_subnet.spoke1-mgmt.id
        route_table_id = azurerm_route_table.spoke1-rt.id
        depends_on = [azurerm_subnet.spoke1-mgmt]
    }
    
    resource "azurerm_subnet_route_table_association" "spoke1-rt-spoke1-vnet-workload" {
        subnet_id      = azurerm_subnet.spoke1-workload.id
        route_table_id = azurerm_route_table.spoke1-rt.id
        depends_on = [azurerm_subnet.spoke1-workload]
    }
    
    resource "azurerm_route_table" "spoke2-rt" {
        name                          = "spoke2-rt"
        location                      = azurerm_resource_group.hub-nva-rg.location
        resource_group_name           = azurerm_resource_group.hub-nva-rg.name
        disable_bgp_route_propagation = false
    
        route {
        name                   = "toSpoke1"
        address_prefix         = "10.1.0.0/16"
        next_hop_in_ip_address = "10.0.0.36"
        next_hop_type          = "VirtualAppliance"
        }
    
        route {
        name           = "default"
        address_prefix = "0.0.0.0/0"
        next_hop_type  = "vnetlocal"
        }
    
        tags = {
        environment = local.prefix-hub-nva
        }
    }
    
    resource "azurerm_subnet_route_table_association" "spoke2-rt-spoke2-vnet-mgmt" {
        subnet_id      = azurerm_subnet.spoke2-mgmt.id
        route_table_id = azurerm_route_table.spoke2-rt.id
        depends_on = [azurerm_subnet.spoke2-mgmt]
    }
    
    resource "azurerm_subnet_route_table_association" "spoke2-rt-spoke2-vnet-workload" {
        subnet_id      = azurerm_subnet.spoke2-workload.id
        route_table_id = azurerm_route_table.spoke2-rt.id
        depends_on = [azurerm_subnet.spoke2-workload]
    }
    

Azure'da Terraform sorunlarını giderme

Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme

Sonraki adımlar