O objetivo deste post é ajudar o DBA que nunca mexeu com Azure e que precisa implantar Backup pro Azure direto de uma instância SQL Server! O objetivo é mostrar um passo a passo, explicando alguns pontos sem muitos detalhes, no estilo de um tutorial bem simples!
Para usar comando BACKUP TO URL, você precisa atender os seguintes pré-requisitos:
- Server 2012 ou superior
- Ter uma conta no Azure
- Ter uma Storage Account
- Ter um container
- Gerar um Sas Token
O BACKUP TO URL é feito para uma estrutura conhecida como Blob Storage. ELa recebe este nome porque é como se fosse um sistema de arquivos que vai receendo os dados através de chamada de API. A principal diferença é que ele não fica no seu computador, e você utiliza chamadas REST (via protocolo HTTPS) para se comunicar com esse storage. No caso do SQL Server, é ele quem se preocupa em fazer toda essa comunicação e para o DBA fica a tarefa de configurar.
Tipos de Blob
O Azure suporta dois tipos de Blob: Page Blob e Block Blob. O Page Blob é organizado em pedaços de 512 bytes (chamado de página) e as operações de leitura e escritas são feitos em múltiplos destas páginas. Já o block blob é organizado em estruturas de tamanho variável, chamado de blocos e as operações são feitas baseadas nestes blocos de tamanho variável. O Block Blob é mais eficiente e permite armazenar mais informações do que o Page Blob. O SQL Server escolhe o tipo de Blob dependendo da sintaxe usada. Até o SQL Server 2014, somente page blob era possível. Este post contém um comparativo dos dois.
Este tutorial irá mostrar o passo a passo focando no Block Blob. Se você quer saber como usar o Page Blob, veja este post da Raiane Flores.
Atenção: Os recursos que você irá criar durante este tutorial poderão incorrer em custos para você. Se está fazendo como um teste, tente optar pelas opções gratuitas e tenha cautela. Se está fazendo para produção, certique-se que você compreendeu os preços e custos envolvidos usando as página de preços do Azure ou a calculadora. O objetivo deste tutorial é mostrar como se cria elo portal e dar orientações gerais, mas os custos são por sua própria conta e risco, pois existem variadas opções e o ideal depende de cada necessidade.
Criando uma Conta do Azure
Antes de tudo, você precisa criar uma conta no Azure. Existem várias maneiras de se fazer isso. A mais simples, rápida e barata é usar a conta grátis por 12 meses. Em qualquer caso, você vai precisar de um cartão de crédito, pois o Azure faz algumas validações.
Uma conta pode ter uma ou mais assinaturas. As assinaturas estão associadas a ofertas.
Uma vez que você criou a conta, você pode acessar o Portal do Azure, que é onde terá acesso a toda as suas contas, assinaturas, recursos, etc. É possível usar API REST para fazer todas as ações que faz no portal (ou talvez,quase todas). Você pode usar powershell e outras linguagens para se interagir com o Azure. Este tutorial irá focar no uso do portal do Azure.
Em cada assinatura você pode criar recursos, e no nosso caso o recurso que iremos criar é uma Storage Account, que é o recurso que provê armazenamento dentro do mundo Azure.
Resource Groups (Grupos de Recurso)
Os recursos são agrupados em grupos chamdos Resource Groups. Geralmente, o portal te dá a opção de escolher um Resource Group existente (ou criar um novo) quando for criar um novo recurso. Essa organização é por sua conta, e você escolhe organizar da maneira que for melhor para você.
Regiões
Os recursos sao criados em uma região do Azure. Existem diversos datacenters espalhados pelo mundo, e você pode escolher em qual local do mundo quer criar. Dependendo da região, o custo pode ser mais alto ou mais baixo. Geralmente, em ambiente de testes, você escolhe a região mais barata e a região que irá apresentar o mehor custo benefício para produção, considerando a latência, por exemplo. Para mais informações sobre regiões, consulte https://azure.microsoft.com/en-us/global-infrastructure/regions/
Existem outros conceitos que estão envolvidos ao criar recursos no AZure, mas, por enquanto, o que você viu até aqui é o suficiente para o foco deste post.
Criando uma Storage Account no Portal
De posse da sua conta do Azure, é hora de seguir com o nosso objetivo. Se quiser mais detalhes e conceitos de Storage Account, vá em https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview.
Vamos lá:
- Acesse o portal do Azure com a sua conta
- Na barra de buscas, procure por Contas de Armazenamento (Storage Account):
- Clique em adicionar
- Preencha as opções:
- Assinatura: Escolha a assinatura desejada
- Grupo de Recursos: Escolha o grupo de recursos onde você quer criar a conta
- Nome da conta de armazenamento: DEfinda um nome. Esse nome deverá ser único. A interface irá mostrar os possíveis erros que podem existir
- Localização: Escolha a região. Isso pode afestar o custo
- Desempenho: Standard usa discos magneticos e Premium SSD. Para este tutorial irei usar Standard. Premium custa mais.
- Tipo de conta: Escolha StorageV2, que é mais recente. As outras opções podem ser mais baratas, prém pode não suportar algo necessário para o SQL.
- Replicação: Escolha como os dados serão replicados. Isso afeta o custo. Para o exemplo, escolherei o mais básico.
- Camada de acesso padrão: Escolha a camada de acesso padrão. O custo depende do desempenho escolhido. Eu deixaria no principalPara mais informações sobre os custos, veja: https://azure.microsoft.com/en-us/pricing/details/storage/
- Clique em avançar
- As próximas opções controlam aspectos de conectividade à sua conta. Eu deixei nos valores conforme na imagem abaixo, por ser um teste e ser mais simples. Após escolher, clique em avançar no fim da tela.
- Na próxima tela, voce pode especificar mais algumas opções. Eu mantive nessas opções e cliquei em avançar:
- Na tela avançado você pode configurar mais algumas questões. Eu vou manter conforme a tela abaixo:
Detalhe: Evite habilitar Acesso público ao blob, pois isso fará com que qualquer pessoa no mundo possa ver o seus dados. Geralmente, essa não é sua intenção com backups do SQL Server.
Quando terminar, clique em avançar. - Na tela de Marcas, você pode definir tags. Como eu não quer usar tags, eu deixei vazio e cliquei em “Avançar” para ir pra tela de revisão:
Após confirmar, eu cliquei em criar, e então é so aguardar a conclusão, que geralmente leva menos de 1 minuto.
Criando um Container no Portal
Uma vez que você tem uma Storage Account, é hora de criar o container, pois é dentro do Container onde voce vai armazenar os seus backups. A Storage Account permite que você crie diversos elementos como File Share. O que queremos agora é um container:
- Acesso o portal com sua conta do Azure
- Na barra de busca, digite contas de armazenamento (ou Storage Account, se tiver em inglês)
- Na próxima tela, clique na Storage Account desejada:
- No menu laterla, va em Contêineres:
- Clique no botão de adicionar:
- Dê um nome para o container e clique em criar:
- Pronto, seu container foi criado:
Você pode acessar o container de diversas maneiras (powershell, rest, storage explorer, etc.). No momento em que este post foi escrito, o portal do Azure disponibiliza uma ferramenta em Preview, para que faça isso diretamente pelo portal. Para isso vá no menu lateral,depois em “Gerenciador de Armazenamento”. Então escolha o que você quer ver. Seus blobs irão aparecer ai.
Um Blob é um objeto que contém os dados. No mundo dos Blobs não existe o conceito de diretórios. É como se todos os blobs fossem arquivos sob um mesmo diretório, que é o container. O nome destes arquivos podem conter barras, e algumas ferramentas, como as do proprio Azure, acabam exibindo em uma estrutura de arquivos e diretórios. Mas saiba que o diretório em si não existe. Por exemplo, os blobs com os nomes dir1/Arquivo1 e dir1/Arquivo2 são dois blobs diferentes criados em um mesmo container. Porém, o Azure irá exibir assim:
Mas na realidade, não existe diretório algum, são tudo arquivos (o nome correto é Blob) que estão em um container específico:
Gerando uma Shared Access Signature (SAS Token)
O SAS Token é um recurso que permite o Azure autenticar um client (isto é, alguma aplicação que esteja tentando ler ou escrever os dados da Storage Account) sem que você precise compartilhar a key da storage account. A Key da storage é o que protege seus dados de serem acessados por pessoas não autorizadas. Ou seja, ter acesso ela é ter acesso à sua Storage Account. O SAS Token reduz essa exposição da Account Key. Na API do Azure Storage Account, você pode especificar esse token para autenticar sua aplicação. Outras linguagens e ferramentas tem suas próprias maneiras de solicitar o token. O SQL Server suporta esse recurso a partir da versão 2016.
Este token é uma string que descreve o que se pode acessar, o prazo, o ip e outras informações que podem te ajudar a refinar a segurança. E uma parte dessa string é uma assinatura gerada com a Account Key, que permite o Azure validar todas essas informações. Isso é necessário porque o Azure não armazena o token. Você pode gerar vários tokens no portal e distribuir para as aplicações que precisam acessar. Assim, o Azure pode eficientemente autenticar estes acessos, enquano que permite você controlar a segurança conforme suas necessidades.
Existem várias maneiras de gerar um SAS Token. Tendo acesso a Account Key e conhecendo a sintaxe você consegue gerar até manualmente, mas o objetivo aqui é praticidade, então vou te mostrar como você faz isso no portal:
- Acesse a sua Storage Account no portal
- No menu lateral, procure por “Assinatura de Acesso Compartilhado” ou “Shared Access Signature”:
- Na tela em que abriu, você pode escolher uma série de opções, conforme os serviços que queira acessar. Eu vou mostrar o mínimo necessário para que o BACKUP TO URL funcione, e considerando o princípio do menor privilégio:
- Serviços permitidos: Eu escohi Blob, pois é o único serviço necessário para o SQL Server
- Tipos de recurso permitidos: Para o SQL Server, é necessário Serviço e Objeto, devido as chamadas de API que ele faz
- Permissões aceitas:
- Ler: Perimite ler os dados do Blob
- Gravar: Permite escrever dados
- Lista: Permite listar informações (não necessariamente os blobs)
- Nota: A permissão de Excluir permite deletar um blob. NO meu caso, vou desmarcar para prevenir que alguém possa deletar um backup, por exemplo. Mas neste caso, nem mesmo o SQL Server vai conseguir deletar, em caso de erros durante o processo de backup Isso pode até ser útil em algumas situações, para investigação por exemplo. Mas saiba que você pode acabar acumulando backups incompletos.
- data/hora: Você pode escolher uma data de início e fim do token. Após esse período, será necessário gerar um novo.
- Endereço IP: Você pode restriginir o acesso a uma lista de IPs, desde que sejam o IPs que chegam ao Azure. IP interno podem não funcionar.
- Protocolos permitidos: Para o SQL Server, ele suporta apenas https, que é mais seguro
- E por fim, especifique com qual das duas chaves da conta a assinatura será gerada
Então, ao clicar em “Gerar …”, o seu token será gerado (como é um teste, vou deixar todos os valores abertos pra você ver. Mas isso não é uma boa prática). Copie o valor do campo Token SAS pois se você sair dessa tela, não poderá recuperar novamente:
Usando o SAS Token no SQL Server
Neste ponto, você tem tudo o que precisa para fazer o BACKUP para sua Storage Account.
Primeiro, você precisa informar à sua instância SQL qual é o token usado e qual a URL do seu container. ISso é feito com o comando CREATE CREDENTIAL (que não é um comando exclusivo para Azure, e sim um recurso que existe há anos no SQL Server para criar identidades e senhas externas):
1 2 3 4 |
CREATE CREDENTIAL [https://tutorialthesqltimes.blob.core.windows.net/backupsql] WITH IDENTITY = 'SHARED ACCESS SIGNATURE' ,SECRET = 'sv=2019-10-10&ss=b&srt=so&sp=rwlx&se=2022-06-29T03:47:18Z&st=2020-06-28T19:47:18Z&spr=https&sig=m6%2BlG9R8DPKqRv6T7oXrySuAq8rp1aSOkPB4FYAJpSc%3D' |
O nome da credencial é a URL do seu container, que geralmente é o seguinte formato:
- https://NOMESTORAGEACCOUNT.blob.core.windows.net/NOMECONTAINER
Como você viu na imagem anterior, ao criar o SAS Token, ele te mostra a URL, bastando adicionar o container desejado. Note que você não gerou um SAS Token associado a um container específico, o que significa que ele serve para qualquer container, desde que as permissões estejam adequadas.
A opção é IDENTITY deve possuir valor fixo SHARED ACCESS SIGNATURE. O SQL aceita criar com um valor diferente, mas isso é validado na hora de executar o comando BACKUP TO URL e não tiver exatamente este valor, você irá receber um erro genérico de falha.
Em SECRET, você coloca o Token que você copiou (sem aquela interrogação inicial).
E então, você executar o comando de backup dessa maneira:
1 |
backup database model to url = 'https://tutorialthesqltimes.blob.core.windows.net/backupsql/model.bak' with init,format,compression |
Você pode especificar separar em “diretórios” apenas colocando as barras no nome do blob. Mas lembre-se do que expliquei: não existe diretórios de verdade.
No Azure, você verá assim:
Mas, na realidade, é assim que está no Azure:
E assim, encerramos este simples tutorial mostrando como você, DBA pai de primeira viagem no mundo cloud, pode fazer BACKUP TO URL do seu SQL Server pro Azure!
DBA Team Leader na Power Tuning