Переместить файлы S3 старше 100 дней в другое ведро - PullRequest
1 голос
/ 01 мая 2020

Есть ли способ найти все файлы старше 100 дней в одной корзине S3 и переместить их в другую корзину? Решения, использующие AWS CLI или SDK, приветствуются. В корзине sr c файлы организованы следующим образом: bucket / type / year / month / day / hour / file
S3://my-logs-bucket/logtype/2020/04/30/16/logfile.csv
Например, на 2020/04/30, файлы журналов на * или до 2020/01/21 должен быть перемещен.

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Вот некоторый Python код, который будет:

  • Переместить файлы с Bucket-A на Bucket-B, если они старше указанного периода
  • Полные имена и пути будут быть сохраненным
import boto3
from datetime import datetime, timedelta

SOURCE_BUCKET = 'bucket-a'
DESTINATION_BUCKET = 'bucket-b'

s3_client = boto3.client('s3')

# Create a reusable Paginator
paginator = s3_client.get_paginator('list_objects_v2')

# Create a PageIterator from the Paginator
page_iterator = paginator.paginate(Bucket=SOURCE_BUCKET)

# Loop through each object, looking for ones older than a given time period
for page in page_iterator:
    for object in page['Contents']:
        if object['LastModified'] < datetime.now().astimezone() - timedelta(days=2):   # <-- Change time period here
            print(f"Moving {object['Key']}")

            # Copy object
            s3_client.copy_object(
                Bucket=DESTINATION_BUCKET,
                Key=object['Key'],
                CopySource={'Bucket':SOURCE_BUCKET, 'Key':object['Key']}
            )

            # Delete original object
            s3_client.delete_object(Bucket=SOURCE_BUCKET, Key=object['Key'])

Это сработало для меня, но, пожалуйста, проверьте его на менее важных данных перед развертыванием в рабочей среде, поскольку оно удаляет объекты!

Код использует paginator , если в корзине более 1000 объектов.

Вы можете изменить желаемый период времени.

(В дополнение к лицензии, предоставленной в соответствии с условиями данного сайт содержание этого поста под лицензией MIT-0.)

1 голос
/ 01 мая 2020

Как уже упоминалось в моих комментариях, вы можете создать политику жизненного цикла для корзины S3. Вот шаги, чтобы сделать это https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html

Необязательно удалять \ истекать объект, используя правила политики жизненного цикла, вы определяете действия, которые вы хотите над объектами в вашей корзине S3.

Политики жизненного цикла используют разные классы хранения для перехода ваших объектов. Перед настройкой политик жизненного цикла я предлагаю ознакомиться с различными классами хранения, поскольку каждый из них имеет свою собственную связанную стоимость: Классы хранения Standard-IA, One Zone-IA, Glacier и Deep Archive

Ваш При использовании 100 дней я рекомендую перевести ваши журналы в класс архивного хранилища, например S3 Glacier. Это может оказаться более экономически эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...