Azure Backup を使用すると、Azure portal、PowerShell、CLI、Azure Resource Manager、Bicep などの複数のオプションを使用して Azure PostgreSQL - フレキシブル サーバーをバックアップできます。 この記事では、Azure Terraform テンプレートを使用して Azure PostgreSQL - フレキシブル サーバーをバックアップする方法について説明します。 このクイックスタートでは、Terraform テンプレートをデプロイしてバックアップ コンテナーを作成した後、Azure PostgreSQL - フレキシブル サーバーのバックアップを構成するプロセスについて説明します。
開始する前に
アクティブなサブスクリプションを含む Azure アカウントが必要です。 お持ちでない場合は、無料のアカウントを作成してください。
Terraform をインストールおよび構成します。
Azure アカウントにログインし、次のいずれかの方法を使用して認証します。
Terraform は、Azure CLI を使用した Azure への認証のみをサポートしています。 Azure PowerShell を使用した認証はサポートされていません。 そのため、Terraform の作業を行うときには Azure PowerShell モジュールを使用できますが、まず Azure に対する認証を行う必要があります。
Terraform コードを実装する
Note
Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードを参照してください
サンプルの Terraform コードのテストに使用できるディレクトリを作成し、それを現在のディレクトリにします。
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>" }
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
]
}
-
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 を使用する場合の一般的な問題のトラブルシューティング。