Ежедневная синхронизация S3 между двумя сегментами на основе даты

#amazon-web-services #amazon-s3

#amazon-веб-сервисы #amazon-s3

Вопрос:

Я выполняю синхронизацию S3 из источника в dest, и я хочу синхронизировать определенную папку только каждый день на основе даты. В настоящее время исходный сегмент S3 имеет формат S3://bucket/year/month / day /min. Я запустил приведенную ниже команду S3 sync для первой загрузки, которая заняла 4 часа:

 aws s3 sync s3://source-bucket/ s3://destination-bucket 
  

Однако я хочу сделать что-то подобное, чтобы сэкономить время:

 aws s3 sync s3://source-bucket/year/month/day s3://destination-bucket/year/month/day
  

Вопрос в том —> Есть ли способ передать параметры для каждой части года, месяца, дня, чтобы это было автоматизировано? например, если я запущу скрипт сегодня, он должен сработать:

 aws s3 sync s3://source-bucket/2019/03/11 s3://destination-bucket/2019/03/11
  

Моя игра в скриптах оболочки не настолько сильна, поэтому пытаюсь понять, есть ли хороший способ сделать это.

Ответ №1:

Разобрался с этим. Это то, что я написал:

  export current_date=$(date  %Y%m%d)
 export previous_date=
 export Year=$(date  %Y)
 export Month=$(date  %m)
 export day=$(date --date='1 day ago' ' %d') 
#Taking yesterday's date
 export SOURCE_S3='s3://Source/'$Year/$Month/$day/
 export DESTINATION_S3='s3://DESTINATION/'$Year/$Month/$day/

echo 'aws s3 sync' $SOURCE_S3 $DESTINATION_S3
aws s3 sync $SOURCE_S3  $DESTINATION_S3
  

Ответ №2:

Один из вариантов — извлечь путь к «последнему файлу» из исходного сегмента и использовать его для копирования в пункт назначения.

Эта команда предоставит ключ файла, который был изменен последним:

 aws s3api list-objects-v2 --bucket my-bucket --query 'sort_by(Contents, amp;LastModified)[-1].Key' --output text
  

Затем вы могли бы изменить возвращаемое значение, удалив имя файла и используя оставшийся путь в aws s3 sync команде.