Partager via


Créer des stratégies de sauvegarde pour les bases de données PostgreSQL à l’aide de l’API REST protection des données

Une stratégie de sauvegarde régit la rétention et la planification de vos sauvegardes de base de données PostgreSQL dans Azure Database pour PostgreSQL. Azure Database pour PostgreSQL offre une conservation à long terme des sauvegardes de base de données et prend en charge une sauvegarde par jour.

Vous pouvez réutiliser une stratégie de sauvegarde existante pour configurer des sauvegardes pour les bases de données PostgreSQL dans un coffre, ou vous pouvez créer une stratégie de sauvegarde pour un coffre Azure Recovery Services à l’aide de l’API REST Data Protection pour Sauvegarde Azure. Dans cet article, vous allez créer une stratégie de sauvegarde.

Comprendre les stratégies de sauvegarde PostgreSQL

Alors que la sauvegarde de disque offre plusieurs sauvegardes par jour et que la sauvegarde d’objets blob est une sauvegarde continue sans déclencheur, la sauvegarde PostgreSQL offre une protection d’archive. Les données de sauvegarde qui sont d’abord envoyées au coffre peuvent être déplacées vers le niveau archive conformément à une règle définie ou à un cycle de vie.

Dans ce contexte, la hiérarchie suivante peut vous aider à comprendre l’objet de stratégie de sauvegarde pour PostgreSQL :

  • Règle de stratégie
    • Règle de sauvegarde
      • Paramètre de sauvegarde
        • Type de sauvegarde (sauvegarde complète de la base de données dans ce cas)
        • Magasin de données initial (où les sauvegardes atterrissent initialement)
        • Déclencheur (mode de déclenchement de la sauvegarde)
          • Calendrier
          • Critères d’étiquetage par défaut (balise par défaut qui lie toutes les sauvegardes planifiées à la règle de rétention)
    • Règle de rétention par défaut (règle appliquée à toutes les sauvegardes, par défaut, sur le magasin de données initial)

L’objet de stratégie définit quels types de sauvegardes sont déclenchés, comment ils sont déclenchés (via une planification), ce qu’ils sont marqués avec, où ils atterrissent (magasin de données) et le cycle de vie de leurs données dans un magasin de données.

L’objet PowerShell par défaut pour PostgreSQL indique de déclencher une sauvegarde complète chaque semaine. Les sauvegardes atteignent le coffre, où elles sont stockées pendant trois mois.

Si vous souhaitez ajouter le niveau archive à la stratégie, vous devez décider quand les données seront déplacées du coffre vers l’archive, de la durée pendant laquelle les données resteront dans l’archive et quelles sauvegardes planifiées doivent être étiquetées comme archivage. Vous devez ajouter une règle de rétention qui définit le cycle de vie des données de sauvegarde du magasin de données du coffre à la banque de données d’archive. La règle de rétention définit également la durée pendant laquelle les données de sauvegarde restent dans le magasin de données d’archivage. Ensuite, vous devez ajouter une balise qui marque les sauvegardes planifiées comme pouvant être archivées.

L’objet PowerShell qui en résulte est le suivant :

  • Règle de stratégie
    • Règle de sauvegarde
      • Paramètre de sauvegarde
        • Type de sauvegarde (sauvegarde complète de la base de données dans ce cas)
        • Magasin de données initial (où les sauvegardes atterrissent initialement)
        • Déclencheur (mode de déclenchement de la sauvegarde)
          • Calendrier
          • Critères d’étiquetage par défaut (balise par défaut qui lie toutes les sauvegardes planifiées à la règle de rétention)
          • Nouveaux critères d’étiquetage pour la nouvelle règle de rétention portant le même nom
    • Règle de rétention par défaut (règle appliquée à toutes les sauvegardes, par défaut, sur le magasin de données initial)
    • Nouvelle règle de rétention
      • Cycle de vie
        • Magasin de données source
        • Période de suppression dans le magasin de données source
        • Copier dans le magasin de données cible

Créer une stratégie

Important

Actuellement, ni la mise à jour ni la modification d’une stratégie existante n’est prise en charge. Au lieu de cela, créez une stratégie avec les détails requis et affectez-la à l’instance de sauvegarde appropriée.

Pour créer une stratégie de sauvegarde, utilisez l’opération suivante PUT :

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

L’URI fournit les valeurs et {vaultName} les {policyName} valeurs. Le corps de la demande fournit des informations supplémentaires.

Créer le corps de la demande

Pour créer une stratégie pour la sauvegarde PostgreSQL, le corps de la requête a besoin des composants suivants :

Nom Requise Type Description
properties true BaseBackupPolicy: BackupPolicy propriétés BaseBackupPolicyResource

Pour obtenir la liste complète des définitions dans le corps de la requête, consultez les stratégies de sauvegarde de l’API REST.

Exemple de corps de demande

La stratégie indique ce qui suit :

  • Le déclencheur est planifié pour une sauvegarde hebdomadaire à l’heure de début choisie (heure + P1W).
  • Le magasin de données est un magasin de coffres, car les sauvegardes sont directement transférées vers le coffre.
  • Les sauvegardes sont conservées dans le coffre pendant trois mois (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"
    }
  ]
}

Important

Les formats de temps prennent en charge uniquement DateTime. La fonction Time n'est pas prise en charge. L’heure du jour indique l’heure de début de la sauvegarde, et non l’heure de fin.

Nous allons mettre à jour le JSON précédent avec deux modifications :

  • Ajoutez des sauvegardes plusieurs jours de la semaine.
  • Ajoutez un magasin de données d’archivage pour la rétention à long terme des sauvegardes de base de données PostgreSQL.

L’exemple suivant modifie la sauvegarde hebdomadaire en dimanche, mercredi et vendredi de chaque semaine. Le tableau de dates de planification mentionne les dates et les jours de la semaine pour ces dates sont pris en tant que jours de la semaine. Vous devez également spécifier que ces planifications se répètent chaque semaine. Par conséquent, l’intervalle de planification est 1 et le type d’intervalle est Weekly.

Déclencheur planifié

"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"
        }

Si vous souhaitez ajouter la protection d’archivage, vous devez modifier le json de stratégie.

Cycle de vie de rétention

Le json précédent a un cycle de vie pour le magasin de données initial sous la règle de rétention par défaut. Dans ce scénario, la règle indique de supprimer les données de sauvegarde au bout de trois mois. Vous devez ajouter une nouvelle règle de rétention qui définit quand les données sont déplacées vers le magasin de données d’archivage. Autrement dit, les données de sauvegarde sont d’abord copiées dans le magasin de données archive, puis supprimées dans le magasin de données du coffre.

En outre, la règle doit définir les durées pour conserver les données dans le magasin de données d’archivage. Nous allons nommer cette nouvelle règle Monthly. Il définit que les sauvegardes doivent être conservées dans le magasin de données du coffre pendant 6 mois, puis copiées dans le magasin de données d’archivage. Ensuite, supprimez les sauvegardes dans le magasin de données du coffre et conservez les données pendant 24 mois dans le magasin de données d’archive. Enfin, supprimez les données dans le magasin de données d’archive.

"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"
    }

Critères d’étiquetage

Chaque fois que vous ajoutez une règle de rétention, vous devez ajouter une balise correspondante dans la Trigger propriété de la stratégie. L’exemple suivant crée une balise avec les critères (qui est la première sauvegarde réussie du mois) avec exactement le même nom que la règle de rétention correspondante à appliquer.

Dans cet exemple, les critères de balise doivent être nommés Monthly:

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

Une fois que vous avez inclus toutes les modifications, le json de stratégie s’affiche comme suit :

{
  "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"
    }
  ]
}

Pour plus d’informations sur la création de stratégie, consultez Créer une stratégie de sauvegarde.

Vérifier la réponse

La création ou la mise à jour de la stratégie de sauvegarde est une opération synchrone. Une fois l’opération réussie, elle retourne la réponse d’état suivante avec le contenu de la stratégie dans le corps de la réponse.

Nom Type Description
200 OK BaseBackupPolicyResource L’opération est terminée.

Exemple de réponse

{
    "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"
}