Share via


Criar cópias de segurança de bases de dados postgreSQL do Azure com a CLI do Azure

Este artigo explica como criar cópias de segurança da base de dados PostgreSQL do Azure com a CLI do Azure.

Neste artigo, vai aprender a:

  • Criar um cofre de Cópia de Segurança
  • Criar uma política de cópias de segurança
  • Configurar uma cópia de segurança de uma base de dados PostgreSQL do Azure
  • Executar uma tarefa de cópia de segurança a pedido

Para obter os cenários e limitações suportados pelas bases de dados informgreSQL, veja a matriz de suporte.

Criar um cofre de Cópia de Segurança

O cofre de cópias de segurança é uma entidade de armazenamento no Azure. Esta ação armazena os dados de cópia de segurança de novas cargas de trabalho que Azure Backup suporta. Por exemplo, Base de Dados do Azure para PostgreSQL servidores, blobs numa conta de armazenamento e discos do Azure. Os cofres de cópias de segurança ajudam a organizar os dados de cópia de segurança, minimizando a sobrecarga de gestão. Os cofres de cópia de segurança baseiam-se no modelo de Resource Manager do Azure do Azure, que fornece capacidades melhoradas para ajudar a proteger os dados de cópia de segurança.

Antes de criar um cofre de Cópia de Segurança, escolha a redundância de armazenamento dos dados no cofre. Em seguida, crie o cofre do Backup com essa redundância de armazenamento e a localização.

Neste artigo, vamos criar um Cofre de cópia de segurança TestBkpVault, na região westus, no grupo de recursos testBkpVaultRG. Utilize o comando az dataprotection vault create para criar um cofre do Backup. Saiba mais sobre como criar um cofre do Backup.

az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

{
  "eTag": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
  "identity": {
    "principalId": "2ca1d5f7-38b3-4b61-aa45-8147d7e0edbc",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "SystemAssigned"
  },
  "location": "westus",
  "name": "TestBkpVault",
  "properties": {
    "provisioningState": "Succeeded",
    "storageSettings": [
      {
        "datastoreType": "VaultStore",
        "type": "LocallyRedundant"
      }
    ]
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.DataProtection/backupVaults"
}

Depois de o cofre ser criado, vamos criar uma política de Cópia de Segurança para proteger as bases de dados do Azure PostgreSQL.

Criar uma política de Cópia de Segurança

Compreender a política de cópia de segurança do PostGreSQL

Embora a cópia de segurança do disco ofereça várias cópias de segurança por dia e a cópia de segurança de blobs seja uma cópia de segurança contínua sem acionador, a cópia de segurança do PostgreSQL oferece proteção de Arquivo. Os dados de cópia de segurança que são enviados primeiro para o cofre podem ser movidos para a camada de arquivo de acordo com uma regra definida ou um ciclo de vida. Neste contexto, vamos compreender o objeto de política de cópia de segurança do PostgreSQL.

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (uma cópia de segurança de base de dados completa neste caso)
        • Arquivo de Dados Inicial (em que é que as cópias de segurança serão apresentadas inicialmente)
        • Acionador (Como a cópia de segurança é acionada)
          • Com base na agenda
          • Critérios de identificação predefinidos (uma "etiqueta" predefinida para todas as cópias de segurança agendadas. Esta etiqueta liga as cópias de segurança à regra de retenção)
    • Regra de Retenção Predefinida (uma regra que será aplicada a todas as cópias de segurança, por predefinição, no arquivo de dados inicial)

Assim, este objeto define que tipo de cópias de segurança são acionadas, como são acionadas (através de uma agenda), com o que são etiquetadas, onde são localizadas (um arquivo de dados) e o ciclo de vida dos dados de cópia de segurança num arquivo de dados. O objeto predefinido do PowerShell para PostgreSQL diz para acionar uma cópia de segurança completa todas as semanas e chegarão ao cofre, onde estão armazenados durante três meses.

Se quiser adicionar a camada de arquivo à política, tem de decidir quando os dados serão movidos do cofre para o arquivo, durante quanto tempo os dados permanecerão no arquivo e quais das cópias de segurança agendadas devem ser marcados como arquiváveis. Por conseguinte, tem de adicionar uma regra de retenção, onde o ciclo de vida dos dados de cópia de segurança será definido a partir do arquivo de dados do cofre para arquivar o arquivo de dados e durante quanto tempo permanecerão no arquivo de dados de arquivo . Em seguida, tem de adicionar uma etiqueta que marcará as cópias de segurança agendadas como elegíveis para serem arquivadas.

O objeto do PowerShell resultante é o seguinte:

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (uma cópia de segurança de base de dados completa neste caso)
        • Arquivo de Dados Inicial (em que é que as cópias de segurança serão apresentadas inicialmente)
        • Acionador (Como a cópia de segurança é acionada)
          • Com base na agenda
          • Critérios de identificação predefinidos (uma "etiqueta" predefinida para todas as cópias de segurança agendadas. Esta etiqueta liga as cópias de segurança à regra de retenção)
          • Novos critérios de Etiquetagem para a nova regra de retenção com o mesmo nome "X"
    • Regra de Retenção Predefinida (uma regra que será aplicada a todas as cópias de segurança, por predefinição, no arquivo de dados inicial)
    • Uma nova regra de Retenção denominada "X"
      • Ciclo de vida
        • Arquivo de dados de origem
        • Eliminar Após período de tempo no arquivo de dados de origem
        • Copiar para o arquivo de dados de destino

Obter o modelo de política

Para compreender os componentes internos de uma política de Cópia de Segurança para a cópia de segurança da base de dados PostgreSQL do Azure, obtenha o modelo de política com o comando az dataprotection backup-policy get-default-policy-template . Este comando devolve um modelo de política predefinido para um determinado tipo de origem de dados. Utilize este modelo de política para criar uma nova política.

az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
  "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"
    }
  ]
}

O modelo de política consiste num acionador (que decide o que aciona a cópia de segurança) e um ciclo de vida (que decide quando eliminar/copiar/mover a cópia de segurança). Na cópia de segurança da base de dados PostgreSQL do Azure, o valor predefinido para o acionador é um acionador Semanal agendado (uma cópia de segurança a cada sete dias) e para reter cada cópia de segurança durante três meses.

Acionador agendado:

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

Ciclo de vida da regra de retenção predefinida:

 {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }

Modificar o modelo de política

Importante

No Azure PowerShell, os Objetos podem ser utilizados como localizações de teste para efetuar todas as modificações. Na CLI do Azure, temos de utilizar ficheiros, uma vez que não existe noção de Objetos. Cada operação de edição deve ser redirecionada para um novo ficheiro, onde o conteúdo é lido a partir do ficheiro de entrada e redirecionado para o ficheiro de saída. Posteriormente, pode mudar o nome do ficheiro conforme necessário durante a utilização num script.

Modificar a agenda

O modelo de política predefinido oferece uma cópia de segurança uma vez por semana. Pode modificar a agenda para que a cópia de segurança ocorra vários dias por semana. Para modificar a agenda, utilize o comando az dataprotection backup-policy trigger set .

O exemplo seguinte modifica a cópia de segurança semanal para cópia de segurança que ocorre todos os domingos, quartas e sextas-feiras de cada semana. A matriz de datas de agenda menciona as datas e os dias da semana dessas datas são tomados como dias da semana. Também tem de especificar que estas agendas devem ser repetidas todas as semanas. Assim, o intervalo de agendamento é "1" e o tipo de intervalo é "Semanal".

az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
  "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"
]

az dataprotection backup-policy trigger set --policy .\OSSPolicy.json  --schedule 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 > EditedOSSPolicy.json

Adicionar uma nova regra de retenção

Se quiser adicionar a proteção de arquivo , tem de modificar o modelo de política conforme indicado abaixo.

O modelo predefinido terá um ciclo de vida para o arquivo de dados inicial sob a regra de retenção predefinida. Neste cenário, a regra diz para eliminar os dados de cópia de segurança após três meses. Deve adicionar uma nova regra de retenção que defina quando os dados são movidospara arquivo de arquivo, ou seja, os dados de cópia de segurança são copiados primeiro para arquivo de arquivos de dados e, em seguida, eliminados no arquivo de dados do cofre. Além disso, a regra deve definir durante quanto tempo os dados são mantidos no arquivo de dados de arquivo . Utilize o comando az dataprotection backup-policy retention-rule create-lifecycle para criar novos ciclos de vida e utilize o comando az dataprotection backup-policy retention-rule set para associá-las às novas regras ou às regras existentes.

O exemplo seguinte cria uma nova regra de retenção denominada Mensal, onde a primeira cópia de segurança bem-sucedida de todos os meses deve ser mantida no cofre durante seis meses, movida para a camada de arquivo e mantida na camada de arquivo durante 24 meses.

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON

Adicionar uma etiqueta e os critérios relevantes

Depois de criar uma regra de retenção, tem de criar uma etiqueta correspondente na propriedade Acionador da política de Cópia de Segurança. Utilize o comando az dataprotection backup-policy tag create-absolute-criteria para criar um novo critério de identificação e utilize o comando az dataprotection backup-policy tag set para atualizar a etiqueta existente ou criar uma nova etiqueta.

O exemplo seguinte cria uma nova etiqueta juntamente com os critérios, a primeira cópia de segurança com êxito do mês. A etiqueta tem o mesmo nome que a regra de retenção correspondente a ser aplicada.

Neste exemplo, os critérios de etiqueta devem ter o nome Mensal.

az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Suponha que se a agenda for múltiplas cópias de segurança por semana (todos os domingos, quartas, quintas, conforme especificado no exemplo acima) e quiser arquivar as cópias de segurança de domingo e sexta-feira, os critérios de identificação podem ser alterados da seguinte forma, utilizando o comando az dataprotection backup-policy tag create-generic-criteria .

az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Criar uma nova política de cópia de segurança do PostgreSQL

Assim que o modelo for modificado de acordo com os requisitos, utilize o comando az dataprotection backup-policy create para criar uma política com o modelo modificado.

az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault

Configurar a cópia de segurança

Depois de criar o cofre e a política, existem três pontos críticos que tem de considerar para proteger uma base de dados PostgreSQL do Azure.

Entidades-chave envolvidas

Base de dados PostGreSQL a proteger

Obtenha o ID de Resource Manager do Azure (ID do ARM) do PostgreSQL a proteger. Isto serve como o identificador da base de dados. Vamos utilizar um exemplo de uma base de dados com o nome empdb11 num servidor PostgreSQL testposgresql, que está presente no grupo de recursos ossrg numa subscrição diferente.

O exemplo seguinte utiliza bash.

ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

Cofre de chaves do Azure

O serviço Azure Backup não armazena o nome de utilizador e a palavra-passe para ligar à base de dados PostgreSQL. Em vez disso, o administrador da cópia de segurança tem de propagar as chaves para o cofre de chaves. Em seguida, o serviço de Cópia de Segurança irá aceder ao cofre de chaves, ler as chaves e, em seguida, aceder à base de dados. Tenha em atenção o identificador secreto da chave relevante.

O exemplo seguinte utiliza bash.

keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

Cofre de cópias de segurança

O cofre de cópias de segurança tem de se ligar ao servidor PostgreSQL e, em seguida, aceder à base de dados através das chaves presentes no cofre de chaves. Por conseguinte, requer acesso ao servidor PostgreSQL e ao cofre de chaves. O acesso é concedido à Identidade de Serviço Gerida (MSI) do cofre de Cópia de Segurança.

Veja as permissões que deve conceder à Identidade de Serviço Gerida (MSI) do cofre de Cópia de Segurança no servidor PostgreSQL e no Cofre de chaves do Azure que armazena chaves na base de dados.

Preparar o pedido

Assim que todas as permissões relevantes estiverem definidas, a configuração da cópia de segurança é efetuada em dois passos.

  1. Preparamos o pedido relevante com o cofre, a política e a base de dados PostgreSQL relevantes com o comando az dataprotection backup-instance initialize .
  2. Submetemos o pedido para proteger a base de dados com o comando az dataprotection backup-instance create .
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-location> --policy-id <policy_arm_id>  --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON

az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON

Executar uma cópia de segurança a pedido

Tem de especificar uma regra de retenção enquanto aciona a cópia de segurança. Para ver as regras de retenção na política, navegue pelo ficheiro JSON da política para obter as regras de retenção. No exemplo seguinte, existem duas regras de retenção com os nomes Predefinido e Mensal. Vamos utilizar a regra Mensal para a cópia de segurança a pedido.

az dataprotection backup-policy show  -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
  "id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
  "name": "osspol5",
  "properties": {
    "datasourceTypes": [
      "Microsoft.DBforPostgreSQL/servers/databases"
    ],
    "objectType": "BackupPolicy",
    "policyRules": [
      {
        "backupParameters": {
          "backupType": "Full",
          "objectType": "AzureBackupParams"
        },
        "dataStore": {
          "dataStoreType": "VaultStore",
          "objectType": "DataStoreInfoBase"
        },
        "name": "BackupWeekly",
        "objectType": "AzureBackupRule",
        "trigger": {
          "objectType": "ScheduleBasedTriggerContext",
          "schedule": {
            "repeatingTimeIntervals": [
              "R/2020-04-04T20:00:00+00:00/P1W",
              "R/2020-04-01T20:00:00+00:00/P1W"
            ],
            "timeZone": "UTC"
          },
          "taggingCriteria": [
            {
              "criteria": [
                {
                  "absoluteCriteria": [
                    "FirstOfMonth"
                  ],
                  "daysOfMonth": null,
                  "daysOfTheWeek": null,
                  "monthsOfYear": null,
                  "objectType": "ScheduleBasedBackupCriteria",
                  "scheduleTimes": null,
                  "weeksOfTheMonth": null
                }
              ],
              "isDefault": false,
              "tagInfo": {
                "eTag": null,
                "id": "Monthly_",
                "tagName": "Monthly"
              },
              "taggingPriority": 15
            },
            {
              "criteria": null,
              "isDefault": true,
              "tagInfo": {
                "eTag": null,
                "id": "Default_",
                "tagName": "Default"
              },
              "taggingPriority": 99
            }
          ]
        }
      },
      {
        "isDefault": false,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P10Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Monthly",
        "objectType": "AzureRetentionRule"
      },
      {
        "isDefault": true,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P1Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Default",
        "objectType": "AzureRetentionRule"
      }
    ]
  },
  "resourceGroup": "ossdemorg",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

Para acionar uma cópia de segurança a pedido, utilize o comando az dataprotection backup-instance adhoc-backup .

az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault

Controlar tarefas

Controle todas as tarefas com o comando az dataprotection job list . Pode listar todas as tarefas e obter um detalhe específico da tarefa.

Também pode utilizar o Az.ResourceGraph para controlar todas as tarefas em todos os cofres do Backup. Utilize o comando az dataprotection job list-from-resourcegraph para obter as tarefas relevantes que estão nos cofres do Backup.

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed

Passos seguintes