Condividi tramite


Guida introduttiva: Configurare il backup per i Database di Azure per PostgreSQL - Server flessibili utilizzando un file Bicep

Questa guida introduttiva descrive come configurare il backup di Azure Database per PostgreSQL - Server flessibile con un file Azure Bicep.

Backup di Azure consente di eseguire il backup di server flessibili di Azure PostgreSQL usando più client, ad esempio il portale di Azure, PowerShell, l'interfaccia della riga di comando, Azure Resource Manager, Bicep e così via. Questo articolo è incentrato sul processo di distribuzione di un file Bicep per creare un insieme di credenziali di backup e quindi configurare il backup per l'Azure PostgreSQL - Flexible Server. Maggiori informazioni sullo sviluppo di file Bicep.

Bicep è un linguaggio che consente di distribuire in modo dichiarativo le risorse di Azure. È possibile usare Bicep al posto di JSON per sviluppare modelli di Azure Resource Manager (modelli di ARM). La sintassi Bicep riduce la complessità e migliora l'esperienza di sviluppo. Bicep è un'astrazione trasparente su JSON del modello ARM che fornisce tutte le funzionalità del modello JSON. Durante la distribuzione, l'interfaccia della riga di comando di Bicep converte un file Bicep in un file JSON del modello di Resource Manager. Un file Bicep indica le risorse di Azure e le proprietà delle risorse, senza scrivere una sequenza di comandi di programmazione per creare risorse.

I tipi di risorse, le versioni api e le proprietà validi in un modello di Resource Manager sono validi anche in un file Bicep.

Prerequisiti

Per configurare l'ambiente per lo sviluppo Bicep, vedere Installare gli strumenti Bicep.

Nota

Installare il modulo Azure PowerShell più recente e l'interfaccia della riga di comando di Bicep come descritto in dettaglio nell'articolo.

Rivedere il modello

Questo modello consente di configurare il backup per un server flessibile di Azure PostgreSQL. In questo modello viene creato un insieme di credenziali di backup con criteri di backup per il server PostgreSQL con una pianificazione settimanale e una durata di conservazione di tre mesi .

@description('Specifies the name of the Backup Vault')
param backupVaultName string

@description('Specifies the name of the Resource group to which Backup Vault belongs')
param backupVaultResourceGroup string

@description('Specifies the name of the PostgreSQL server')
param postgreSQLServerName string

@description('Specifies the name of the Resource group to which PostgreSQL server belongs')
param postgreSQLResourceGroup string

@description('Specifies the region in which the Backup Vault is located')
param region string

@description('Specifies the name of the Backup Policy')
param policyName string

@description('Specifies the frequency of the backup schedule')
param backupScheduleFrequency string

@description('Specifies the retention duration in months')
param retentionDuration string

@description('Step 1: Create the Backup Vault')
resource backupVault 'Microsoft.DataProtection/backupVaults@2023-01-01' = {
  name: backupVaultName
  location: region
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    storageSettings: [
      {
        datastoreType: 'VaultStore'
        type: 'LocallyRedundant'
      }
    ]
  }
}

@description('Step 2: Create Backup Policy for PostgreSQL')
resource backupPolicy 'Microsoft.DataProtection/backupVaults/backupPolicies@2023-01-01' = {
  name: '${backupVaultName}/${policyName}'
  location: region
  properties: {
    datasourceTypes: [
      'AzureDatabaseForPostgreSQLFlexibleServer'
    ]
    policyRules: [
      {
        name: 'BackupSchedule'
        objectType: 'AzureBackupRule'
        backupParameters: {
          objectType: 'AzureBackupParams'
        }
        trigger: {
          schedule: {
            recurrenceRule: {
              frequency: 'Weekly'
              interval: backupScheduleFrequency
            }
          }
        }
        dataStore: {
          datastoreType: 'VaultStore'
        }
      }
      {
        name: 'RetentionRule'
        objectType: 'AzureRetentionRule'
        isDefault: true
        lifecycle: {
          deleteAfter: {
            objectType: 'AbsoluteDeleteOption'
            duration: 'P${retentionDuration}M'
          }
        }
      }
    ]
  }
}

@description('Step 3: Role Assignment for PostgreSQL Backup And Export Operator Role')
resource postgreSQLServer 'Microsoft.DBforPostgreSQL/flexibleServers@2022-03-01' existing = {
  name: postgreSQLServerName
  scope: resourceGroup(postgreSQLResourceGroup)
}

resource roleAssignmentBackupExportOperator 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(backupVault.id, 'PostgreSQLFlexibleServerLongTermRetentionBackupRole')
  properties: {
    principalId: backupVault.identity.principalId
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e')  // Role definition ID for 'PostgreSQL Backup And Export Operator'
    scope: postgreSQLServer.id
  }
}

@description('Step 4: Role Assignment for Reader on Resource Group')
resource targetResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
  name: targetResourceGroupName
}

resource roleAssignmentReader 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(backupVault.id, 'Reader')
  properties: {
    principalId: backupVault.identity.principalId
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00aa00aa-bb11-cc22-dd33-44ee44ee44ee')  // Role definition ID for 'Reader'
    scope: targetResourceGroup.id
  }
}

@description('Step 5: Create Backup Instance for PostgreSQL)
resource backupInstance 'Microsoft.DataProtection/backupVaults/backupInstances@2023-01-01' = {
  name: 'PostgreSQLBackupInstance'
  location: region
  properties: {
    datasourceInfo: {
      datasourceType: 'AzureDatabaseForPostgreSQLFlexibleServer'
      objectType: 'Datasource'
      resourceId: postgreSQLServer.id
    }
    policyInfo: {
      policyId: backupPolicy.id
    }
  }
}

Distribuire il modello

Per distribuire questo modello, archiviarlo in GitHub o nel percorso preferito e quindi incollare lo script di PowerShell seguente nella finestra della shell. Per incollare il codice, fare clic con il pulsante destro del mouse nella finestra della shell e quindi selezionare Incolla.

$projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names"
$location = Read-Host -Prompt "Enter the location (for example, centralus)"

$resourceGroupName = "${projectName}rg"
$templateUri = "templateURI"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName $projectName 

Passaggi successivi

Ripristinare il server flessibile di Database di Azure per PostgreSQL con Azure PowerShell.