Partager via


Démarrage rapide : Configurer la sauvegarde pour Azure Database pour PostgreSQL - Serveurs flexibles avec un fichier Bicep

Ce guide de démarrage rapide explique comment configurer la sauvegarde d’Azure Database pour PostgreSQL - Serveur flexible avec un fichier Azure Bicep.

Sauvegarde Azure vous permet de sauvegarder vos serveurs Azure PostgreSQL - Flexibles à l’aide de plusieurs clients, tels que le portail Azure, PowerShell, l’interface CLI, Azure Resource Manager, Bicep, etc. Cet article se concentre sur le processus de déploiement d’un fichier Bicep pour créer un coffre de sauvegarde, puis configurer la sauvegarde pour le serveur flexible Azure PostgreSQL. En savoir plus sur le développement de fichiers Bicep.

Bicep est un langage permettant de déployer de manière déclarative des ressources Azure. Vous pouvez utiliser Bicep au lieu de JSON pour développer vos modèles Azure Resource Manager (modèles ARM). La syntaxe Bicep réduit la complexité et améliore l’expérience de développement. Bicep est une abstraction transparente sur un JSON de modèle ARM qui fournit toutes les fonctionnalités de modèle JSON. Pendant le déploiement, l’interface de ligne de commande Bicep convertit un fichier Bicep en un JSON de modèle ARM. Un fichier Bicep déclare les ressources Azure et les propriétés de ressources, sans écrire de séquence de commandes de programmation pour créer des ressources.

Les types de ressources, les versions d’API et les propriétés qui sont valides dans un modèle ARM sont également valides dans un fichier Bicep.

Prérequis

Pour configurer votre environnement pour le développement Bicep, consultez Installer les outils bicep.

Notes

Installez le dernier module Azure PowerShell et l’interface CLI de Bicep, comme décrit dans cet article.

Vérifier le modèle

Ce modèle vous permet de configurer la sauvegarde d’une instance Azure PostgreSQL – Serveur flexible. Dans ce modèle, nous créons un coffre de sauvegarde avec une stratégie de sauvegarde pour le serveur PostgreSQL avec une planification hebdomadaire et une durée de rétention de trois mois.

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

Déployer le modèle

Pour déployer ce modèle, stockez-le dans GitHub ou votre emplacement préféré, puis collez le script PowerShell suivant dans la fenêtre de l’interpréteur de commandes. Pour coller le code, cliquez avec le bouton droit sur la fenêtre de l’interpréteur de commandes, puis sélectionnez Coller.

$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 

Étapes suivantes

Restaurer Azure Database pour PostgreSQL - Serveur flexible à l’aide d’Azure PowerShell.