使用 REST API 为 Azure PostgreSQL 数据库创建 Azure 数据保护备份策略

备份策略控制备份的保留和计划。 Azure PostgreSQL 数据库备份提供长期保留并支持每天备份。

可以重复使用现有备份策略来为 PostgreSQL 数据库配置到保管库的备份,或使用 REST API 为 Azure 恢复服务保管库创建备份策略

了解 PostgreSQL 备份策略

尽管磁盘备份每天提供多个备份,而 blob 备份是无触发器的连续备份,但 PostgreSQL 备份提供存档保护。 第一次发送到保管库的备份数据可以按照定义的规则或生命周期移动到存档层。 在此上下文中,让我们了解 PostgreSQL 的备份策略对象。

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType(在本例中为完整数据库备份)
        • 初始数据存储(备份初始登陆位置)
        • 触发器(如何触发备份)
          • 基于计划
          • 默认标记条件(一个默认“标记”用于所有计划的备份。此标记将备份链接到保留期规则)
    • 默认保留规则(该规则默认应用于初始数据存储上的所有备份)

因此,此对象定义触发哪些类型的备份、如何触发备份(通过计划)、它们的标签是什么、它们在何处登陆(数据存储),以及数据存储中备份数据的生命周期。 PostgreSQL 的默认 PowerShell 对象指示每周触发一次完整备份,它们将访问保管库(它们将在其中存储三个月)。

如果要将存档层添加到策略,必须决定数据何时从保管库移动到存档、数据在存档中保留多久,以及哪些计划备份应标记为可存档 。 因此,必须添加保留规则,其中备份数据的生命周期定义为从保管库数据存储到存档数据存储,以及备份数据在存档数据存储中的保留时间 。 然后,需要添加一个“标记”,用于将计划备份标记为“符合存档条件”。 生成的 PowerShell 对象如下所示:

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType(在本例中为完整数据库备份)
        • 初始数据存储(备份初始登陆位置)
        • 触发器(如何触发备份)
          • 基于计划
          • 默认标记条件(一个默认“标记”用于所有计划的备份。此标记将备份链接到保留期规则)
          • 同名“X”的新保留规则的新标记条件
    • 默认保留规则(该规则默认应用于初始数据存储上的所有备份)
    • 名为“X”的新保留规则
      • 生命周期
        • 源数据存储
        • 一段时间后在源数据存储中删除
        • 复制到目标数据存储

若要创建用于备份 PostgreSQL 数据库的策略,请执行以下操作:

创建策略

重要

目前不支持更新或修改现有策略。 替代方法是使用所需的详细信息创建新策略,并将其分配给相关的备份实例。

若要创建 Azure 备份策略,请使用以下 PUT 操作:

PUT https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupPolicies/{policyName}?api-version=2021-01-01

{policyName}{vaultName} 在 URI 中提供。 其他信息在请求正文中提供。

创建请求正文

例如,若要为 POstgreSQL 备份创建策略,请求正文中需包含以下组件:

名称 必需 类型 说明
properties True BaseBackupPolicy:BackupPolicy BaseBackupPolicyResource 属性

有关请求正文中的完整定义列表,请参阅备份策略 REST API 文档

示例请求正文

该策略指出:

  • 每周备份的计划触发器并选择启动时间。 (时间 + P1W)。
  • 数据存储是保管库存储,因为备份直接传输到保管库。
  • 备份在保管库中保留三个月 (P3M)。
{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }
  ]
}

重要

时间格式仅支持“日期/时间”;仅不支持“时间” 。 每日备份的时间表示备份开始时间,而不是备份完成时间。

让我们通过两项更改来更新上述 JSON - 在一周中的多天进行备份,和添加存档数据存储以长期保留 PostgreSQL 数据库备份。

以下示例将每周备份修改为每周的星期日、星期三和星期五进行备份。 计划日期数组提及日期,这些日期的星期几将视为一周中的几天。 还需要指定这些计划应每周重复一次。 因此,计划间隔为“1”,间隔类型为“每周” 。

定时触发:

"trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T22:00:00+00:00/P1W",
            "R/2021-08-18T22:00:00+00:00/P1W",
            "R/2021-08-20T22:00:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        }

如果要添加存档保护,则需要修改策略 JSON,如下所:

上述 JSON 在默认保留规则下具有初始数据存储的生命周期。 在此方案中,规则指出在三个月后删除备份数据。 应添加一个新的保留规则,用于定义何时将数据移动到存档数据存储,即备份数据首先复制到存档数据存储,然后在保管库数据存储中删除 。 此外,该规则应定义将数据保留在存档* 数据存储中的持续时间。 让我们将此新规则命名为“每月”,它定义备份应在保管库数据存储中保留 6 个月,然后复制到存档数据存储中。 然后在保管库数据存储中删除将数据在存档数据存储中保留 24 个月的设置,然后删除存档数据存储中的数据。

保留生命周期:

"lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    },
    {
      "isDefault": false,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P6M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": {
            "copyAfter": {
              "objectType": "CopyOnExpiryOption"
            },
            "dataStore": {
              "dataStoreType": "ArchiveStore",
              "objectType": "DataStoreInfoBase"
            }
          }
        },
        {
          "deleteAfter": {
            "duration": "P24M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "ArchiveStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": null
        }
      ],
      "name": "Monthly",
      "objectType": "AzureRetentionRule"
    }

每次添加保留规则时,都需要在策略的“触发器”属性中添加相应的标记。 以下示例创建一个新标记以及条件(这是当月的第一个成功备份),其名称与要应用的相应保留规则的名称完全相同。

本例中的标记条件应命名为“每月”。

标记条件:

{
  "criteria": [
    {
      "absoluteCriteria": [
        "FirstOfMonth"
      ],
      "objectType": "ScheduleBasedBackupCriteria"
    }
  ],
  "isDefault": false,
  "tagInfo": {
    "tagName": "Monthly"
  },
  "taggingPriority": 15
}

包含所有更改后,策略 JSON 将如下所示:

{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T22:00:00+00:00/P1W",
            "R/2021-08-18T22:00:00+00:00/P1W",
            "R/2021-08-20T22:00:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          },
          {
            "criteria": [
              {
                "absoluteCriteria": [
                  "FirstOfMonth"
                ],
                "objectType": "ScheduleBasedBackupCriteria"
              }
            ],
            "isDefault": false,
            "tagInfo": {
              "tagName": "Monthly"
            },
            "taggingPriority": 15
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    },
    {
      "isDefault": false,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P6M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": {
            "copyAfter": {
              "objectType": "CopyOnExpiryOption"
            },
            "dataStore": {
              "dataStoreType": "ArchiveStore",
              "objectType": "DataStoreInfoBase"
            }
          }
        },
        {
          "deleteAfter": {
            "duration": "P24M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "ArchiveStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": null
        }
      ],
      "name": "Monthly",
      "objectType": "AzureRetentionRule"
    }
  ]
}

有关策略创建的更多详细信息,请参阅 PostGreSQL 数据库备份策略文档。

响应

备份策略创建/更新是同步操作,操作成功便会返回“OK”。

名称 Type 说明
200 OK BaseBackupPolicyResource 确定

示例响应

操作完成后,它将在响应正文中返回 200 (OK) 和策略内容。

{
    "properties": {
        "policyRules": [
            {
                "backupParameters": {
                    "backupType": "Full",
                    "objectType": "AzureBackupParams"
                },
                "trigger": {
                    "schedule": {
                        "repeatingTimeIntervals": [
                            "R/2021-08-15T22:00:00+00:00/P1W",
                            "R/2021-08-18T22:00:00+00:00/P1W",
                            "R/2021-08-20T22:00:00+00:00/P1W"
                        ],
                        "timeZone": "UTC"
                    },
                    "taggingCriteria": [
                        {
                            "tagInfo": {
                                "tagName": "Monthly",
                                "id": "Monthly_"
                            },
                            "taggingPriority": 15,
                            "isDefault": false,
                            "criteria": [
                                {
                                    "absoluteCriteria": [
                                        "FirstOfMonth"
                                    ],
                                    "objectType": "ScheduleBasedBackupCriteria"
                                }
                            ]
                        },
                        {
                            "tagInfo": {
                                "tagName": "Default",
                                "id": "Default_"
                            },
                            "taggingPriority": 99,
                            "isDefault": true
                        }
                    ],
                    "objectType": "ScheduleBasedTriggerContext"
                },
                "dataStore": {
                    "dataStoreType": "VaultStore",
                    "objectType": "DataStoreInfoBase"
                },
                "name": "BackupWeekly",
                "objectType": "AzureBackupRule"
            },
            {
                "lifecycles": [
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P6M"
                        },
                        "targetDataStoreCopySettings": [
                            {
                                "dataStore": {
                                    "dataStoreType": "ArchiveStore",
                                    "objectType": "DataStoreInfoBase"
                                },
                                "copyAfter": {
                                    "objectType": "CopyOnExpiryOption"
                                }
                            }
                        ],
                        "sourceDataStore": {
                            "dataStoreType": "VaultStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    },
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P24M"
                        },
                        "targetDataStoreCopySettings": [],
                        "sourceDataStore": {
                            "dataStoreType": "ArchiveStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    }
                ],
                "isDefault": false,
                "name": "Monthly",
                "objectType": "AzureRetentionRule"
            },
            {
                "lifecycles": [
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P3M"
                        },
                        "targetDataStoreCopySettings": [],
                        "sourceDataStore": {
                            "dataStoreType": "VaultStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    }
                ],
                "isDefault": true,
                "name": "Default",
                "objectType": "AzureRetentionRule"
            }
        ],
        "datasourceTypes": [
            "Microsoft.DBforPostgreSQL/servers/databases"
        ],
        "objectType": "BackupPolicy"
    },
    "id": "/subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/DebRG1/providers/Microsoft.DataProtection/backupVaults/DebBackupVault/backupPolicies/OssPolicy1",
    "name": "OssPolicy1",
    "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

后续步骤

为 Azure 磁盘启用保护

有关 Azure 备份 REST API 的详细信息,请参阅以下文章: