O blog da AWS

Migrando arquivos de tamanhos variados com a snow-transfer-tool no AWS Snowball Edge

Esta postagem foi escrita por David Byte, Arquiteto de Soluções Principal specialista em Storage, e Zichong Li, Engenheiro de Software no AWS Snow Family. Adaptada para o português por Rogerio Xavier, Arquiteto de Soluções Sênior para Parceiros AWS.

Ao mover suas aplicações e infraestrutura de negócios para a AWS, é provável que você precise migrar seus dados existentes também. Esses dados frequentemente vêm de ambientes de compartilhamento de arquivos e contêm uma variedade de tamanhos de arquivo. Se os dados contiverem mais do que uma porcentagem de um dígito de arquivos menores que 1 MB, o desempenho da sua migração pode ser afetado por esses arquivos pequenos.

O motivo pelo qual arquivos pequenos apresentam um desafio é devido à necessidade de buscar, ler e escrever tanto os dados do arquivo quanto os metadados. O resultado é uma redução na taxa de transferência em comparação com arquivos maiores devido à latência nas operações de metadados, particularmente com dispositivos que utilizam mídia giratória. Os AWS Snowball Edge devices não são imunes a este impacto.

Para ajudar a resolver este desafio, a AWS recomenda em nossa documentação que arquivos pequenos sejam agrupados em arquivos tar ou zip ao usar a API do Amazon S3 como mecanismo de transferência no AWS Snowball Edge devices. Para seguir estas diretrizes, você precisa investir um tempo considerável no desenvolvimento de scripts e ferramentas que atendam às suas necessidades de conformidade, registro e otimização de transferência.

Reconhecemos que este processo é um grande esforço para nossos clientes, e desenvolvemos a snow-transfer-tool para torná-lo mais fácil e simplificado. Usar a snow-transfer-tool com o AWS Snowball Edge é uma maneira de alcançar essas recomendações e aumentar a eficiência da sua transferência de dados.

Neste post, descrevo casos de uso específicos e guio você através das etapas necessárias para realizar uma migração usando a snow-transfer-tool com dispositivos AWS Snowball Edge.

Visão geral da solução

A ferramenta snow-transfer oferece múltiplas opções para otimizar seu processo, dependendo do tamanho dos dados sendo movidos, da capacidade computacional disponível na estação de trabalho de transferência e do número de dispositivos sendo utilizados para a migração. Ela também fornece registros e opções para ajustar sua transferência com base nos recursos computacionais disponíveis e nas melhores práticas para seu cenário específico. Quando a ferramenta encontra arquivos grandes, eles são carregados diretamente para o dispositivo Snowball Edge.

A ferramenta funciona tanto com migrações de dados que requerem um ou múltiplos dispositivos Snowball Edge (SBE) usando a API S3 para migração de dados. As diferenças no uso da ferramenta para cada um desses casos de uso são abordadas abaixo. É importante observar que o script pode ser executado tanto com opções de linha de comando quanto usando um arquivo de configuração. Informações detalhadas de uso podem ser encontradas no arquivo README.md no repositório do GitHub. Além disso, um tutorial em vídeo de ambos os cenários está disponível.

Pré-requisitos

O tutorial tem os seguintes pré-requisitos:

  • O(s) sistema(s) de migração de dados que executará(ão) a snow-transfer-tool:
    • 6+ núcleos físicos
    • 16GB RAM
    • Ethernet 10Gb
    • Windows 2016 ou mais recente, Linux com kernel 3.12 ou mais recente, MacOS 12 ou mais recente
    • Python 3.6 ou superior
    • AWS CLI instalado no sistema (usado para configurar perfis para cada dispositivo Snowball Edge)
  • Uma conta AWS
  • Dispositivo AWS Snowball Edge com API Amazon S3 como opção de transferência de dados selecionada. Isso é selecionado no momento do pedido do dispositivo e não pode ser alterado após o envio
  • Dispositivo AWS Snowball Edge que foi desbloqueado
  • Credenciais Amazon S3 do dispositivo AWS Snowball Edge
  • Se usar HTTPS para transferência de dados pela rede, obtenha o certificado SSL conforme definido na documentação e defina a variável de ambiente AWS_CA_Bundle para apontar para o certificado

Tutorial: Preparação para todos os cenários

Esta seção abrange as etapas preparatórias necessárias para todos os cenários de transferência de dados. As etapas gerais são:

  1. Atender aos pré-requisitos definidos acima
  2. Baixar e instalar a ferramenta
  3. Configurar o perfil AWS CLI para o dispositivo Snowball Edge
  4. Realizar a cópia
    • Opcional: Criar os arquivos de partição

Link para o repositório GitHub: https://github.com/aws-samples/snow-transfer-tool

Instalação e configuração

As seguintes etapas devem ser executadas no sistema host de migração de dados.

Para baixar e instalar a snow-transfer-tool:

    1. Usando seu navegador, acesse https://github.com/aws-samples/snow-transfer-tool
    2. Selecione o botão verde rotulado como “Code
    3. No menu suspenso, selecione “Download Zip
Image depicting the process to download the ZIP archive containing the code for the the snow-transfer-tool. URL for ZIP archive at time of writing: https://github.com/aws-samples/snow-transfer-tool/archive/refs/heads/main.zip

Imagem demonstrando o processo de download do arquivo ZIP que contém o código para o snow-transfer-tool.

  1. Extraia este arquivo no(s) computador(es) que atuará(ão) como estação(ões) de trabalho de cópia de dados
  2. Para Windows, selecione e execute install.bat. Para Linux ou Mac OS, execute install.sh

Configurar credenciais do Amazon S3

A etapa de configuração a seguir simplifica múltiplas operações de cópia para o mesmo Snowball Edge ao armazenar as chaves necessárias para autenticar as operações da API S3 sendo realizadas. Se houver apenas um pequeno número de trabalhos de cópia, ou se sua política de segurança proíbe o armazenamento das chaves em um arquivo de texto na estação de trabalho de migração de dados, você pode usar as flags de opção aws_access_key_id e aws_secret_access_key e pular estas etapas.

    1. Após a conclusão da instalação da AWS CLI, crie perfis em cada estação de trabalho sendo usada para a cópia de dados:
aws configure --profile {profile name}

Example:

aws configure --profile snowballedge-1
  1. Você será então solicitado a fornecer a chave de acesso, chave secreta, região e formato de saída padrão para este dispositivo. A chave de acesso e a chave de acesso secreta podem ser obtidas via CLI do Snowball Edge ou via AWS OpsHub para cada dispositivo.
  2. Repita a criação do perfil para cada dispositivo sendo gerenciado em cada sistema que será usado para operações de cópia de dados.

Copiar dados para o AWS Snowball Edge

Existem dois métodos para copiar dados usando o script, com e sem arquivos de partição. Arquivos de partição são arquivos de texto que listam os arquivos a serem carregados em um único arquivo de arquivo no dispositivo AWS Snowball Edge. Se o número de arquivos a copiar for relativamente pequeno (baixos milhares), usar o script sem arquivos de partição é o método mais simples.

Se houver muitos milhares, milhões ou até bilhões de arquivos, ou se a capacidade total sendo copiada exceder a capacidade de um único dispositivo Snowball Edge, usar arquivos de partição oferece a capacidade de paralelizar múltiplos trabalhos para um único dispositivo ou carregar dados para múltiplos dispositivos simultaneamente. Além disso, usar arquivos de partição permite que você inicie a preparação da migração antes de solicitar um dispositivo Snowball Edge.

NOTA: É crítico que os comandos sejam executados do console da estação de trabalho ou em uma sessão recuperável, como em uma sessão screen no Linux. Falha em fazer isso pode resultar em um processo de cópia falho se a sessão for desconectada.

Cópia sem arquivos de partição

O seguinte comando de exemplo carregará diretamente os dados localizados em /dir/with/smallfiles para o bucket chamado my-snowballedge-bucket no dispositivo AWS Snowball Edge com um IP 192.168.50.51 usando o protocolo HTTPS. Arquivos de arquivo serão escritos com o prefixo de mysmallfiles e são configurados para serem auto-extraídos no momento da importação. Os logs de transferência serão colocados em /my/logs/ e serão carregados para o dispositivo.

snowTransfer upload --src /dir/with/smallfiles/ --bucket_name my-snowballedge-bucket --log_dir /my/logs/ --profile_name snowballedge-1 --endpoint https://192.168.50.51:8443 --prefix_root mysmallfiles --extract_flag true --upload_logs=true --max_files 100000 --partition_size10GB

Quando testei este processo em um único diretório contendo 131 milhões de arquivos de 4-KB, levou um pouco menos de 32 horas para carregar todos os arquivos para o dispositivo Snowball Edge. Copiar os mesmos arquivos sem a snow-transfer-tool levou mais de 22 dias, uma diminuição de 94% no tempo necessário para a migração. Embora seus resultados possam variar dependendo dos numerosos fatores que podem impactar o desempenho, o princípio geral de transformar muitas escritas pequenas em uma escrita grande e sequencial deve resultar em melhor taxa de transferência.

Cópia com arquivos de partição

Arquivos de partição especificam quais arquivos serão agrupados em um arquivo de arquivo particular no dispositivo AWS Snowball Edge. Os arquivos de partição dividem os arquivos agrupados em partes menores e gerenciáveis que são suportadas pelo serviço de importação do Snowball Edge para auto-extração. Para serem auto-extraídos no momento da importação para o Amazon S3, os arquivos de arquivo devem atender a certos requisitos de tamanho e número de arquivos por arquivo. A criação de arquivos de partição permite que você siga esses requisitos e otimize o carregamento dos dados para o(s) dispositivo(s) Snowball através de carregamentos paralelos. Ao trabalhar com múltiplos dispositivos, os arquivos de partição podem ser armazenados em um compartilhamento de rede disponível para montar em todas as estações de trabalho de cópia de dados.

Outro benefício de usar arquivos de partição é que você também tem um manifesto dos arquivos copiados para cada dispositivo. Se um dispositivo for danificado no envio ou um processo de cópia falhar, é possível copiar os mesmos arquivos para um dispositivo substituto sem precisar inventariar todos os objetos no S3 e realizar uma comparação.

Existem duas etapas para copiar os dados usando arquivos de partição:

  1. Gerar arquivos de partição

A primeira etapa é gerar os arquivos de partição. Isso pode ser feito antes de solicitar qualquer dispositivo Snow. Neste exemplo, estamos movendo 210TB de dados e os distribuiremos igualmente em 3 dispositivos:

snowTransfer gen_list --filelist_dir /my/partition-files --partition_size 1GB --device_capacity 70TB --src /mysrcdir/smallfiles --log_dir /my/logs

Este comando criará os arquivos de partição no local fileslist_dir especificado com subdiretórios para cada dispositivo com uma capacidade de preenchimento de 70TB conforme definido com a opção device_capacity. O tamanho máximo de cada arquivo tar carregado será 1GB, definido pela opção partition_size.

  1. Copiar dados para o(s) dispositivo(s) AWS Snowball Edge

Baseando-se no exemplo acima, o seguinte comando carregará os arquivos representados pelo arquivo de partição chamado fl_RKPYSJ_1.ready para o bucket chamado my-snowballedge-bucket no dispositivo AWS Snowball Edge com um IP 192.168.50.51 usando o protocolo HTTPS. Quando escritos no arquivo tar, os arquivos serão escritos com um prefixo de mysmallfiles e são configurados para serem auto-extraídos no momento da importação para o Amazon S3 com a estrutura de diretório original preservada seguindo qualquer prefixo definido com a opção –prefix_root. Os logs de transferência serão colocados em /my/logs/ e também serão carregados para o dispositivo:

snowTransfer upload --src /my/partition_files/device_70.00TiB_1/fl_RKPYSJ_1.ready --bucket_name my-snowballedge-bucket --log_dir /my/logs/ --endpoint https://192.168.50.51:8443 --profile_name snowballedge1 --prefix_root mysmallfiles --extract_flag true --upload_logs true

Enquanto o exemplo anterior é para um único arquivo de partição representando no máximo um gigabyte de dados, o cenário descrito acima tem 210 TB de dados para mover e os dividiu igualmente em 70 TB por dispositivo Snowball Edge, assim cada subdiretório de dispositivo conteria 70.000 arquivos de partição. Se workstation-1 é o trabalhador para snowballedge-1, workstation-2 é o trabalhador para snowballedge-2, e workstation-3 é o trabalhador para snowballedge-3, então os comandos para cada estação de trabalho carregar cada arquivo sequencialmente seriam assim:

workstation-1

for i in {1..70000}; do snowTransfer upload --src /my/partition_files/device_70.00TiB_1/fl_RKPYSJ_$i.ready --profile_name snowballedge-1 --bucket_name my-snowballedge-bucket --log_dir /my/logs/ --endpoint https://192.168.50.51:8443 --prefix_root mysmallfiles --extract_flag true --upload_logs true;done
Bash

workstation-2

for i in {1..70000}; do snowTransfer upload --src /my/partition_files/device_70.00TiB_2/fl_RKPYSJ_$i.ready --profile_name snowballedge-2 --bucket_name my-snowballedge-bucket --log_dir /my/logs/ --endpoint https://192.168.50.52:8443 --prefix_root mysmallfiles --extract_flag true --upload_logs true;done
Bash

workstation-3

for i in {1..70000}; do snowTransfer upload --src /my/partition_files/device_70.00TiB_3/fl_RKPYSJ_$i.ready --profile_name snowballedge-3 --bucket_name my-snowballedge-bucket --log_dir /my/logs/ --endpoint https://192.168.50.53:8443 --prefix_root mysmallfiles --extract_flag true --upload_logs true;done
Bash

Otimização adicional do processo de upload

Estas flags de opção e otimizações adicionais podem ser usadas para aprimorar seu processo de upload, dependendo das especificidades do seu ambiente:

A flag de opção --max_process pode ser definida para permitir maior concorrência em operações de upload se núcleos de CPU suficientes e memória livre estiverem disponíveis nas estações de trabalho.

Os parâmetros --partition_size e --max_files são usados para garantir que os arquivos tar gerados estejam dentro das melhores práticas para o processo de importação conforme definido na documentação do AWS Snowball Edge. Além disso, arquivos maiores que a opção –partition_size são carregados diretamente usando uploads multipart, resultando em um processo de transferência otimizado.

Definir a flag --compression como true resultará na redução do tamanho do arquivo armazenado no dispositivo se os dados forem compressíveis, o que também deve reduzir o tempo necessário para carregar os dados para o dispositivo.

Ao carregar dados usando arquivos de partição, também é possível dizer ao script para remover certos caracteres do prefixo do arquivo de destino usando a flag --ignored_path_prefix. Por exemplo, definir a flag com um valor de /user/johndoe quando os arquivos no arquivo de partição têm um caminho de /user/johndoe/appdata/ resultaria nos dados no S3 estarem localizados em /appdata/.

No Linux e MacOS, existem pacotes adicionais que podem ser usados para melhorar ainda mais os tempos de upload. A ferramenta GNU Parallel permite a execução paralela de processos em uma única plataforma. Para usar isso com o comando de upload do snow-transfer-tool seria assim:

parallel -j 8 snowTransfer upload --src/my/testscript/partition/device_70.00TiB_3fl_RKPYSJ_{}.txt --profile_namesnowballedge-1 --bucket_name my-snowballedge-bucket --log_dir /my/logs/--endpoint https://192.168.50.51:8443 --prefix_root testscript1--extract_flag true ::: {1..70000}

Este comando resultaria em 8 processos de upload paralelos executando com os arquivos de partição 1 a 70.000 sendo distribuídos entre esses 8 processos. Observe que cada processo de upload, por padrão, criará até 5 processos e que o máximo recomendado de conexões simultâneas para um único dispositivo Snowball Edge está na faixa de 30-40. Usando este comando com o conjunto de dados de teste de 131 milhões de arquivos de 4k, reduziu o tempo para copiar para o dispositivo Snowball Edge de pouco menos de 32 horas para pouco menos de 12 horas.

NOTA: Usar paralelismo aumentado pode resultar em redução de desempenho para outras cargas de trabalho usando o dispositivo de armazenamento de origem.

Conclusão

A snow-transfer-tool simplifica as migrações de dados de várias maneiras. Ela melhora o desempenho agrupando arquivos pequenos e permite o paralelismo de cópias de dados através do uso de arquivos de partição, reduzindo assim o tempo necessário para realizar migrações de dados com dispositivos Snowball Edge. A ferramenta também aumenta a repetibilidade de trabalhos via arquivos de partição e aumenta a visibilidade e relatórios criando arquivos de log.

Encorajamos você a visualizar o vídeo, usar a snow-transfer-tool e fornecer feedback através dos mecanismos do GitHub conforme apropriado. Além disso, se você tiver um aprimoramento para o código-base que gostaria de compartilhar, sinta-se à vontade para fazê-lo seguindo as instruções no arquivo CONTRIBUTING.md no repositório.

TAGS: Amazon Simple Storage Service (Amazon S3), AWS Cloud Storage, AWS Snow Family, AWS Snowball, AWS Snowball Edge

Autor

David Byte David Byte David Byte trabalha como Arquiteto Principal de Soluções de Armazenamento e oferece suporte ao serviço Snow para Migrações de Dados. Ele traz mais de trinta anos de experiência em uma ampla variedade de ambientes e é obcecado em fazer o que é certo para o cliente. Em seu tempo livre, ele gosta de visitar praias com sua esposa, amigos e filhos.
Autor

Zichong Li Zichong Li Zichong Li trabalha como Engenheiro de Software na equipe AWS Snow Family. Ele e sua equipe estão principalmente focados em melhorar a experiência de transferência de dados para os clientes do AWS Snow Family.
Tradutor

Rogerio Xavier Rogerio Xavier é Arquiteto de Soluções Sênior para parceiros da AWS, atua ajudando parceiros na jornada de parceria com a AWS e a entregar a melhor solução aos clientes. Com mais de 15 anos de experiência em infraestrutura de TI, arquitetura e administração de sistemas. Nos ultimos 7 anos ele se dedicou em Redes, Storage (Block e Object), Sistemas Operacionais, Messaging, Migração de dados, Serverless, além de modernização de aplicações. Ele adora passar o tempo livre com a família e jogar video-game.
Revisor

Diego Voltz Diego Voltz atua como Arquiteto de Soluções Sênior no seguimento de enterprise na AWS no Sul da Florida. Ele atuou por 15 anos como CTO de Startups no seguimento de Web Hosting e Health, tendo como foco virtualização, Storage e containers, hoje ajuda os clientes da AWS na jornada de adoção da nuvem e na otimização dos custos.