Membuat dua aplikasi web yang terhubung dengan aman menggunakan integrasi VNet dan Titik Akhir Privat
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:
- Menyebarkan VNet
- Membuat subnet pertama untuk integrasi
- Membuat subnet kedua untuk titik akhir privat, Anda harus mengatur parameter tertentu untuk menonaktifkan kebijakan jaringan
- 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
- Membuat aplikasi web ujung depan dengan pengaturan aplikasi tertentu untuk menggunakan zona DNS pribadi, detail selengkapnya
- Menyambungkan aplikasi web ujung depan ke subnet integrasi
- Membuat aplikasi web ujung belakang
- Membuat zona privat DNS dengan nama zona link privat untuk aplikasi web privatelink.azurewebsites.net
- Menautkan zona ini ke VNet
- Membuat titik akhir privat untuk aplikasi web ujung belakang di subnet titik akhir, lalu daftarkan nama DNS (situs web dan SCM) di zona privat DNS yang dibuat sebelumnya
Cara menggunakan terraform di Azure
Telusuri 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 = 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
}
}
Langkah berikutnya
Pelajari selengkapnya tentang menggunakan Terraform di Azure