1+ terraform {
2+
3+ required_version = " >=0.12"
4+
5+ required_providers {
6+ azurerm = {
7+ source = " hashicorp/azurerm"
8+ version = " >=2.97.0"
9+ }
10+ }
11+ }
12+
13+ provider "azurerm" {
14+ features {}
15+ }
16+
17+ resource "azurerm_resource_group" "rg1" {
18+ name = " myResourceGroupAG"
19+ location = " eastus"
20+ }
21+
22+ resource "azurerm_virtual_network" "vnet1" {
23+ name = " myVNet"
24+ resource_group_name = azurerm_resource_group. rg1 . name
25+ location = azurerm_resource_group. rg1 . location
26+ address_space = [" 10.21.0.0/16" ]
27+ }
28+
29+ resource "azurerm_subnet" "frontend" {
30+ name = " myAGSubnet"
31+ resource_group_name = azurerm_resource_group. rg1 . name
32+ virtual_network_name = azurerm_virtual_network. vnet1 . name
33+ address_prefixes = [" 10.21.0.0/24" ]
34+ }
35+
36+ resource "azurerm_subnet" "backend" {
37+ name = " myBackendSubnet"
38+ resource_group_name = azurerm_resource_group. rg1 . name
39+ virtual_network_name = azurerm_virtual_network. vnet1 . name
40+ address_prefixes = [" 10.21.1.0/24" ]
41+ }
42+
43+ resource "azurerm_public_ip" "pip1" {
44+ name = " myAGPublicIPAddress"
45+ resource_group_name = azurerm_resource_group. rg1 . name
46+ location = azurerm_resource_group. rg1 . location
47+ allocation_method = " Static"
48+ sku = " Standard"
49+ }
50+
51+
52+
53+ resource "azurerm_application_gateway" "network" {
54+ name = " myAppGateway"
55+ resource_group_name = azurerm_resource_group. rg1 . name
56+ location = azurerm_resource_group. rg1 . location
57+
58+ sku {
59+ name = " Standard_v2"
60+ tier = " Standard_v2"
61+ capacity = 2
62+ }
63+
64+ gateway_ip_configuration {
65+ name = " my-gateway-ip-configuration"
66+ subnet_id = azurerm_subnet. frontend . id
67+ }
68+
69+ frontend_port {
70+ name = var. frontend_port_name
71+ port = 80
72+ }
73+
74+ frontend_ip_configuration {
75+ name = var. frontend_ip_configuration_name
76+ public_ip_address_id = azurerm_public_ip. pip1 . id
77+ }
78+
79+ backend_address_pool {
80+ name = var. backend_address_pool_name
81+ }
82+
83+ backend_http_settings {
84+ name = var. http_setting_name
85+ cookie_based_affinity = " Disabled"
86+ port = 80
87+ protocol = " Http"
88+ request_timeout = 60
89+ }
90+
91+ http_listener {
92+ name = var. listener_name
93+ frontend_ip_configuration_name = var. frontend_ip_configuration_name
94+ frontend_port_name = var. frontend_port_name
95+ protocol = " Http"
96+ }
97+
98+ request_routing_rule {
99+ name = var. request_routing_rule_name
100+ rule_type = " Basic"
101+ http_listener_name = var. listener_name
102+ backend_address_pool_name = var. backend_address_pool_name
103+ backend_http_settings_name = var. http_setting_name
104+ }
105+ }
106+
107+ resource "azurerm_network_interface" "nic" {
108+ count = 2
109+ name = " nic-${ count . index + 1 } "
110+ location = azurerm_resource_group. rg1 . location
111+ resource_group_name = azurerm_resource_group. rg1 . name
112+
113+ ip_configuration {
114+ name = " nic-ipconfig-${ count . index + 1 } "
115+ subnet_id = azurerm_subnet. backend . id
116+ private_ip_address_allocation = " Dynamic"
117+ }
118+ }
119+
120+ resource "azurerm_network_interface_application_gateway_backend_address_pool_association" "nic-assoc01" {
121+ count = 2
122+ network_interface_id = azurerm_network_interface. nic [count . index ]. id
123+ ip_configuration_name = " nic-ipconfig-${ count . index + 1 } "
124+ backend_address_pool_id = azurerm_application_gateway. network . backend_address_pool [0 ]. id
125+ }
126+
127+ resource "random_password" "password" {
128+ length = 16
129+ special = true
130+ lower = true
131+ upper = true
132+ number = true
133+ }
134+
135+ resource "azurerm_windows_virtual_machine" "vm" {
136+ count = 2
137+ name = " myVM${ count . index + 1 } "
138+ resource_group_name = azurerm_resource_group. rg1 . name
139+ location = azurerm_resource_group. rg1 . location
140+ size = " Standard_DS1_v2"
141+ admin_username = " azureadmin"
142+ admin_password = random_password. password . result
143+
144+ network_interface_ids = [
145+ azurerm_network_interface . nic [count . index ]. id ,
146+ ]
147+
148+ os_disk {
149+ caching = " ReadWrite"
150+ storage_account_type = " Standard_LRS"
151+ }
152+
153+
154+ source_image_reference {
155+ publisher = " MicrosoftWindowsServer"
156+ offer = " WindowsServer"
157+ sku = " 2019-Datacenter"
158+ version = " latest"
159+ }
160+ }
161+
162+ resource "azurerm_virtual_machine_extension" "vm-extensions" {
163+ count = 2
164+ name = " vm${ count . index + 1 } -ext"
165+ virtual_machine_id = azurerm_windows_virtual_machine. vm [count . index ]. id
166+ publisher = " Microsoft.Compute"
167+ type = " CustomScriptExtension"
168+ type_handler_version = " 1.10"
169+
170+ settings = << SETTINGS
171+ {
172+ "commandToExecute": "powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"
173+ }
174+ SETTINGS
175+
176+ }
0 commit comments