Aracılığıyla paylaş


Hızlı Başlangıç: Terraform şablonu kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu için yedeklemeyi yapılandırma

Bu hızlı başlangıçta, Terraform şablonunu kullanarak PostgreSQL için Azure Veritabanı - Esnek Sunucu için yedeklemenin nasıl yapılandırıldığı açıklanmaktadır.

Azure Backup , Azure portal, PowerShell, CLI, Azure Resource Manager, Bicep gibi birden çok istemci kullanarak Azure PostgreSQL - Esnek sunucularınızı yedeklemenize olanak tanır.

Önkoşullar

PostgreSQL için Azure Veritabanı - Esnek Sunucu için yedeklemeyi yapılandırmadan önce aşağıdaki önkoşulların karşılandığından emin olun:

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Hesabınız yoksa ücretsiz bir hesap oluşturun.

  • Terraform’u yükleyin ve yapılandırın.

  • Azure hesabınızda oturum açın ve Azure'da kimlik doğrulaması oluşturun.

    Note

    Terraform yalnızca Azure CLI ile Azure'da kimlik doğrulamayı destekler. Azure PowerShell kullanarak kimlik doğrulaması desteklenmez. Bu nedenle Terraform çalışmanızı yaparken Azure PowerShell modülünü kullanabilirsiniz ancak önce Azure'da kimlik doğrulaması yapmanız gerekir.

Terraform kodunu uygulama

Note

Azure kaynaklarını yönetmek için Terraform'un nasıl kullanılacağını gösteren diğer makalelere ve örnek koda bakın.

  1. Örnek Terraform kodunu test etmek ve geçerli dizininiz yapmak için kullanabileceğiniz bir dizin oluşturun.

  2. adlı providers.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
          version = "3.99.0"
        }
      }
    }
    
    provider "azurerm" {
       features {}
       subscription_id   = "<azure_subscription_id>"
       tenant_id = "<azure_subscription_tenant_id>"
    }
    
  3. adlı main.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    
    # Step 1: Create the Backup Vault
    resource "azurerm_data_protection_backup_vault" "backup_vault" {
      name                = var.backup_vault_name
      resource_group_name = var.backup_vault_resource_group
      location            = var.region
    
      identity {
        type = "SystemAssigned"
      }
    
      storage_settings {
        datastore_type = "VaultStore"
        type           = "LocallyRedundant"
      }
    }
    
    # Step 2: Create Backup Policy for PostgreSQL
    resource "azurerm_data_protection_backup_policy" "postgresql_backup_policy" {
      name                = var.policy_name
      resource_group_name = var.backup_vault_resource_group
      vault_name          = azurerm_data_protection_backup_vault.backup_vault.name
    
      rule {
        name = "BackupSchedule"
    
        backup_parameters {
          object_type = "AzureBackupParams"
        }
    
        trigger {
          schedule {
            recurrence_rule {
              frequency = "Weekly"
              interval  = var.backup_schedule_frequency
            }
          }
        }
    
        data_store {
          datastore_type = "VaultStore"
        }
      }
    
      retention_rule {
        name       = "RetentionRule"
        is_default = true
    
        lifecycle {
          delete_after {
            object_type = "AbsoluteDeleteOption"
            duration    = format("P%dM", var.retention_duration_in_months)
          }
        }
      }
    
      depends_on = [
        azurerm_data_protection_backup_vault.backup_vault
      ]
    }
    
    # Step 3: Role Assignment for PostgreSQL Flexible Server Long Term Retention Backup Role
    data "azurerm_postgresql_flexible_server" "postgresql_server" {
      name                = var.postgresql_server_name
      resource_group_name = var.postgresql_resource_group
    }
    
    resource "azurerm_role_assignment" "backup_role" {
      principal_id         = azurerm_data_protection_backup_vault.backup_vault.identity[0].principal_id
      role_definition_name = "PostgreSQL Flexible Server Long Term Retention Backup Role"
      scope                = data.azurerm_postgresql_flexible_server.PostgreSQL_server.id
    
      depends_on = [
        azurerm_data_protection_backup_policy.postgresql_backup_policy
      ]
    }
    
    # Step 4: Role Assignment for Reader on Resource Group
    data "azurerm_resource_group" "postgresql_resource_group" {
      name = var.postgresql_resource_group
    }
    
    resource "azurerm_role_assignment" "reader_role" {
      principal_id         = azurerm_data_protection_backup_vault.backup_vault.identity[0].principal_id
      role_definition_name = "Reader"
      scope                = data.azurerm_resource_group.postgresql_resource_group.id
    
      depends_on = [
        azurerm_role_assignment.backup_role
      ]
    }
    
    # Step 5: Create Backup Instance for PostgreSQL
    resource "azurerm_data_protection_backup_instance" "postgresql_backup_instance" {
      name                = "PostgreSQLBackupInstance"
      resource_group_name = var.backup_vault_resource_group
      vault_name          = azurerm_data_protection_backup_vault.backup_vault.name
      location            = var.region
    
      datasource {
        object_type     = "Datasource"
        datasource_type = "AzureDatabaseForPostgreSQLFlexibleServer"
        resource_id     = data.azurerm_PostgreSQL_flexible_server.postgresql_server.id
      }
    
      policy_id = azurerm_data_protection_backup_policy.postgresql_backup_policy.id
    
      depends_on = [
        azurerm_role_assignment.reader_role
      ]
    }
    
    
  4. adlı variables.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:


variable "backup_vault_name" {
      type        = string
      default     = "BackupVaultTF"
      description = "Name of the Backup Vault"
}
variable "backup_vault_resource_group" {
      type        = string
      default     = "Contoso_TF_RG"
      description = "Name of the resource group to which backup vault belongs to"
}

variable "postgresql_server_name" {
      type        = string
      default     = "Contoso_PostgreSQL_TF"
      description = "Name of the PostgreSQL server"
}

variable "postgresql_resource_group" {
      type        = string
      default     = "Contoso_TF_RG"
      description = "Name of the resource group to which PostgreSQL server belongs to"
}

variable "region" {
      type        = string
      default     = "eastus"
      description = "Location of the PostgreSQL server"
}

variable "policy_name" {
      type        = string
      default     = "PostgreSQLbackuppolicytfv1"
      description = "Name of the backup policy"
}

variable "backup_schedule_frequency" {
      type        = string
      default     = "1"
      description = "Schedule frequency for backup"
}
variable "retention_duration_in_months" {
      type        = string
      default     = "3"
      description = "Retention duration for backup in month"
}

Terraform'u başlatma

Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.

terraform init -upgrade

Önemli noktalar:

  • -upgrade parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.

Terraform yürütme planı oluşturun

Terraform planını çalıştırarak yürütme planı oluşturun.

terraform plan -out main.tfplan

Önemli noktalar:

  • Komut terraform plan bir yürütme planı oluşturur, ancak onu yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.
  • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin -out kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.

Bir Terraform yürütme planı uygulayın

Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.

terraform apply main.tfplan

Önemli noktalar:

  • Örnek terraform apply komutu, daha önce terraform plan -out main.tfplan komutunu çalıştırdığınızı varsayar.
  • parametresi için -out farklı bir dosya adı belirttiyseniz, çağrısında terraform applyaynı dosya adını kullanın.
  • parametresini -out kullanmadıysanız, parametresiz olarak çağırın terraform apply .

Azure'da Terraform sorunlarını giderme

Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme.

Sonraki adımlar

PostgreSQL için Azure Veritabanı - Azure CLI kullanarak esnek sunucuyu geri yükleyin.