top of page

AzCopy Sincronizando dados com sua Azure Storage Account

Atualizado: 28 de ago. de 2020

Olá pessoal, nesse post irei falar de uma ferramenta de linha de comando que poderá ajuda-lo na automatização das rotinas de transferências de arquivos com o Azure.


Você que já trabalhou com Windows já deve ter ouvido em algum momento falar sobre o robocopy certo? Bom, se nunca ouviu falar de uma olhada, é um utilitário de comando do windows que permite você manipular transferência de arquivos entre pastas e servidores de forma eficiente, um grande diferencial é o gerenciamento de interrupções, mas o robocopy é bem robusto e vai além, se você utiliza sistema operacional Windows execute o seguinte comando no seu prompt:


PS C:\Windows\system32> robocopy /?

Irá aparecer todas as opções possíveis e documentação dessa robusta ferramente.


Contudo, o post não é sobre o Robocopy e sim sobre o AzCopy, apesar das semelhanças são ferramentas diferentes, principais diferenças:

  • AzCopy é multiplataforma, operando em Windows, Linux e Mac.

  • AzCopy é focado para cópia de e para uma Azure Storage Account.

  • AZCopy precisa de Download, não é nativo do sistema operacional, como o Robocopy.

Falando exclusivamente do AzCopy agora, essa ferramenta te proporciona a capacidade de poder copiar arquivos de qualquer lugar para uma Azure Storage Account dos tipos Blob (ADLS também) e File, inclusive pode copiar dados de um Bucket no S3 da AWS, as opções que mostrarei estarão focadas no Blob que é um dos mais usados.


Após fazer o download do seu AzCopy com o link abaixo, copie o executável para sua pasta C:\Windows\System32, ou configure sua variável de ambiente informando o local do arquivo para facilitar a utilização, ou você pode chamar direto o executável da pasta aonde ele estiver armazenado.

Reginaldo, por que a pasta System32, isso é pegadinha? Não, apenas porque ela é um dos caminhos que já estão configurados nas variáveis de ambiente.

Feito isso, abra um Powershell (ou um cmd, mas a telinha azul é mais fascinante rs) em modo administrador e digite o seguinte comando:

PS C:\Windows\system32> azcopy --help

As demonstrações utilizarão um container no Blob do Azure, contudo, o Storage Account não é o foco deste post, falaremos em outros posts dele.


Para conectar o AzCopy ao Azure Storage Account você possui algumas opções como autenticação via Active Directory, Service Principal, SAS token, nessa demostração utilizarei o SAS (shared access signatures).


Primeiro passo, gere seu SAS Token via Azure porta, essa token será usada no comando Copy e Sync:

Se você tiver qualquer dúvida de como configurar uma Storage account com Blob e liberar os acessos via SAS, Access keys, AD, fique a vontade em me contatar.


Salve o SAS token que irá aparecer após clicar no botão gerar SAS.


Vamos para o Powershell, na imagem que rodamos o azcopy --help você já viu a descrição dos comandos, destacarei 6 comandos legais e bem úteis.


Após o comando --help, o env poderá checar os valores das variáveis de ambiente do Azcopy, muito útil, pois, você pode customizar algumas variáveis para melhorar a paralelização e concorrência das cópias.


O comando benchmark faz diversos testes com opções diferentes para encontrar a melhor quantidade de conexões concorrentes e assim melhorar throughput.

Você pode customizar essa concorrência com a variável de ambiente AZCOPY_CONCURRENCY_VALUE, exemplo:

$env:AZCOPY_CONCURRENCY_VALUE = 1000

Não existe o melhor valor, você pode deixar no AUTO para o AzCopy gerenciar ou no default que o cálculo é baseado na quantidade de processadores da maquina, a dica é, teste varias possibilidades para o seu ambiente.


Agora um comando sensacional, o Sync, com esse comando você pode manter uma pasta local sincronizada com um container no Blob, isso é, qualquer novo arquivo, alteração ou exclusão nesse diretório é replicado para o Blob.


Exemplo, dentro do meu Blob tenho um container chamado Salesdata e dentro dele criei uma pasta chamada Sync, na minha máquina local tem uma pasta no diretório C:\temp\Sample.


Observação, para visualizar os dados no Blob estou usando a ferramenta Azure Storage Explorer, você também pode usar para fazer upload e download de arquivos, por detrás dos panos ela utiliza o AzCopy também, inclusive você pode ver os comandos de AzCopy que são usados por ele.


A ideia é qualquer arquivo que for criado ou alterado dentro dessa pasta C:\Temp\sample replique para o Blob, com o AzCopy pode ser feito assim:

azcopy sync "C:\Temp\sample\" 'https://datalakereginaldo.blob.core.windows.net/salesdata/sync <coloque aqui seu SAS token>' --check-md5 FailIfDifferent --delete-destination true

Vou adicionar 1 arquivo .TXT nesse caminho C:\Temp\sample e rodar o comando.

Para cada execução é gerado um Job ID e um log com todas as informações do que foi executado.


Irei alterar apenas uma vírgula dentro do arquivo criado e reexecutar 2 vezes seguidas:


O Azcopy validou que o arquivo foi alterado na origem e replicou novamente para manter o destino exatamente igual, assim como também identificaria um arquivo novo na pasta e replicaria o mesmo, se um arquivo for excluído no destino ele também identifica e reenvia o arquivo novamente. Na segunda chamada nada foi identificado e nada transferido.


Pronto, agora você pode agendar um Job (no Windows, SQL, na sua aplicação...) e deixar suas pastas sincronizando com apenas 1 comando, tudo gerando logs para análises e troubleshooting.

Uma das grandes vantagens do AzCopy é se você estiver copiando um arquivo grande e sua conexão falhar, ele não reiniciará toda a cópia do início e sim continuar da onde parou, pois, ele divide a cópia em blocos, o tamanho de cada bloco pode ser configurado pelo parâmetro block-size-mb, podendo dividir um arquivo até 50 mil blocos e transferir arquivos de até 200 TB.

Nesse exemplo estou usando o comando copy, usado para copiar o arquivo para o Blob ou do Blob para sua máquina ou servidor, ou de um Blob para outro.


Se por algum motivo você precisar pausar um Job, por algum gargalo de latência de rede ou discos, pode para-lo, ele vai salvar o status e manter na lista de jobs e em algum momento poderá reiniciá-lo de onde ele parou.

azcopy jobs list 

Obs: O status InProgress pode significar que o Job ainda está rodando ou ele foi pausado, infelizmente ainda não tem o status Paused, você pode utilizar o JOB ID localizar seu arquivo de Log e fazer a validação para saber se está ou não em execução.

Exemplo de um Job pausado e posteriormente reiniciado:


Bom pessoal, sobre o AzCopy é isso, espero que tenha sido útil e que vocês possam ter inúmeras ideias de aplicação para o AzCopy, por ser um utilitário de linha de comando é flexível para automatização de rotinas e com o poder da multiplataforma.


Ah! Reginaldo, mas o Azure Data Factory não é melhor? Ok, chegaremos nessa reposta, aguarde os próximos posts.


Fiquem bem e até a próxima.



Referências:

589 visualizações0 comentário
Post: Blog2 Post
bottom of page