次の方法で共有


Terraform テンプレートを使用して Azure PostgreSQL - フレキシブル サーバーをバックアップする (プレビュー)

Azure Backup を使用すると、Azure portal、PowerShell、CLI、Azure Resource Manager、Bicep などの複数のオプションを使用して Azure PostgreSQL - フレキシブル サーバーをバックアップできます。 この記事では、Azure Terraform テンプレートを使用して Azure PostgreSQL - フレキシブル サーバーをバックアップする方法について説明します。 このクイックスタートでは、Terraform テンプレートをデプロイしてバックアップ コンテナーを作成した後、Azure PostgreSQL - フレキシブル サーバーのバックアップを構成するプロセスについて説明します。

開始する前に

Terraform は、Azure CLI を使用した Azure への認証のみをサポートしています。 Azure PowerShell を使用した認証はサポートされていません。 そのため、Terraform の作業を行うときには Azure PowerShell モジュールを使用できますが、まず Azure に対する認証を行う必要があります。

Terraform コードを実装する

  1. サンプルの Terraform コードのテストに使用できるディレクトリを作成し、それを現在のディレクトリにします。

  2. providers.tf という名前のファイルを作成し、次のコードを挿入します。

    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. main.tf という名前のファイルを作成し、次のコードを挿入します。


# 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
  ]
}

  1. variables.tf という名前のファイルを作成し、次のコードを挿入します。

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 を初期化する

terraform init を実行して、Terraform のデプロイを初期化します。 このコマンドによって、Azure リソースを管理するために必要な Azure プロバイダーがダウンロードされます。

terraform init -upgrade

重要なポイント:

  • -upgrade パラメーターは、必要なプロバイダー プラグインを、構成のバージョン制約に準拠する最新バージョンにアップグレードします。

Terraform 実行プランを作成する

terraform plan を実行して、実行プランを作成します。

terraform plan -out main.tfplan

重要なポイント:

  • terraform plan コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。
  • 省略可能な -out パラメーターを使用すると、プランの出力ファイルを指定できます。 -out パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。

Terraform 実行プランを適用する

terraform apply を実行して、クラウド インフラストラクチャに実行プランを適用します。

terraform apply main.tfplan

重要なポイント:

  • terraform apply コマンドの例は、以前に terraform plan -out main.tfplan が実行されたことを前提としています。
  • -out パラメーターに別のファイル名を指定した場合は、terraform apply の呼び出しで同じファイル名を使用します。
  • -out パラメーターを使用しなかった場合は、パラメーターを指定せずに terraform apply を呼び出します。

Azure での Terraform のトラブルシューティング

Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング

次のステップ