scenarios/aca-internal/terraform/modules/06-application-gateway/main.tf (178 lines of code) (raw):
resource "random_string" "random" {
length = 5
special = false
lower = true
}
module "naming" {
source = "../../../../shared/terraform/modules/naming"
uniqueId = random_string.random.result
environment = var.environment
workloadName = var.workloadName
location = var.location
}
resource "azurerm_user_assigned_identity" "appGatewayUserIdentity" {
name = module.naming.resourceNames["applicationGatewayUserAssignedIdentity"]
location = var.location
resource_group_name = var.resourceGroupName # module.naming.resourceNames["rgSpokeName"]
tags = var.tags
}
resource "azurerm_public_ip" "appGatewayPip" {
name = module.naming.resourceNames["applicationGatewayPip"]
location = var.location
resource_group_name = var.resourceGroupName
sku = "Standard"
sku_tier = "Regional"
zones = var.makeZoneRedundant == true ? [
"1",
"2",
"3"
] : []
allocation_method = "Static"
ddos_protection_mode = var.ddosProtectionEnabled
tags = var.tags
}
module "appGatewayAddCertificates" {
source = "../../../../shared/terraform/modules/application-gateway/certificate-config"
keyVaultName = var.keyVaultName
resourceGroupName = var.resourceGroupName
appGatewayCertificateKeyName = var.appGatewayCertificateKeyName
appGatewayCertificateData = local.appGatewayCertificate
appGatewayUserAssignedIdentityPrincipalId = azurerm_user_assigned_identity.appGatewayUserIdentity.principal_id
}
module "appGatewayConfiguration" {
source = "../../../../shared/terraform/modules/application-gateway/"
appGatewayName = module.naming.resourceNames["applicationGateway"]
resourceGroupName = var.resourceGroupName
location = var.location
diagnosticSettingName = "agw-diagnostics"
skuName = "WAF_v2"
skuTier = "WAF_v2"
gatewayIPConfigurations = [
{
name = "appGatewayIpConfig"
subnet_id = var.appGatewaySubnetId
}]
backendAddressPools = [
{
name = "acaServiceBackend"
fqdns = [var.appGatewayPrimaryBackendEndFQDN]
}
]
sslCertificates = [
{
name = var.appGatewayFQDN
key_vault_secret_id = module.appGatewayAddCertificates.SecretUri
}
]
frontendIPConfigurations = [
{
name = "appGwPublicFrontendIp"
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.appGatewayPip.id
}
]
frontendPorts = var.enableAppGatewayCertificate ? [
{
name = "port_443"
port = 443
},
{
name = "port_80"
port = 80
}
] : [
{
name = "port_80"
port = 80
}
]
backendHttpSettings = [
{
name = "https"
cookie_based_affinity = "Disabled"
port = 443
protocol = "Https"
request_timeout = 20
pick_host_name_from_backend_address = true
probe_name = "webProbe"
}
]
httpListeners = !var.enableAppGatewayCertificate ? [
{
name = "httpListener"
frontend_ip_configuration_name = "appGwPublicFrontendIp"
frontend_port_name = "port_80"
protocol = "Http"
require_sni = false
}
] : [
{
name = "httpListener"
frontend_ip_configuration_name = "appGwPublicFrontendIp"
frontend_port_name = "port_443"
protocol = "Https"
ssl_certificate_name = var.appGatewayFQDN
require_sni = false
}
]
requestRoutingRules = [
{
name = "routingRules"
rule_type = "Basic"
priority = 100
http_listener_name = "httpListener"
backend_address_pool_name = "acaServiceBackend"
backend_http_settings_name = "https"
}
]
probes = [
{
name = "webProbe"
protocol = "Https"
host = var.appGatewayPrimaryBackendEndFQDN
path = "/" # verify this
interval = 30
timeout = 30
unhealthy_threshold = 3
pick_host_name_from_backend_http_settings = false
minimum_servers = 0
match = {
status_code = "200-499"
}
}
]
zones = var.makeZoneRedundant == true ? [
"1",
"2",
"3"
] : []
firewallConfiguration = {
enabled = true
mode = "Prevention"
rule_set_type = "OWASP"
rule_set_version = "3.0"
request_body_check = true
max_request_body_size_in_kb = 128
file_upload_limit_mb = 100
}
sslPolicyName = "AppGwSslPolicy20220101"
sslPolicyType = "Predefined"
appGatewayFQDN = var.appGatewayFQDN
appGatewayPrimaryBackendEndFQDN = var.appGatewayPrimaryBackendEndFQDN
appGatewayPublicIpName = module.naming.resourceNames["applicationGatewayPip"]
appGatewaySubnetId = var.appGatewaySubnetId
appGatewayUserAssignedIdentityId = azurerm_user_assigned_identity.appGatewayUserIdentity.id
keyVaultSecretId = module.appGatewayAddCertificates.SecretUri
appGatewayLogAnalyticsId = var.appGatewayLogAnalyticsId
tags = var.tags
}
module "diagnostics" {
source = "../../../../shared/terraform/modules/diagnostics"
logAnalyticsWorkspaceId = var.logAnalyticsWorkspaceId
resources = [
{
type = "agw"
id = module.appGatewayConfiguration.applicationGatewayId
}
]
}