Como implementar a recuperação de desastre usando o backup de serviço e restaurar no Gerenciamento de API no Azure

APLICA-SE A: Desenvolvedor | Básico | Standard | Premium

Ao publicar e gerenciar suas APIs através do Gerenciamento de API do Azure, você está tirando proveito de muitos recursos de tolerância e infraestrutura que você precisaria criar, implementar e gerenciar manualmente. A plataforma Azure atenua grande parte das falhas potenciais a uma fração do custo.

Para se recuperar de problemas de disponibilidade que afetam o seu serviço de Gerenciamento de API, esteja pronto para reconstituir o seu serviço em outra região a qualquer momento. Dependendo do objetivo do tempo de recuperação, talvez você queira manter um serviço em espera em uma ou mais regiões. Também é possível tentar manter a configuração e o conteúdo em sincronia com o serviço ativo de acordo com o objetivo do ponto de recuperação. As funcionalidades de backup e de restauração de gerenciamento de API fornecem os blocos de construção necessários para implementar uma estratégia de recuperação de desastre.

As operações de backup e restauração também podem ser usadas para replicar a configuração do serviço de Gerenciamento de API entre ambientes operacionais, por exemplo, desenvolvimento e preparo. Lembre-se de que os dados de runtime, como usuários e assinaturas, também serão copiados, o que talvez nem sempre seja desejável.

Este artigo mostra como automatizar operações de backup e restauração da sua instância de Gerenciamento de API usando uma conta de armazenamento externa. As etapas mostradas aqui usam os cmdlets do Azure PowerShell Backup-AzApiManagement e Restore-AzApiManagement ou as APIs REST Serviço de Gerenciamento de API – Backup e Serviço de Gerenciamento de API – Restaurar.

Aviso

Cada backup expira após 30 dias. Se você tentar restaurar um backup após o período de expiração de 30 dias, a restauração falhará com uma mensagem Cannot restore: backup expired.

Importante

A operação de restauração não altera a configuração de nome de host personalizado do serviço de destino. É recomendável usar o mesmo nome de host e TLS personalizados para serviços ativos e em espera, de modo que, após a conclusão da operação de restauração, o tráfego possa ser redirecionado para a instância em espera por uma alteração simples de CNAME de DNS.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Pré-requisitos

Configurar o acesso à conta de armazenamento

Ao executar uma operação de backup ou restauração, você precisa configurar o acesso à conta de armazenamento. O Gerenciamento de API dá suporte a dois mecanismos de acesso de armazenamento: uma chave de acesso do Armazenamento do Microsoft Azure ou uma identidade gerenciada do Gerenciamento de API.

Configurar a chave de acesso da conta de armazenamento

O Azure gera duas chaves de acesso à conta de armazenamento de 512 bits para cada conta de armazenamento. Essas chaves podem ser usadas para autorizar o acesso à sua conta de armazenamento por meio de autorização de Chave Compartilhada. Para exibir, recuperar e gerenciar as chaves, confira Gerenciar chaves de acesso da conta de armazenamento.

Configurar a identidade gerenciada do Gerenciamento de API

Observação

Usar uma identidade gerenciada do Gerenciamento de API para operações de armazenamento durante o backup e a restauração tem suporte na API REST do Gerenciamento de API na versão 2021-04-01-preview ou superiores.

  1. Habilite uma identidade gerenciada atribuída pelo sistema ou pelo usuário para Gerenciamento de API em sua instância do API Management.

    • Se você habilitar uma identidade gerenciada atribuída ao usuário, anote a ID do Cliente da identidade.
    • Se você for fazer backup e restaurar para diferentes instâncias do Gerenciamento de API, habilite uma identidade gerenciada nas instâncias de origem e destino.
  2. Atribua à identidade a função Colaborador de dados de blob de armazenamento , com escopo para a conta de armazenamento usada para backup e restauração. Para atribuir a função, use o portal do Azure ou outras ferramentas do Azure.

Fazer backup de um serviço de Gerenciamento de API

Entrar com o Azure PowerShell.

Nos seguintes exemplos:

  • Uma instância de Gerenciamento de API chamada myapim está no grupo de recursos apimresourcegroup.
  • Uma conta de armazenamento chamada backupstorageaccount está no grupo de recursos storageresourcegroup. A conta de armazenamento tem um contêiner chamado backups.
  • Um blob de backup será criado com o nome ContosoBackup.apimbackup.

Defina variáveis no PowerShell:

$apiManagementName="myapim";
$apiManagementResourceGroup="apimresourcegroup";
$storageAccountName="backupstorageaccount";
$storageResourceGroup="storageresourcegroup";
$containerName="backups";
$blobName="ContosoBackup.apimbackup"

Acesso usando a chave de acesso de armazenamento

$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageResourceGroup -StorageAccountName $storageAccountName)[0].Value

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName -TargetBlobName $blobName

Acesso usando a identidade gerenciada

Para configurar uma identidade gerenciada na sua instância de Gerenciamento de API para acessar a conta de armazenamento, confira Configurar uma identidade gerenciada, anteriormente neste artigo.

Acesso usando a identidade gerenciada atribuída pelo sistema

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName `
    -TargetBlobName $blobName -AccessType "SystemAssignedManagedIdentity"

Acesso usando a identidade gerenciada atribuída pelo usuário

Neste exemplo, uma identidade gerenciada atribuída pelo usuário chamada myidentity está em um grupo de recursos identityresourcegroup.

$identityName = "myidentity";
$identityResourceGroup = "identityresourcegroup";

$identityId = (Get-AzUserAssignedIdentity -Name $identityName -ResourceGroupName $identityResourceGroup).ClientId

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName `
    -TargetBlobName $blobName -AccessType "UserAssignedManagedIdentity" ` -identityClientId $identityid

O backup é uma operação de longa execução que pode levar vários minutos para ser concluída. Durante esse tempo, o gateway de API continua a lidar com solicitações, mas o estado do serviço é Atualizar.

Restaurar um serviço de Gerenciamento de API

Cuidado

Evite alterações na configuração do serviço (por exemplo, APIs, políticas, aparência do portal do desenvolvedor) enquanto uma operação de restauração está em andamento. As alterações podem ser substituídas.

Nos seguintes exemplos,

  • Uma instância de Gerenciamento de API chamada myapim é restaurada do blob de backup chamado ContosoBackup.apimbackup na conta de armazenamento backupstorageaccount.
  • O blob de backup está em um contêiner chamado backups.

Defina variáveis no PowerShell:

$apiManagementName="myapim";
$apiManagementResourceGroup="apimresourcegroup";
$storageAccountName="backupstorageaccount";
$storageResourceGroup="storageresourcegroup";
$containerName="backups";
$blobName="ContosoBackup.apimbackup"

Acesso usando a chave de acesso de armazenamento

$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageResourceGroup -StorageAccountName $storageAccountName)[0].Value

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName -SourceBlobName $blobName

Acesso usando a identidade gerenciada

Para configurar uma identidade gerenciada na sua instância de Gerenciamento de API para acessar a conta de armazenamento, confira Configurar uma identidade gerenciada, anteriormente neste artigo.

Acesso usando a identidade gerenciada atribuída pelo sistema

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName `
    -SourceBlobName $blobName -AccessType "SystemAssignedManagedIdentity"

Acesso usando a identidade gerenciada atribuída pelo usuário

Neste exemplo, uma identidade gerenciada atribuída pelo usuário chamada myidentity está em um grupo de recursos identityresourcegroup.

$identityName = "myidentity";
$identityResourceGroup = "identityresourcegroup";

$identityId = (Get-AzUserAssignedIdentity -Name $identityName -ResourceGroupName $identityResourceGroup).ClientId

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName `
    -SourceBlobName $blobName -AccessType "UserAssignedManagedIdentity" ` -identityClientId $identityid

A restauração é uma operação de execução longa que pode levar até 45 minutos ou mais para ser concluída.

Restrições

  • A restauração de um backup é garantida somente por 30 dias desde o momento de sua criação.
  • Enquanto o backup estiver em andamento, evite fazer alterações de gerenciamento no serviço, como upgrade do tipo de preço ou fazer downgrade, alterar o nome de domínio e outros.
  • As alterações feitas na configuração do serviço (por exemplo, APIs, políticas, aparência do portal do desenvolvedor) enquanto uma operação de backup está em andamento podem não ser incluídas no backup e, portanto, serão perdidas.
  • O backup não captura dados de log previamente agregados usados em relatórios mostrados na janela Análise no portal do Azure.
  • O CORS (compartilhamento de recursos entre origem)não deve ser habilitado no serviço de blob na conta de armazenamento.
  • O tipo de preço do serviço que está sendo restaurado precisa corresponder ao tipo de preço do serviço copiado em backup que está sendo restaurado.

Restrições de rede de armazenamento

Se a conta de armazenamento estiver habilitada para firewall, é recomendável usar a identidade gerenciada atribuída pelo sistema da instância de Gerenciamento de API para acessar a conta. Verifique se a conta de armazenamento concede acesso a serviços confiáveis do Azure.

O que não é submetido a backup

A frequência com que você executa backups de serviço afeta o seu objetivo de ponto de recuperação. Para minimizar, aconselhamos a implementação de backups regulares e realizar backups sob demanda depois de fazer as mudanças ao seu serviço de Gerenciamento de API.

Próximas etapas

Confira os seguintes recursos relacionados para o processo de backup/restauração: