Rövid útmutató: Webes forgalom irányítása Azure-alkalmazás Átjáróval – Terraform
Ebben a rövid útmutatóban a Terraform használatával hozhat létre Azure-alkalmazás átjárót. Ezután tesztelje az Application Gatewayt, hogy biztosan megfelelően működjön. Ebben a példában a Standard v2 termékváltozatot használjuk.
A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre HCL-szintaxissal. A HCL szintaxissal megadhatja a felhőszolgáltatót – például az Azure-t – és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet , amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.
- Azure-erőforráscsoport létrehozása a azurerm_resource_group
- Azure-beli virtuális hálózat létrehozása azurerm_virtual_network
- Azure-alhálózat létrehozása azurerm_subnet
- Nyilvános Azure-IP-cím létrehozása azurerm_public_ip
- Azure-alkalmazás-átjáró létrehozása azurerm_application_gateway
- Azure hálózati adapter létrehozása azurerm_network_interface
- Azure hálózati adapter alkalmazásátjáró háttércímkészlet-társításának létrehozása azurerm_network_interface_application_gateway_backend_address_pool_association
- Azure Windows rendszerű virtuális gép létrehozása azurerm_windows_virtual_machine
- Azure-beli virtuálisgép-bővítmény létrehozása azurerm_virtual_machine_extension
Feljegyzés
Az Application Gateway előtérrendszere mostantól támogatja a kettős veremű IP-címeket (előzetes verzió). Mostantól legfeljebb négy előtérbeli IP-címet hozhat létre: két IPv4-címet (nyilvános és privát) és két IPv6-címet (nyilvános és privát).
Előfeltételek
A Terraform-kód implementálása
Feljegyzés
A cikk mintakódja az Azure Terraform GitHub-adattárban található. Megtekintheti a Terraform aktuális és korábbi verzióinak teszteredményeit tartalmazó naplófájlt.
Hozzon létre egy könyvtárat, amelyben tesztelheti a Terraform-mintakódot, és az aktuális könyvtárá teheti.
Hozzon létre egy elnevezett
providers.tf
fájlt, és szúrja be a következő kódot:terraform { required_version = ">=1.2" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.0" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features {} }
Hozzon létre egy elnevezett
main.tf
fájlt, és szúrja be a következő kódot:resource "random_string" "rg" { length = 8 upper = false special = false } resource "azurerm_resource_group" "rg" { name = "101-application-gateway-${random_string.rg.result}" location = "eastus" } resource "azurerm_virtual_network" "vnet" { name = "myVNet" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location address_space = ["10.21.0.0/16"] } resource "azurerm_subnet" "frontend" { name = "myAGSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.21.0.0/24"] } resource "azurerm_subnet" "backend" { name = "myBackendSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.21.1.0/24"] } resource "azurerm_public_ip" "pip" { name = "myAGPublicIPAddress" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location allocation_method = "Static" sku = "Standard" } resource "azurerm_application_gateway" "main" { name = "myAppGateway" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku { name = "Standard_v2" tier = "Standard_v2" capacity = 2 } gateway_ip_configuration { name = "my-gateway-ip-configuration" subnet_id = azurerm_subnet.frontend.id } frontend_port { name = var.frontend_port_name port = 80 } frontend_ip_configuration { name = var.frontend_ip_configuration_name public_ip_address_id = azurerm_public_ip.pip.id } backend_address_pool { name = var.backend_address_pool_name } backend_http_settings { name = var.http_setting_name cookie_based_affinity = "Disabled" port = 80 protocol = "Http" request_timeout = 60 } http_listener { name = var.listener_name frontend_ip_configuration_name = var.frontend_ip_configuration_name frontend_port_name = var.frontend_port_name protocol = "Http" } request_routing_rule { name = var.request_routing_rule_name rule_type = "Basic" http_listener_name = var.listener_name backend_address_pool_name = var.backend_address_pool_name backend_http_settings_name = var.http_setting_name priority = 1 } } resource "azurerm_network_interface" "nic" { count = 2 name = "nic-${count.index+1}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name = "nic-ipconfig-${count.index+1}" subnet_id = azurerm_subnet.backend.id private_ip_address_allocation = "Dynamic" } } resource "azurerm_network_interface_application_gateway_backend_address_pool_association" "nic-assoc" { count = 2 network_interface_id = azurerm_network_interface.nic[count.index].id ip_configuration_name = "nic-ipconfig-${count.index+1}" backend_address_pool_id = one(azurerm_application_gateway.main.backend_address_pool).id } resource "random_password" "password" { length = 16 special = true lower = true upper = true numeric = true } resource "azurerm_windows_virtual_machine" "vm" { count = 2 name = "myVM${count.index+1}" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location size = "Standard_DS1_v2" admin_username = "azureadmin" admin_password = random_password.password.result network_interface_ids = [ azurerm_network_interface.nic[count.index].id, ] os_disk { caching = "ReadWrite" storage_account_type = "Standard_LRS" } source_image_reference { publisher = "MicrosoftWindowsServer" offer = "WindowsServer" sku = "2019-Datacenter" version = "latest" } } resource "azurerm_virtual_machine_extension" "vm-extensions" { count = 2 name = "vm${count.index+1}-ext" virtual_machine_id = azurerm_windows_virtual_machine.vm[count.index].id publisher = "Microsoft.Compute" type = "CustomScriptExtension" type_handler_version = "1.10" settings = <<SETTINGS { "commandToExecute": "powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)" } SETTINGS }
Tipp.
Módosíthatja az Name
alatta lévő resource\applicationGateWay\main\sku
értékek és Tier
paraméterek értékeit egy másik termékváltozat használatához. Például: Basic
Hozzon létre egy elnevezett
variables.tf
fájlt, és szúrja be a következő kódot:variable "backend_address_pool_name" { default = "myBackendPool" } variable "frontend_port_name" { default = "myFrontendPort" } variable "frontend_ip_configuration_name" { default = "myAGIPConfig" } variable "http_setting_name" { default = "myHTTPsetting" } variable "listener_name" { default = "myListener" } variable "request_routing_rule_name" { default = "myRoutingRule" }
Hozzon létre egy elnevezett
outputs.tf
fájlt, és szúrja be a következő kódot:output "gateway_frontend_ip" { value = "http://${azurerm_public_ip.pip.ip_address}" }
A Terraform inicializálása
Futtassa a Terraform init parancsot a Terraform üzembe helyezésének inicializálásához. Ez a parancs letölti az Azure-erőforrások kezeléséhez szükséges Azure-szolgáltatót.
terraform init -upgrade
Főbb pontok:
- A
-upgrade
paraméter frissíti a szükséges szolgáltatói beépülő modulokat a legújabb verzióra, amely megfelel a konfiguráció verziókorlátozásainak.
Terraform végrehajtási terv létrehozása
Végrehajtási terv létrehozásához futtassa a Terraform-tervet .
terraform plan -out main.tfplan
Főbb pontok:
- A
terraform plan
parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat. - Az opcionális
-out
paraméter lehetővé teszi a terv kimeneti fájljának megadását.-out
A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.
Terraform végrehajtási terv alkalmazása
A terraform futtatásával alkalmazza a végrehajtási tervet a felhőinfrastruktúrára.
terraform apply main.tfplan
Főbb pontok:
- A példaparancs
terraform apply
feltételezi, hogy korábban futtatottterraform plan -out main.tfplan
. - Ha másik fájlnevet adott meg a
-out
paraméterhez, használja ugyanazt a fájlnevet a hívásbanterraform apply
. - Ha nem használta a paramétert
-out
, hívjonterraform apply
paraméterek nélkül.
Az eredmények ellenőrzése
A végrehajtási terv alkalmazásakor a Terraform megjeleníti az előtérbeli nyilvános IP-címet. Ha törölte a képernyőt, az alábbi Terraform paranccsal lekérheti ezt az értéket:
echo $(terraform output -raw gateway_frontend_ip)
Illessze be a nyilvános IP-címet a webböngésző címsorába. Frissítse a böngészőt a virtuális gép nevének megtekintéséhez. Érvényes válasz ellenőrzi, hogy az application gateway sikeresen létrejött-e, és képes-e csatlakozni a háttérrendszerhez.
Az erőforrások eltávolítása
Ha már nincs szüksége a Terraformon keresztül létrehozott erőforrásokra, hajtsa végre az alábbi lépéseket:
Futtassa a Terraform-tervet , és adja meg a jelölőt
destroy
.terraform plan -destroy -out main.destroy.tfplan
Főbb pontok:
- A
terraform plan
parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat. - Az opcionális
-out
paraméter lehetővé teszi a terv kimeneti fájljának megadását.-out
A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.
- A
A végrehajtási terv alkalmazásához futtassa a terraformát .
terraform apply main.destroy.tfplan
A Terraform hibaelhárítása az Azure-ban
A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása