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:
- Atender aos pré-requisitos definidos acima
- Baixar e instalar a ferramenta
- Configurar o perfil AWS CLI para o dispositivo Snowball Edge
- 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:
-
- Usando seu navegador, acesse https://github.com/aws-samples/snow-transfer-tool
- Selecione o botão verde rotulado como “Code“
- No menu suspenso, selecione “Download Zip“

Imagem demonstrando o processo de download do arquivo ZIP que contém o código para o snow-transfer-tool.
- Extraia este arquivo no(s) computador(es) que atuará(ão) como estação(ões) de trabalho de cópia de dados
- 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.
-
- 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
- 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.
- 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:
- 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.
- 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
workstation-2
workstation-3
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