I want to use azurerm_postgresql_server module for recovery from backup.
This module has restore_point_in_time
and
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/postgresql_server#creation_source_server_id
It also has several required fields.
The code below is to restore a postgres instance. You can see, it is very similar to creating a brand new instance except using above two fields.
Is there a simpler way to do that, instead of duplicating most of the code?
resource "azurerm_postgresql_server" "pg_server_abc_restore_2023_05_08" {
administrator_login = lookup(local.pg_instances["abc"], "administrator_login", "dba")
administrator_login_password = module.pg_passwords["abc"].secret
auto_grow_enabled = lookup(local.pg_instances["abc"], "auto_grow_enabled", true)
backup_retention_days = lookup(local.pg_instances["abc"], "backup_retention_days", "7")
create_mode = "PointInTimeRestore"
creation_source_server_id = azurerm_postgresql_server.this["abc"].id
geo_redundant_backup_enabled = lookup(local.pg_instances["abc"], "geo_redundant_backup_enabled", substr(local.pg_instances["abc"].sku_name, 0, 2) != "B_") # Basic tier does not support geo redundant backups
location = lookup(local.pg_instances["abc"], "region", var.region)
name = join("-", [lookup(local.pg_instances["abc"], "name", "${local.longname}-pg-abc"), "recovery"])
public_network_access_enabled = true
resource_group_name = lookup(local.pg_instances["abc"], "resource_group_name", azurerm_resource_group.this.name)
restore_point_in_time = "2023-05-01T06:20:00Z"
sku_name = local.pg_instances["abc"].sku_name
ssl_enforcement_enabled = true
ssl_minimal_tls_version_enforced = lookup(local.pg_instances["abc"], "ssl_minimal_tls_version_enforced", "TLS1_2")
storage_mb = local.pg_instances["abc"].storage_mb
version = lookup(local.pg_instances["abc"], "version", "11")
tags = local.tags,
lifecycle {
ignore_changes = [
storage_mb,
]
}
}