簡體   English   中英

如何從 terraform 中 Azure 管理的 PostgreSQL 的現有備份文件恢復數據庫?

[英]How to restore DB from existing backup file for Azure managed PostgreSQL in terraform?

我正在使用 terraform 在 azure PG 靈活服務器數據庫中自動部署。 但是,在托管 PostgreSQL 的情況下,沒有從備份文件創建數據庫的選項。

resource "azurerm_postgresql_flexible_server_database" "db" {
  depends_on  = [azurerm_sql_firewall_rule.allowAzureServices]
  name        = var.db_name
  server_id   = azurerm_postgresql_flexible_server.postgreSQL.id
  collation   = "en_US.UTF8"
  charset     = "UTF8"

}

對於 azure terraform 中的 SQL DB 有如下所述的支持:azure sql db 有https://www.terraform.io/docs/providers/azurerm/r/sql_database.html with "create_mode" = "restore"

但我沒有找到 PostgreSql 的任何選項https://registry.terraform.io/providers/hashicorp/azurerm/3.37.0/docs/resources/postgresql_flexible_server_database

如何通過使用 terraform 恢復備份文件來實現數據庫的創建?

以下是PostgreSQL 靈活服務器的備份和恢復實現,這里是代碼示例。

最初我們需要為 PostgreSQL 靈活服務器創建備份恢復,它與普通 PostgreSQL 服務器有些不同。

主要tf文件如下

resource "azurerm_resource_group" "default" {
  name     = "*********"
  location = "West Europe"
}

resource "azurerm_virtual_network" "default" {
  name                = "demo-vnet"
  location            = azurerm_resource_group.default.location
  resource_group_name = azurerm_resource_group.default.name
  address_space       = ["10.0.0.0/16"]
}

resource "azurerm_network_security_group" "default" {
  name                = "demo-nsg"
  location            = azurerm_resource_group.default.location
  resource_group_name = azurerm_resource_group.default.name

  security_rule {
    name                       = "test123"
    priority                   = 100
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "*"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
  }
}

resource "azurerm_subnet" "default" {
  name                 = "demo-subnets"
  virtual_network_name = azurerm_virtual_network.default.name
  resource_group_name  = azurerm_resource_group.default.name
  address_prefixes     = ["10.0.2.0/24"]
  service_endpoints    = ["Microsoft.Storage"]

  delegation {
    name = "fs"

    service_delegation {
      name = "Microsoft.DBforPostgreSQL/flexibleServers"

      actions = [
        "Microsoft.Network/virtualNetworks/subnets/join/action",
      ]
    }
  }
}

resource "azurerm_subnet_network_security_group_association" "default" {
  subnet_id                 = azurerm_subnet.default.id
  network_security_group_id = azurerm_network_security_group.default.id
}

resource "azurerm_private_dns_zone" "default" {
  name                = "demo-pdz.postgres.database.azure.com"
  resource_group_name = azurerm_resource_group.default.name

  depends_on = [azurerm_subnet_network_security_group_association.default]
}

resource "azurerm_private_dns_zone_virtual_network_link" "default" {
  name                  = "demo-pdzvnetlink.com"
  private_dns_zone_name = azurerm_private_dns_zone.default.name
  virtual_network_id    = azurerm_virtual_network.default.id
  resource_group_name   = azurerm_resource_group.default.name
}

resource "azurerm_postgresql_flexible_server" "default" {
  name                   = "demonew-server"
  resource_group_name    = azurerm_resource_group.default.name
  location               = azurerm_resource_group.default.location
  version                = "13"
  delegated_subnet_id    = azurerm_subnet.default.id
  private_dns_zone_id    = azurerm_private_dns_zone.default.id
  administrator_login    = "adminTerraform"
  administrator_password = "********"
  zone                   = "1"
  storage_mb             = 32768
  sku_name               = "GP_Standard_D2s_v3"
  backup_retention_days  = 7

  depends_on = [azurerm_private_dns_zone_virtual_network_link.default]
}

resource "azurerm_postgresql_flexible_server_database" "default" {
  name      = "demo-db"
  server_id = azurerm_postgresql_flexible_server.default.id
  collation = "en_US.UTF8"
  charset   = "UTF8"
}

提供者文件如下:

terraform {
  
      required_version = "~>1.3.3"
      required_providers {
        azurerm = {
           source = "hashicorp/azurerm"
           version = ">=3.5.0"
             }
           }
 }

 provider "azurerm" {
    features {}
    skip_provider_registration = true
}

根據計划並在這里申請是輸出

在此處輸入圖像描述

從門戶驗證:

在此處輸入圖像描述

數據庫驗證在此處輸入圖像描述

備份和恢復配置

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM