modules/database/main.tf (126 lines of code) (raw):
resource "azurerm_mssql_database" "this" {
name = var.name
server_id = var.sql_server.resource_id
auto_pause_delay_in_minutes = var.auto_pause_delay_in_minutes
collation = var.collation
create_mode = var.import == null ? var.create_mode : null
elastic_pool_id = var.elastic_pool_id
geo_backup_enabled = var.geo_backup_enabled
ledger_enabled = var.ledger_enabled
license_type = var.license_type
maintenance_configuration_name = var.maintenance_configuration_name
max_size_gb = var.max_size_gb
min_capacity = var.min_capacity
read_replica_count = var.read_replica_count
read_scale = var.read_scale
recover_database_id = var.recover_database_id
restore_dropped_database_id = var.restore_dropped_database_id
restore_point_in_time = var.restore_point_in_time
sample_name = var.sample_name
sku_name = var.sku_name
storage_account_type = var.storage_account_type
tags = var.tags
transparent_data_encryption_enabled = var.transparent_data_encryption_enabled
transparent_data_encryption_key_automatic_rotation_enabled = var.transparent_data_encryption_key_automatic_rotation_enabled
transparent_data_encryption_key_vault_key_id = var.transparent_data_encryption_key_vault_key_id
zone_redundant = var.zone_redundant
dynamic "identity" {
for_each = local.managed_identities.user_assigned
content {
identity_ids = identity.value.user_assigned_resource_ids
type = identity.value.type
}
}
dynamic "import" {
for_each = var.import != null ? { this = var.import } : {}
content {
administrator_login = var.import.administrator_login
administrator_login_password = var.import.administrator_login_password
authentication_type = var.import.authentication_type
storage_key = var.import.storage_key
storage_key_type = var.import.storage_key_type
storage_uri = var.import.storage_uri
storage_account_id = var.import.storage_account_id
}
}
dynamic "long_term_retention_policy" {
for_each = var.long_term_retention_policy != null ? { this = var.long_term_retention_policy } : {}
content {
monthly_retention = var.long_term_retention_policy.monthly_retention
week_of_year = var.long_term_retention_policy.week_of_year
weekly_retention = var.long_term_retention_policy.weekly_retention
yearly_retention = var.long_term_retention_policy.yearly_retention
}
}
dynamic "short_term_retention_policy" {
for_each = var.short_term_retention_policy != null ? { this = var.long_term_retention_policy } : {}
content {
retention_days = var.short_term_retention_policy.retention_days
backup_interval_in_hours = var.short_term_retention_policy.backup_interval_in_hours
}
}
dynamic "threat_detection_policy" {
for_each = var.threat_detection_policy != null ? { this = var.threat_detection_policy } : {}
content {
disabled_alerts = var.threat_detection_policy.disabled_alerts
email_account_admins = var.threat_detection_policy.email_account_admins
email_addresses = var.threat_detection_policy.email_addresses
retention_days = var.threat_detection_policy.retention_days
state = var.threat_detection_policy.state
storage_account_access_key = var.threat_detection_policy.storage_account_access_key
storage_endpoint = var.threat_detection_policy.storage_endpoint
}
}
lifecycle {
precondition {
condition = var.elastic_pool_id == null || (var.elastic_pool_id != null && var.maintenance_configuration_name == null)
error_message = "When creating a database resource with an elastic_pool_id, the maintenance_configuration_name is not supported at the database scope. Set this on the elastic pool instead."
}
}
}
# required AVM resources interfaces
resource "azurerm_management_lock" "this" {
count = var.lock != null ? 1 : 0
lock_level = var.lock.kind
name = coalesce(var.lock.name, "lock-${var.name}")
scope = azurerm_mssql_database.this.id
}
resource "azurerm_role_assignment" "this" {
for_each = var.role_assignments
principal_id = each.value.principal_id
scope = azurerm_mssql_database.this.id
condition = each.value.condition
condition_version = each.value.condition_version
delegated_managed_identity_resource_id = each.value.delegated_managed_identity_resource_id
role_definition_id = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? each.value.role_definition_id_or_name : null
role_definition_name = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? null : each.value.role_definition_id_or_name
skip_service_principal_aad_check = each.value.skip_service_principal_aad_check
}
resource "azurerm_monitor_diagnostic_setting" "this" {
for_each = var.diagnostic_settings
name = each.value.name != null ? each.value.name : "diag-${var.name}"
target_resource_id = azurerm_mssql_database.this.id
eventhub_authorization_rule_id = each.value.event_hub_authorization_rule_resource_id
eventhub_name = each.value.event_hub_name
log_analytics_destination_type = each.value.log_analytics_destination_type
log_analytics_workspace_id = each.value.workspace_resource_id
partner_solution_id = each.value.marketplace_partner_resource_id
storage_account_id = each.value.storage_account_resource_id
dynamic "enabled_log" {
for_each = each.value.log_categories
content {
category = enabled_log.value
}
}
dynamic "enabled_log" {
for_each = each.value.log_groups
content {
category_group = enabled_log.value
}
}
dynamic "metric" {
for_each = each.value.metric_categories
content {
category = metric.value
}
}
}