S3生命周期规则的后缀

9
我有一个S3存储桶里面有很多文件。我想创建一个规则,在1天后删除所有以.pdf结尾的文件。
我能使用S3生命周期规则来实现吗?
因为我尝试过`*.pdf delete after 1 day`,但是没有起作用。
我还尝试过`copy_* delete after 1 day`,但也没有起作用。

类似问题的解决方案可以在https://dev59.com/zK32oIgBc1ULPQZFjAFA#76773741找到。 - Amol Manthalkar
3个回答

9
这不是对问题的直接回答。正如您注意到的,不支持基于后缀的规则。 但是,您可以使用标签。您需要在上传对象时将其标记,并且无论您使用CLI还是控制台都可以这样做。 您也可以为现有对象启用标记。同样,可以通过控制台或CLI(http://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-tagging.html)进行操作。
标记完成后,请创建一个仅适用于与该标记相关联的对象的生命周期规则。
标签会被复制(http://docs.aws.amazon.com/AmazonS3/latest/dev/crr-what-is-isnot-replicated.html)。因此,如果您启用了复制,则此设置在目标中也有效。

0

我也需要这样做。由于生命周期规则仍不支持基于后缀的规则,因此我编写了一个快速而简单的Python脚本来为我标记所有文件。该脚本甚至可以根据指定的任何后缀跨存储桶进行标记。

#!/usr/bin/env python3

import boto3

# Setup session. I use SSO so this may be slightly different for you if you don't.
boto3.setup_default_session(profile_name='your-profile-name')

# Connection to S3 Client
s3 = boto3.client('s3')

# If tagging a single bucket use this 
bucket = 'your-bucket'

# Get all object keys. We need to specify keys in all later steps
response = s3.list_objects_v2(
    Bucket= bucket,
    Delimiter="\n"
)

# We are only interested in the metadata about the contents
response = response['Contents']
keys = [] # List of keys globally accessible

file_suffix = 'pdf'

for key in response:
    if key.get('Key').endswith(file_suffix):
        keys.append(key.get('Key'))
    else:
        print('no pdf files found')
        exit()
    

for key in keys:
    obj = s3.put_object_tagging(
        Bucket=bucket,
        Key=key,
        Tagging={
        'TagSet': [
            {
                'Key': 'file_type',
                'Value': file_suffix
            }
        ]
        }
    )

可能存在更高效的分隔符,请参见https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/list_objects_v2.html


-2
为什么不在您的EC2上运行一个带有cronjob的shell脚本,以删除.pdf文件呢?

那可能是一个解决方案,但它并没有回答“您能使用S3生命周期规则完成这个任务吗?”的问题。 - user773737
我不想运行一个shell脚本,因为这意味着我需要启动一台机器来运行它...但两年过去了,似乎仍然不能基于后缀拥有生命周期规则。http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html - jset74
1
让脚本遍历 S3 中数千个对象听起来像是一个糟糕的主意... - Milean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接