17

私は自分のs3バケットをクリーンアップする方法を見つけようとしていました。X日より古いキーをすべて削除したい(私の場合、Xは30日です)。

s3のオブジェクトを削除する方法がわかりませんでした。

次のアプローチを使用しましたが、いずれも機能しませんでした(機能したということは、X日後にオブジェクトを取得しようとしましたが、s3はまだオブジェクトを提供していました。「オブジェクトが見つかりません」または「オブジェクトの有効期限が切れました」というメッセージが表示されることを期待していました。

アプローチ1:

    k = Key(bucket)
    k.key = my_key_name
    expires = datetime.utcnow() + timedelta(seconds=(10))
    expires = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
    k.set_contents_from_filename(filename,headers={'Expires':expires})

アプローチ2:

    k = Key(bucket)
    k.key = "Event_" + str(key_name) + "_report"
    expires = datetime.utcnow() + timedelta(seconds=(10))
    expires = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
    k.set_meta_data('Expires', expires)
    k.set_contents_from_filename(filename)

誰かが彼らのために働いていたコードを共有することができれば、それはs3オブジェクトを削除します、それは本当に素晴らしいでしょう

4

4 に答える 4

15

ライフサイクル ポリシーを使用して、X 日より古いオブジェクトを s3 から削除できます。たとえば、次のオブジェクトがあるとします。

logs/first
logs/second
logs/third
otherfile.txt

ログ下のすべてを 30 日後に期限切れにするには、次のように言います。

import boto
from boto.s3.lifecycle import (
    Lifecycle,
    Expiration,
)

lifecycle = Lifecycle()
lifecycle.add_rule(
    'rulename',
     prefix='logs/',
     status='Enabled',
     expiration=Expiration(days=30)
)

s3 = boto.connect_s3()
bucket = s3.get_bucket('boto-lifecycle-test')
bucket.configure_lifecycle(lifecycle)

ライフサイクル構成を取得することもできます:

>>> config = bucket.get_lifecycle_config()
>>> print(config[0])
<Rule: ruleid>
>>> print(config[0].prefix)
logs/
>>> print(config[0].expiration)
<Expiration: in: 30 days>
于 2013-02-22T20:02:11.817 に答える