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):
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:
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!
Head de Inovação – Power Tuning