Özel Uç Nokta ve sanal ağ tümleştirmesi ile güvenli bir şekilde bağlanmış iki web uygulaması oluşturma

Bu makalede, aşağıdaki terraform yapılandırmasıyla iki web uygulamasını (ön uç ve arka uç) güvenli bir şekilde bağlamak için Özel Uç Nokta ve bölgesel sanal ağ tümleştirmesinin örnek kullanımı gösterilmektedir:

  • Sanal ağ dağıtma
  • Tümleştirme için ilk alt ağı oluşturma
  • Özel uç nokta için ikinci alt ağı oluşturun; ağ ilkelerini devre dışı bırakmak için belirli bir parametre ayarlamanız gerekir
  • Özel Uç Nokta özelliği için gereken Temel, Standart, PremiumV2, PremiumV3, IsolatedV2, İşlevler Premium (bazen Elastik Premium planı olarak da adlandırılır) türünde bir App Service planı dağıtın
  • Özel DNS bölgesini kullanmak için belirli uygulama ayarlarıyla ön uç web uygulaması oluşturma, diğer ayrıntılar
  • Ön uç web uygulamasını tümleştirme alt ağına Bağlan
  • Arka uç web uygulamasını oluşturma
  • Web uygulaması için özel bağlantı bölgesinin adıyla DNS özel bölgesini oluşturma privatelink.azurewebsites.net
  • Bu bölgeyi sanal ağa bağla
  • Uç nokta alt ağında arka uç web uygulaması için özel uç nokta oluşturun ve DNS adlarını (web sitesi ve SCM) daha önce oluşturulan DNS özel bölgesine kaydedin

Azure'da terraform kullanma

Terraform'un Azure ile nasıl kullanılacağını öğrenmek için Azure belgelerine göz atın.

Terraform dosyasının tamamı

Bu dosyayı kullanmak için unique-frontend-app-name ve< unique-backend-app-name>> yer tutucularını <değiştirin (uygulama adı, dünya çapında benzersiz bir DNS adı oluşturmak için kullanılır).

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "appservice-rg"
  location = "francecentral"
}

resource "azurerm_virtual_network" "vnet" {
  name                = "vnet"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  address_space       = ["10.0.0.0/16"]
}

resource "azurerm_subnet" "integrationsubnet" {
  name                 = "integrationsubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.1.0/24"]
  delegation {
    name = "delegation"
    service_delegation {
      name = "Microsoft.Web/serverFarms"
    }
  }
}

resource "azurerm_subnet" "endpointsubnet" {
  name                 = "endpointsubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.2.0/24"]
  private_endpoint_network_policies_enabled = true
}

resource "azurerm_service_plan" "appserviceplan" {
  name                = "appserviceplan"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  os_type             = "Windows"
  sku_name            = "P1v2"
}

resource "azurerm_windows_web_app" "frontwebapp" {
  name                = "<unique-frontend-app-name>"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  service_plan_id = azurerm_service_plan.appserviceplan.id

  site_config {}
  app_settings = {
    "WEBSITE_DNS_SERVER": "168.63.129.16",
    "WEBSITE_VNET_ROUTE_ALL": "1"
  }
}

resource "azurerm_app_service_virtual_network_swift_connection" "vnetintegrationconnection" {
  app_service_id  = azurerm_windows_web_app.frontwebapp.id
  subnet_id       = azurerm_subnet.integrationsubnet.id
}

resource "azurerm_windows_web_app" "backwebapp" {
  name                = "<unique-backend-app-name>"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  service_plan_id = azurerm_service_plan.appserviceplan.id

  site_config {}
}

resource "azurerm_private_dns_zone" "dnsprivatezone" {
  name                = "privatelink.azurewebsites.net"
  resource_group_name = azurerm_resource_group.rg.name
}

resource "azurerm_private_dns_zone_virtual_network_link" "dnszonelink" {
  name = "dnszonelink"
  resource_group_name = azurerm_resource_group.rg.name
  private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name
  virtual_network_id = azurerm_virtual_network.vnet.id
}

resource "azurerm_private_endpoint" "privateendpoint" {
  name                = "backwebappprivateendpoint"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  subnet_id           = azurerm_subnet.endpointsubnet.id

  private_dns_zone_group {
    name = "privatednszonegroup"
    private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id]
  }

  private_service_connection {
    name = "privateendpointconnection"
    private_connection_resource_id = azurerm_windows_web_app.backwebapp.id
    subresource_names = ["sites"]
    is_manual_connection = false
  }
}

Sonraki adımlar

Azure'da Terraform kullanma hakkında daha fazla bilgi edinin