Sincronize um diretório de relatórios

AWSBeginner
Pratique Agora

Introdução

Após organizar objetos individuais, publique uma coleção que muda. Sincronize relatórios diários, diferencie transferência incremental de espelhamento e remova um relatório obsoleto sem afetar o arquivo separado.

Conclua primeiro Organize documentos com chaves e metadados, incluindo seus conceitos de bucket, chave, prefixo e download. Esta VM nova fornece a conexão da CLI, relatórios locais e um bucket contendo apenas o arquivo. Use Terminal para comandos e AWS View na parte superior para observar suas mudanças.

Relação com as certificações

Certificação Tarefa do exame Prática
Cloud Practitioner (CLF-C02) Tarefa 3.6 Sincronização de diretórios e exclusão com escopo delimitado no S3.
Solutions Architect – Associate (SAA-C03) Tarefa 3.1 Sincronização de diretórios e exclusão com escopo delimitado no S3.
Developer – Associate (DVA-C02) Tarefa 1.3 Sincronização de diretórios e exclusão com escopo delimitado no S3.

Visão geral do laboratório

Diagrama conceitual: relatórios locais são sincronizados com o prefixo daily/ no S3; o espelhamento altera apenas esse prefixo e preserva o objeto separado de archive/.

Publique o diretório de relatórios preparado

Nesta etapa, você publicará dois relatórios locais no prefixo daily/ e entenderá como seus nomes de arquivo correspondem às chaves de objetos.

Entre no espaço de trabalho com cd (mudar de diretório):

cd /home/labex/project

Inspecione o diretório de relatórios preparado com ls, que lista seus nomes de arquivo locais:

ls reports

A listagem contém monday.csv e tuesday.csv. Ambos são arquivos CSV: um cabeçalho nomeia as colunas, e vírgulas separam os valores em cada registro. Inspecione o relatório de segunda-feira com cat, que exibe o conteúdo de um arquivo:

cat reports/monday.csv
date,orders
2026-09-28,120

Liste o bucket preparado. Para uma localidade S3, --recursive exibe as chaves completas em todo o bucket:

aws s3 ls s3://labex-report-delivery/ --recursive

Apenas archive/retention.txt está presente. O arquivo pertence a um fluxo separado e deve sobreviver à sua sincronização diária.

aws s3 sync recebe uma origem e um destino, nessa ordem. Ele considera recursivamente os arquivos no diretório de origem; você não precisa de --recursive para sync. Cada nome relativo de arquivo se torna uma chave abaixo do prefixo de destino. Portanto, reports/monday.csv se torna daily/monday.csv, em vez de daily/reports/monday.csv.

aws s3 sync reports/ s3://labex-report-delivery/daily/

O comando informa envios de segunda-feira e terça-feira; a ordem da saída pode variar. Liste o bucket inteiro novamente:

aws s3 ls s3://labex-report-delivery/ --recursive

Você deve encontrar três chaves: archive/retention.txt, daily/monday.csv e daily/tuesday.csv. AWS View mostra os mesmos objetos. Clique em daily/monday.csv para ler o relatório CSV de duas linhas armazenado. O arquivo permanece fora do destino daily/ que você selecionou.

Sincronize uma mudança e um novo relatório

Nesta etapa, você atualizará um relatório, adicionará outro e transferirá essas mudanças sem enviar novamente um relatório inalterado.

Executar sync com a mesma origem e destino é seguro quando nenhum dos lados mudou:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Não há linhas de envio quando os arquivos existentes já estão atualizados. Para transferências do computador local para S3, a CLI considera se a chave de destino está ausente, se os tamanhos diferem ou se o arquivo local tem uma hora de modificação mais recente. Ela não observa o diretório continuamente: você executa sync quando quer publicar mudanças.

Adicione um lote tardio de 25 pedidos ao relatório de segunda-feira. printf exibe o texto entre aspas; \n termina a linha. O >> do shell acrescenta a um arquivo local em vez de substituí-lo:

printf '2026-09-28,25\n' >> reports/monday.csv

Inspecione o resultado de três linhas:

cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25

Crie o relatório de quarta-feira. Aqui, > grava um novo arquivo, substituindo qualquer conteúdo existente nesse caminho:

printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv

Antes de publicar, o relatório armazenado de segunda-feira ainda tem duas linhas e quarta-feira está ausente do AWS View. Editar apenas arquivos locais não altera o S3.

Publique novamente:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Você deve ver envios do relatório alterado de segunda-feira e do novo relatório de quarta-feira. Terça-feira está inalterado, portanto não é enviado. Esta é uma transferência incremental: ela copia mudanças em vez de copiar indiscriminadamente todos os arquivos.

No AWS View, segunda-feira agora mostra o lote tardio e quarta-feira aparece. Baixe segunda-feira para um caminho local separado para comparar o conteúdo efetivamente armazenado:

aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv

cmp compara arquivos byte a byte. Ele termina com sucesso sem exibir diferenças quando os conteúdos correspondem. && exibe a mensagem apenas após essa comparação bem-sucedida:

cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches

Isso confirma que a atualização chegou ao armazenamento; apenas uma mensagem de comando bem-sucedido não diria quais bytes foram armazenados.

Diretório de relatórios atualizado e arquivo preservado — O exemplo abaixo mostra o relatório armazenado de segunda-feira expandido após a atualização. Quarta-feira está presente, e o arquivo separado permanece no bucket:

Espelhe apenas o prefixo diário

Nesta etapa, você removerá um relatório obsoleto do destino protegendo o arquivo não relacionado.

O destino de sync é daily/; archive/ fica fora desse escopo.

Escopo do prefixo de sync

O relatório de terça-feira não faz mais parte da coleção diária publicada. Remova apenas esse arquivo local com rm (remover). Este é um comando do sistema de arquivos local, portanto ele não exclui um objeto S3:

rm reports/tuesday.csv

Execute sync comum novamente:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Liste o prefixo de destino:

aws s3 ls s3://labex-report-delivery/daily/ --recursive

Terça-feira ainda aparece. Por padrão, sync copia arquivos ausentes ou atualizados, mas deixa objetos extras no destino. Remover apenas um arquivo de origem não remove sua cópia armazenada.

Um espelho mantém o conjunto de arquivos do destino alinhado com a origem, incluindo remoções. --delete remove chaves de destino sem um arquivo correspondente na origem. Primeiro, combine-o com --dryrun, que exibe as operações pretendidas sem realizá-las:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun

O teste deve listar apenas a exclusão de daily/tuesday.csv. Segunda-feira e quarta-feira correspondem à origem, e archive/retention.txt está fora de daily/. Mantenha o prefixo de destino exato: usar a raiz do bucket colocaria o arquivo no escopo.

Depois de conferir a exclusão pretendida, execute a mesma operação sem --dryrun:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete

O comando informa a exclusão de terça-feira. Inspecione o bucket inteiro para conferir tanto o que desapareceu quanto o que foi preservado:

aws s3 ls s3://labex-report-delivery/ --recursive

As chaves restantes são daily/monday.csv, daily/wednesday.csv e archive/retention.txt. No AWS View, abra o objeto de arquivo e confirme que ele ainda contém Keep the archive outside daily synchronization. Sua operação de espelhamento afetou apenas o prefixo escolhido.

Resumo

Você publicou um diretório variável com sync, verificou a atualização armazenada e visualizou o espelhamento antes de --delete. A coleção final daily/ contém segunda e quarta; o arquivo separado permanece intacto. Escolha a direção da transferência e o escopo do destino antes de publicar.

Para aprofundar o tema, consulte a documentação da AWS: Seleção de transferências, prévia e escopo de exclusão no S3 sync.