Özel Uç Nokta ve Sanal Ağ (VNet) entegrasyonu ile güvenli bir şekilde bağlanan iki web uygulaması oluşturun.

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:

  1. Sanal Ağ Yapılandırması
  2. Tümleştirme için ilk alt ağı oluşturma
  3. Özel uç nokta için ikinci alt ağı oluşturun ve özel uç noktalar için alt ağ ilkelerini devre dışı bırakın (küme private_endpoint_network_policies_enabled = false)
  4. Ö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
  5. Özel DNS bölgesini kullanmak için belirli uygulama ayarlarıyla ön uç web uygulamasını oluşturun. Daha fazla bilgi için bkz. Azure DNS özel bölgeleri.
  6. Ön uç web uygulamasını tümleştirme alt ağına bağlama
  7. Arka uç web uygulamasını oluşturma
  8. Web uygulamaları için özel bağlantı bölgesinin adıyla DNS özel bölgesini oluşturma (privatelink.azurewebsites.net)
  9. Bu bölgeyi sanal ağa bağla
  10. Uç nokta alt ağında arka uç web uygulaması için özel uç nokta oluşturma ve DNS adlarını (site ve SCM) önceden oluşturulmuş DNS özel bölgesine kaydetme

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 = false
}

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