Fazer backup de bancos de dados PostgreSQL do Azure usando a CLI do Azure

Este artigo explica como fazer backup do banco de dados PostgreSQL do Azure usando a CLI do Azure.

Neste artigo, vai aprender a:

  • Criar um cofre de backup
  • Criar uma política de cópias de segurança
  • Configurar um backup de um banco de dados PostgreSQL do Azure
  • Executar uma tarefa de backup sob demanda

Para cenários e limitações suportados por bancos de dados informgreSQL, consulte a matriz de suporte.

Criar um cofre de backup

O cofre de backup é uma entidade de armazenamento no Azure. Isso armazena os dados de backup para novas cargas de trabalho suportadas pelo Backup do Azure. Por exemplo, Banco de Dados do Azure para servidores PostgreSQL, blobs em uma conta de armazenamento e Discos do Azure. Os cofres de backup ajudam a organizar os dados de backup e, ao mesmo tempo, minimizam a sobrecarga de gerenciamento. Os cofres de backup são baseados no modelo do Azure Resource Manager do Azure, que fornece recursos aprimorados para ajudar a proteger os dados de backup.

Antes de criar um cofre de backup, escolha a redundância de armazenamento dos dados dentro do cofre. Em seguida, prossiga para criar o cofre de backup com essa redundância de armazenamento e o local.

Neste artigo, criaremos um cofre de backup TestBkpVault, na região westus, sob o grupo de recursos testBkpVaultRG. Use o comando az dataprotection vault create para criar um cofre de backup. Saiba mais sobre como criar um cofre de 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 que o cofre for criado, vamos criar uma política de Backup para proteger os bancos de dados PostgreSQL do Azure.

Criar uma política de backup

Noções básicas sobre a política de backup do PostGreSQL

Enquanto o backup em disco oferece vários backups por dia e o backup de blob é um backup contínuo sem gatilho, o backup PostgreSQL oferece proteção de arquivamento. Os dados de backup enviados pela primeira vez para o vault podem ser movidos para a camada de arquivamento de acordo com uma regra definida ou um ciclo de vida. Neste contexto, vamos entender o objeto de política de backup para PostgreSQL.

  • Regra de Política
    • Regra de Backup:
      • BackupParameter
        • BackupType (Um backup de banco de dados completo neste caso)
        • Datastore inicial (onde os backups serão fornecidos inicialmente)
        • Trigger (Como o backup é acionado)
          • Com base no cronograma
          • Critérios de marcação padrão (uma 'tag' padrão para todos os backups agendados. Essa tag vincula os backups à regra de retenção)
    • Regra de retenção padrão (uma regra que será aplicada a todos os backups, por padrão, no armazenamento de dados inicial)

Portanto, esse objeto define que tipo de backups são acionados, como eles são acionados (por meio de uma programação), com o que são marcados, onde aterrissam (um armazenamento de dados) e o ciclo de vida dos dados de backup em um armazenamento de dados. O objeto padrão do PowerShell para PostgreSQL diz para acionar um backup completo toda semana e eles chegarão ao cofre, onde serão armazenados por três meses.

Se quiser adicionar a camada de arquivamento à política, você precisa decidir quando os dados serão movidos do vault para o arquivamento, por quanto tempo os dados permanecerão no arquivo e quais dos backups agendados devem ser marcados como arquiváveis. Portanto, você precisa adicionar uma regra de retenção, onde o ciclo de vida dos dados de backup será definido do armazenamento de dados do vault para o armazenamento de dados de arquivamento e por quanto tempo eles permanecerão no armazenamento de dados de arquivamento . Em seguida, você precisa adicionar uma tag que marcará os backups agendados como elegíveis para serem arquivados.

O objeto PowerShell resultante é o seguinte:

  • Regra de Política
    • Regra de Backup:
      • BackupParameter
        • BackupType (Um backup de banco de dados completo neste caso)
        • Datastore inicial (onde os backups serão fornecidos inicialmente)
        • Trigger (Como o backup é acionado)
          • Com base no cronograma
          • Critérios de marcação padrão (uma 'tag' padrão para todos os backups agendados. Essa tag vincula os backups à regra de retenção)
          • Novos critérios de marcação para a nova regra de retenção com o mesmo nome 'X'
    • Regra de retenção padrão (uma regra que será aplicada a todos os backups, por padrão, no armazenamento de dados inicial)
    • Uma nova regra de retenção chamada 'X'
      • Ciclo de vida
        • Armazenamento de dados de origem
        • Excluir após o período de tempo no armazenamento de dados de origem
        • Copiar para o armazenamento de dados de destino

Recuperar o modelo de política

Para entender os componentes internos de uma política de Backup para backup de banco de dados PostgreSQL do Azure, recupere o modelo de política usando o comando az dataprotection backup-policy get-default-policy-template . Este comando retorna um modelo de política padrão para um determinado tipo de fonte de dados. Use 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 em um gatilho (que decide o que aciona o backup) e um ciclo de vida (que decide quando excluir/copiar/mover o backup). No backup do banco de dados PostgreSQL do Azure, o valor padrão para o gatilho é um gatilho semanal agendado (um backup a cada sete dias) e para reter cada backup por três meses.

Gatilho 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 padrão:

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

Modificando o modelo de política

Importante

No Azure PowerShell, os Objetos podem ser usados como locais de preparo para executar todas as modificações. Na CLI do Azure, temos que usar arquivos, pois não há noção de Objetos. Cada operação de edição deve ser redirecionada para um novo arquivo, onde o conteúdo é lido do arquivo de entrada e redirecionado para o arquivo de saída. Mais tarde, você pode renomear o arquivo conforme necessário ao usar em um script.

Modificar o cronograma

O modelo de política padrão oferece um backup uma vez por semana. Você pode modificar o agendamento para que o backup aconteça vários dias por semana. Para modificar o agendamento, use o comando az dataprotection backup-policy trigger set .

O exemplo a seguir modifica o backup semanal para que o backup aconteça em todos os domingos, quartas e sextas-feiras de cada semana. A matriz de datas do cronograma menciona as datas, e os dias da semana dessas datas são tomados como dias da semana. Você também precisa especificar que esses horários devem ser repetidos todas as semanas. Assim, o intervalo de programação é 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 arquivamento , você precisa modificar o modelo de política conforme abaixo.

O modelo padrão terá um ciclo de vida para o armazenamento de dados inicial sob a regra de retenção padrão. Nesse cenário, a regra diz para excluir os dados de backup após três meses. Você deve adicionar uma nova regra de retenção que defina quando os dados são movidos para o armazenamento de dados de arquivamento , ou seja, os dados de backup são primeiro copiados para o armazenamento de dados de arquivamento e, em seguida, excluídos no armazenamento de dados do vault. Além disso, a regra deve definir por quanto tempo os dados são mantidos no armazenamento de dados de arquivamento . Use o comando az dataprotection backup-policy retention-rule create-lifecycle para criar novos ciclos de vida e use o comando az dataprotection backup-policy retention-rule set para associá-los às novas regras ou às regras existentes.

O exemplo a seguir cria uma nova regra de retenção chamada Monthly, na qual o primeiro backup bem-sucedido de cada mês deve ser mantido no vault por seis meses, movido para a camada de arquivamento e mantido na camada de arquivamento por 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 tag e os critérios relevantes

Depois que uma regra de retenção for criada, você terá que criar uma tag correspondente na propriedade Trigger da política de backup. Use o comando az dataprotection backup-policy tag create-absolute-criteria para criar um novo critério de marcação e use o comando az dataprotection backup-policy tag set para atualizar a tag existente ou criar uma nova tag.

O exemplo a seguir cria uma nova tag junto com os critérios, o primeiro backup bem-sucedido do mês. A tag tem o mesmo nome que a regra de retenção correspondente a ser aplicada.

Neste exemplo, os critérios de tag devem ser denominados Monthly.

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 o agendamento for vários backups por semana (todos os domingos, quartas, quintas-feiras, conforme especificado no exemplo acima) e você quiser arquivar os backups de domingo e sexta-feira, os critérios de marcação podem ser alterados da seguinte maneira, usando 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 backup do PostgreSQL

Depois que o modelo for modificado de acordo com os requisitos, use o comando az dataprotection backup-policy create para criar uma política usando 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 que o cofre e a política são criados, há três pontos críticos que você precisa considerar para proteger um banco de dados PostgreSQL do Azure.

Principais entidades envolvidas

Banco de dados PostGreSQL a ser protegido

Procure a ID do Azure Resource Manager (ID ARM) do PostgreSQL para ser protegida. Isso serve como o identificador do banco de dados. Usaremos um exemplo de um banco de dados chamado empdb11 em um servidor PostgreSQL testposgresql, que está presente no grupo de recursos ossrg sob uma assinatura diferente.

O exemplo a seguir usa 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 de Backup do Azure não armazena o nome de usuário e a senha para se conectar ao banco de dados PostgreSQL. Em vez disso, o administrador de backup precisa semear as chaves no cofre de chaves. Em seguida, o serviço de backup acessará o cofre de chaves, lerá as chaves e acessará o banco de dados. Observe o identificador secreto da chave relevante.

O exemplo a seguir usa bash.

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

Backup vault

O cofre de backup tem que se conectar ao servidor PostgreSQL e, em seguida, acessar o banco de dados através das chaves presentes no cofre de chaves. Portanto, requer acesso ao servidor PostgreSQL e ao cofre de chaves. O acesso é concedido à Identidade de Serviço Gerenciado (MSI) do cofre de backup.

Consulte as permissões que você deve conceder à Identidade de Serviço Gerenciado (MSI) do cofre de Backup no servidor PostgreSQL e no cofre da Chave do Azure que armazena chaves para o banco de dados.

Preparar o pedido

Uma vez que todas as permissões relevantes são definidas, a configuração do backup é realizada em duas etapas.

  1. Preparamos a solicitação relevante usando o vault, policy, banco de dados PostgreSQL relevante usando o comando az dataprotection backup-instance initialize .
  2. Enviamos a solicitação para proteger o banco de dados usando 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

Você precisa especificar uma regra de retenção enquanto aciona o backup. Para exibir as regras de retenção na política, navegue pelo arquivo JSON da política para obter regras de retenção. No exemplo a seguir, há duas regras de retenção com os nomes Default e Monthly. Usaremos a regra Mensal para o backup sob demanda.

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 um backup sob demanda, use 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

Acompanhar trabalhos

Rastreie todos os trabalhos usando o comando az dataprotection job list . Você pode listar todos os trabalhos e buscar um detalhe específico do trabalho.

Você também pode usar Az.ResourceGraph para acompanhar todos os trabalhos em todos os cofres de backup. Use o comando az dataprotection job list-from-resourcegraph para buscar os trabalhos relevantes que estão nos cofres de backup.

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

Próximos passos