Bagikan melalui


Membuat kebijakan pencadangan untuk database PostgreSQL dengan menggunakan REST API Perlindungan Data

Kebijakan pencadangan mengatur retensi dan jadwal pencadangan database PostgreSQL Anda di Azure Database for PostgreSQL. Azure Database for PostgreSQL menawarkan retensi cadangan database jangka panjang dan mendukung pencadangan per hari.

Anda dapat menggunakan kembali kebijakan pencadangan yang ada untuk mengonfigurasi cadangan untuk database PostgreSQL ke brankas, atau Anda dapat membuat kebijakan pencadangan untuk vault Azure Recovery Services dengan menggunakan REST API Perlindungan Data untuk Azure Backup. Dalam artikel ini, Anda membuat kebijakan pencadangan.

Memahami kebijakan pencadangan PostgreSQL

Sedangkan cadangan disk menawarkan beberapa cadangan per hari dan cadangan blob adalah cadangan berkelanjutan tanpa pemicu, cadangan PostgreSQL menawarkan perlindungan arsip. Data cadangan yang pertama kali dikirim ke vault dapat dipindahkan ke tingkat arsip sesuai dengan aturan yang ditentukan atau siklus hidup.

Dalam konteks ini, hierarki berikut dapat membantu Anda memahami objek kebijakan cadangan untuk PostgreSQL:

  • Aturan kebijakan
    • Aturan pencadangan
      • Parameter pencadangan
        • Jenis cadangan (cadangan database lengkap dalam kasus ini)
        • Datastore awal (tempat pencadangan mendarat awalnya)
        • Pemicu (bagaimana pencadangan dipicu)
          • Jadwal
          • Kriteria pemberian tag default (tag default yang menautkan semua cadangan terjadwal ke aturan retensi)
    • Aturan retensi default (aturan yang diterapkan ke semua cadangan, secara default, pada datastore awal)

Objek kebijakan mendefinisikan jenis cadangan apa yang dipicu, bagaimana mereka dipicu (melalui jadwal), apa yang ditandai dengan mereka, di mana mereka mendarat (datastore), dan siklus hidup data mereka di datastore.

Objek PowerShell default untuk PostgreSQL mengatakan untuk memicu pencadangan penuh setiap minggu. Cadangan mencapai brankas, tempat cadangan disimpan selama tiga bulan.

Jika Anda ingin menambahkan tingkat arsip ke kebijakan, Anda harus memutuskan kapan data akan dipindahkan dari vault ke arsip, berapa lama data akan tetap berada di arsip, dan cadangan terjadwal mana yang harus ditandai sebagai dapat diarsipkan. Anda harus menambahkan aturan retensi yang menentukan siklus hidup data cadangan dari datastore vault ke datastore arsip. Aturan retensi juga menentukan berapa lama data cadangan akan tetap berada di datastore arsip. Kemudian Anda perlu menambahkan tag yang menandai cadangan terjadwal sebagai memenuhi syarat untuk diarsipkan.

Objek PowerShell yang dihasilkan adalah sebagai berikut:

  • Aturan kebijakan
    • Aturan pencadangan
      • Parameter pencadangan
        • Jenis cadangan (cadangan database lengkap dalam kasus ini)
        • Datastore awal (tempat pencadangan mendarat awalnya)
        • Pemicu (bagaimana pencadangan dipicu)
          • Jadwal
          • Kriteria pemberian tag default (tag default yang menautkan semua cadangan terjadwal ke aturan retensi)
          • Kriteria penandaan baru untuk aturan retensi baru dengan nama yang sama
    • Aturan retensi default (aturan yang diterapkan ke semua cadangan, secara default, pada datastore awal)
    • Aturan retensi baru
      • Siklus hidup
        • Sumber penyimpanan data
        • Periode waktu penghapusan di datastore sumber
        • Salin ke datastore target

Buat kebijakan

Penting

Saat ini, pembaruan atau perubahan kebijakan yang ada tidak didukung. Sebagai gantinya, buat kebijakan baru dengan detail yang diperlukan dan tetapkan ke instans cadangan yang relevan.

Untuk membuat kebijakan pencadangan, gunakan operasi berikut PUT :

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

URI menyediakan {policyName} nilai dan {vaultName} . Isi permintaan menyediakan informasi tambahan.

Buat isi permintaan

Untuk membuat kebijakan untuk cadangan PostgreSQL, isi permintaan memerlukan komponen berikut:

Nama Wajib Tipe Deskripsi
properties true BaseBackupPolicy: BackupPolicy properti BaseBackupPolicyResource

Untuk daftar lengkap definisi dalam isi permintaan, lihat kebijakan pencadangan REST API.

Contoh isi permintaan

Kebijakan tersebut berbunyi:

  • Pemicu dijadwalkan untuk pencadangan mingguan pada waktu mulai yang dipilih (waktu + P1W).
  • Datastore adalah penyimpanan vault, karena cadangan langsung ditransfer ke vault.
  • Cadangan dipertahankan di brankas selama tiga bulan (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"
    }
  ]
}

Penting

Format waktu hanya DateTimemendukung . Time tidak didukung. Waktu dalam sehari menunjukkan waktu mulai pencadangan, bukan waktu akhir.

Mari kita perbarui JSON sebelumnya dengan dua perubahan:

  • Tambahkan cadangan pada beberapa hari dalam seminggu.
  • Tambahkan penyimpanan data arsip untuk retensi jangka panjang cadangan database PostgreSQL.

Contoh berikut memodifikasi cadangan mingguan menjadi Minggu, Rabu, dan Jumat setiap minggu. Array tanggal jadwal menyebutkan tanggal, dan hari dalam seminggu untuk tanggal tersebut diambil sebagai hari dalam seminggu. Anda juga perlu menentukan bahwa jadwal ini harus diulang setiap minggu. Jadi, interval jadwal adalah 1 dan jenis intervalnya adalah Weekly.

Pemicu terjadwal

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

Jika Anda ingin menambahkan perlindungan arsip, Anda perlu mengubah kebijakan JSON.

Siklus hidup retensi

JSON sebelumnya memiliki siklus hidup untuk datastore awal di bawah aturan retensi default. Dalam skenario ini, aturan mengatakan untuk menghapus data cadangan setelah tiga bulan. Anda harus menambahkan aturan retensi baru yang menentukan kapan data dipindahkan ke datastore arsip. Artinya, data cadangan pertama kali disalin ke penyimpanan data arsip dan kemudian dihapus di datastore brankas.

Selain itu, aturan harus menentukan durasi untuk menyimpan data di datastore arsip. Mari kita beri nama aturan Monthlybaru ini . Ini mendefinisikan bahwa cadangan harus dipertahankan di datastore vault selama 6 bulan dan kemudian disalin ke datastore arsip. Kemudian, hapus cadangan di datastore vault dan simpan data selama 24 bulan di datastore arsip. Terakhir, hapus data di datastore arsip.

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

Kriteria pemberian tag

Setiap kali Anda menambahkan aturan retensi, Anda perlu menambahkan tag yang sesuai di Trigger properti kebijakan. Contoh berikut membuat tag baru bersama dengan kriteria (yang merupakan pencadangan keberhasilan pertama bulan ini) dengan nama yang sama persis dengan aturan retensi yang sesuai yang akan diterapkan.

Dalam contoh ini, kriteria tag harus diberi nama Monthly:

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

Setelah Anda menyertakan semua perubahan, kebijakan JSON muncul sebagai berikut:

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

Untuk detail selengkapnya tentang pembuatan kebijakan, lihat Membuat kebijakan pencadangan.

Periksa respons

Pembuatan atau pembaruan kebijakan cadangan adalah operasi sinkron. Setelah operasi berhasil, operasi mengembalikan respons status berikut dengan konten kebijakan di isi respons.

Nama Tipe Deskripsi
200 OK BaseBackupPolicyResource Operasi selesai.

Contoh respons

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