Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini mengilustrasikan contoh penggunaan Titik Akhir Privat dan integrasi VNet regional untuk menghubungkan dua aplikasi web (frontend dan backend) dengan aman dengan konfigurasi Terraform berikut:
- Menerapkan VNet
- Membuat subnet pertama untuk integrasi
- Buat subnet kedua untuk titik akhir privat, dan nonaktifkan kebijakan jaringan subnet untuk titik akhir privat (set
private_endpoint_network_policies_enabled = false) - Menyebarkan satu paket App Service jenis Dasar, Standar, PremiumV2, PremiumV3, IsolatedV2, Functions Premium (kadang-kadang disebut sebagai paket Elastic Premium), diperlukan untuk fitur Titik Akhir Privat
- Buat aplikasi web frontend dengan pengaturan aplikasi tertentu untuk menggunakan zona DNS privat. Untuk informasi selengkapnya, lihat Zona privat Azure DNS.
- Menyambungkan aplikasi web frontend ke subnet integrasi
- Membuat aplikasi web backend
- Membuat zona privat DNS dengan nama zona tautan privat untuk aplikasi web (
privatelink.azurewebsites.net) - Tautkan zona ini ke VNet
- Buat titik akhir privat untuk aplikasi web backend di subnet titik akhir, dan daftarkan nama DNS (situs dan SCM) di zona privat DNS yang dibuat sebelumnya
Cara menggunakan terraform di Azure
Telusuri ke dokumentasi Azure untuk mempelajari cara menggunakan terraform dengan Azure.
File terraform lengkap
Untuk menggunakan file ini, ganti tempat penampung <unique-frontend-app-name> dan <unique-backend-app-name> (nama aplikasi digunakan untuk membentuk nama DNS unik di seluruh dunia).
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
}
}
Langkah berikutnya
Pelajari selengkapnya tentang menggunakan Terraform di Azure