modules/postgresql/main.tf (82 lines of code) (raw):
resource "random_password" "password" {
length = 16
special = true
override_special = "_%@"
}
resource "azurerm_postgresql_server" "server" {
name = var.postgresql_name
resource_group_name = var.resource_group_name
location = var.location
sku_name = "GP_Gen5_4"
storage_mb = 5120
backup_retention_days = 7
geo_redundant_backup_enabled = false
auto_grow_enabled = true
administrator_login = "azureadmin"
administrator_login_password = random_password.password.result
version = "11"
ssl_enforcement_enabled = true
ssl_minimal_tls_version_enforced = "TLSEnforcementDisabled"
threat_detection_policy {
disabled_alerts = []
email_account_admins = false
email_addresses = []
enabled = true
retention_days = 0
}
}
resource "azurerm_postgresql_active_directory_administrator" "admin" {
server_name = azurerm_postgresql_server.server.name
resource_group_name = var.resource_group_name
login = var.current_user_principal_name
tenant_id = var.tenant_id
object_id = var.current_user_object_id
}
resource "azurerm_postgresql_database" "db" {
name = "exampledb"
resource_group_name = var.resource_group_name
server_name = azurerm_postgresql_server.server.name
charset = "UTF8"
collation = "English_United States.1252"
}
resource "azurerm_postgresql_firewall_rule" "terraform_host" {
name = "terraform-host"
resource_group_name = var.resource_group_name
server_name = azurerm_postgresql_server.server.name
start_ip_address = var.public_ip
end_ip_address = var.public_ip
}
# Create the Private endpoint. This is where the SQL account gets a private IP inside the VNet
resource "azurerm_private_endpoint" "endpoint" {
name = "postgresql-endpoint"
location = var.location
resource_group_name = var.resource_group_name
tags = var.tags
subnet_id = var.private_endpoints_subnet_id
private_service_connection {
name = "postgresql-privateserviceconnection"
private_connection_resource_id = azurerm_postgresql_server.server.id
is_manual_connection = false
subresource_names = ["postgresqlServer"]
}
private_dns_zone_group {
name = "privatelink-postgresql"
private_dns_zone_ids = [azurerm_private_dns_zone.postgresql.id]
}
}
# Private DNS Zone
resource "azurerm_private_dns_zone" "postgresql" {
name = "privatelink.postgres.database.azure.com"
resource_group_name = var.resource_group_name
tags = var.tags
}
# Link the Private Zone with the VNet
resource "azurerm_private_dns_zone_virtual_network_link" "postgresql" {
name = "postgresql"
resource_group_name = var.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.postgresql.name
virtual_network_id = var.hub_vnet_id
}
# Link the Private Zone with the VNet
resource "azurerm_private_dns_zone_virtual_network_link" "postgresql_flexible_server" {
name = "postgresql_flexible_server"
resource_group_name = var.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.postgresql.name
virtual_network_id = var.spoke_vnet_id
}