다음을 통해 공유


빠른 시작: Bicep 파일을 사용하여 Azure Database for PostgreSQL - 유연한 서버에 대한 백업 구성

이 빠른 시작에서는 Azure Bicep 파일을 사용하여 Azure Database for PostgreSQL - 유연한 서버 백업을 구성하는 방법을 설명합니다.

Azure Backup 을 사용하면 Azure Portal, PowerShell, CLI, Azure Resource Manager, Bicep 등과 같은 여러 클라이언트를 사용하여 Azure PostgreSQL - 유연한 서버를 백업할 수 있습니다. 이 문서에서는 Bicep 파일을 배포하여 백업 보관소를 생성한 다음, Azure PostgreSQL - 플렉시블 서버에 대한 백업을 구성하는 프로세스를 중점적으로 다룹니다. Bicep 파일 개발에 대해 자세히 알아봅니다.

Bicep은 Azure 리소스를 선언적으로 배포하기 위한 언어입니다. ARM 템플릿(Azure Resource Manager 템플릿)을 개발하는 데 JSON 대신 Bicep을 사용할 수 있습니다. Bicep 구문은 이러한 복잡성을 줄이고 개발 환경을 향상시킵니다. Bicep은 모든 JSON 템플릿 기능을 제공하는 ARM 템플릿 JSON에 대한 투명한 추상화입니다. 배포하는 동안 Bicep CLI는 Bicep 파일을 ARM 템플릿 JSON으로 변환합니다. Bicep 파일은 리소스를 만드는 일련의 프로그래밍 명령을 작성하지 않고 Azure 리소스 및 리소스 속성을 명시합니다.

ARM 템플릿에서 유효한 리소스 종류, API 버전, 속성은 Bicep 파일에서도 유효합니다.

필수 조건

Bicep 개발 환경을 설정하려면 Bicep 도구 설치를 참조하세요.

참고 항목

문서에 설명된 대로 최신 Azure PowerShell 모듈 및 Bicep CLI를 설치합니다.

템플릿 검토

이 템플릿을 사용하면 Azure PostgreSQL - 유연한 서버에 대한 백업을 구성할 수 있습니다. 이 템플릿에서는 주간 일정과 3개월 보존 기간을 사용하여 PostgreSQL 서버에 대한 백업 정책을 사용하여 백업 자격 증명 모음을 만듭니다.

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

템플릿 배포

이 템플릿을 배포하려면 GitHub 또는 원하는 위치에 저장한 다음 셸 창에 다음 PowerShell 스크립트를 붙여넣습니다. 코드를 붙여넣으려면 셸 창을 마우스 오른쪽 단추로 클릭하고 붙여넣기를 선택합니다.

$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 

다음 단계

Azure PowerShell을 사용하여 Azure Database for PostgreSQL - 유연한 서버를 복원합니다.