scenarios/shared/terraform/modules/application-gateway/main.tf (119 lines of code) (raw):
resource "azurerm_application_gateway" "appGateway" {
name = var.appGatewayName
resource_group_name = var.resourceGroupName
location = var.location
identity {
type = "UserAssigned"
identity_ids = [var.appGatewayUserAssignedIdentityId]
}
sku {
name = var.skuName
tier = var.skuTier
capacity = var.capacity
}
dynamic "gateway_ip_configuration" {
for_each = var.gatewayIPConfigurations
content {
name = gateway_ip_configuration.value.name
subnet_id = gateway_ip_configuration.value.subnet_id
}
}
dynamic "backend_address_pool" {
for_each = var.backendAddressPools
content {
name = backend_address_pool.value.name
fqdns = backend_address_pool.value.fqdns
}
}
dynamic "ssl_certificate" {
for_each = var.sslCertificates
content {
name = ssl_certificate.value.name
key_vault_secret_id = ssl_certificate.value.key_vault_secret_id
}
}
dynamic "frontend_ip_configuration" {
for_each = var.frontendIPConfigurations
content {
name = frontend_ip_configuration.value.name
private_ip_address_allocation = frontend_ip_configuration.value.private_ip_address_allocation
public_ip_address_id = frontend_ip_configuration.value.public_ip_address_id
}
}
dynamic "frontend_port" {
for_each = var.frontendPorts
content {
name = frontend_port.value.name
port = frontend_port.value.port
}
}
dynamic "backend_http_settings" {
for_each = var.backendHttpSettings
content {
name = backend_http_settings.value.name
port = backend_http_settings.value.port
protocol = backend_http_settings.value.protocol
cookie_based_affinity = backend_http_settings.value.cookie_based_affinity
pick_host_name_from_backend_address = backend_http_settings.value.pick_host_name_from_backend_address
request_timeout = backend_http_settings.value.request_timeout
probe_name = backend_http_settings.value.probe_name
}
}
dynamic "http_listener" {
for_each = var.httpListeners
content {
name = http_listener.value.name
frontend_ip_configuration_name = http_listener.value.frontend_ip_configuration_name
frontend_port_name = http_listener.value.frontend_port_name
protocol = http_listener.value.protocol
ssl_certificate_name = http_listener.value.ssl_certificate_name
require_sni = http_listener.value.require_sni
}
}
dynamic "request_routing_rule" {
for_each = var.requestRoutingRules
content {
name = request_routing_rule.value.name
rule_type = request_routing_rule.value.rule_type
http_listener_name = request_routing_rule.value.http_listener_name
backend_address_pool_name = request_routing_rule.value.backend_address_pool_name
backend_http_settings_name = request_routing_rule.value.backend_http_settings_name
priority = request_routing_rule.value.priority
}
}
dynamic "probe" {
for_each = var.probes
content {
name = probe.value.name
protocol = probe.value.protocol
host = probe.value.host
path = probe.value.path
interval = probe.value.interval
timeout = probe.value.timeout
unhealthy_threshold = probe.value.unhealthy_threshold
pick_host_name_from_backend_http_settings = probe.value.pick_host_name_from_backend_http_settings
minimum_servers = probe.value.minimum_servers
match {
status_code = [probe.value.match.status_code]
}
}
}
waf_configuration {
enabled = true
firewall_mode = "Detection"
rule_set_type = "OWASP"
rule_set_version = "3.0"
request_body_check = true
max_request_body_size_kb = 128
file_upload_limit_mb = 100
}
enable_http2 = true
dynamic "autoscale_configuration" {
for_each = var.autoScaleSettings
content {
min_capacity = var.autoscaleMinCapacity == -1 ? null : var.autoscaleMinCapacity
max_capacity = var.autoscaleMaxCapacity == -1 ? null : var.autoscaleMaxCapacity
}
}
zones = var.makeZoneRedundant == true ? var.zones : []
}