使用 boto3 将多个 S3 生命周期规则添加到 S3 存储桶

Add multiple S3 lifecycle rules to S3 bucket with boto3

我想使用 lambda 和 boto3 将多个生命周期规则添加到 S3 存储桶。但是,对于boto3,它似乎只允许您添加1个生命周期规则,这也会覆盖已经存在的规则。

例如,执行以下操作会简单地覆盖我已有的任何预先存在的规则以及新编写的规则,并且只保留列表中的最后一个:

bucket_name = "test-bucket"
folder_paths = ["test_folder","test_folder1", "test_folder2"]
expiration = 1

for folder_path in folder_paths:
    client = boto3.client('s3')
    response = client.put_bucket_lifecycle_configuration(
        Bucket=bucket_name,
        LifecycleConfiguration={
            'Rules': [
                {
                    'Expiration': {
                        'Days': expiration
                    },
                    'ID': folder_path,
                    'Filter': {
                        'Prefix': folder_path
                    },
                    'Status': 'Enabled'
                }
            ]
        }
    )

当然,使用 AWS 控制台可以在存储桶上添加多个单独的 S3 生命周期配置。

put_bucket_lifecycle_configuration类似,我也试过put_bucket_lifecycle,得到了相同的结果。

有什么方法可以使用boto3在一个bucket上添加多个S3生命周期配置吗?我是否漏掉了一些明显的东西?

感谢任何帮助,并提前致谢!

Of course using the AWS console it is possible to add multiple separate S3 lifecycle configurations on a bucket.

每个桶有1个生命周期配置,最多可以有1000条规则。 您的控制台可能会显示类似的内容:

这些不是不同的生命周期配置,它们是同一生命周期配置的不同规则部分。

put_bucket_lifecycle_configuration 的输入中,我们可以看到我们可以传递一个规则列表,其中可以包含 1 个或更多(最多 1000 个)规则。

for folder_path in folder_paths:
    client = boto3.client('s3')
    response = client.put_bucket_lifecycle_configuration(
        Bucket=bucket_name,
        LifecycleConfiguration={
            'Rules': [
                {
                    'Expiration': {
                        'Days': expiration
                    },
                    'ID': id_rule_1,
                    'Filter': {
                        'Prefix': folder_path
                    },
                    'Status': 'Enabled'
                },
                {
                    'Expiration': {
                        'Days': expiration2
                    },
                    'ID': id_rule_2,
                    'Filter': {
                        'Prefix': folder_path2
                    },
                    'Status': 'Enabled'
                },
             ...
            ]
        }
    )

如文档所述,put_bucket_lifecycle_configuration为存储桶创建新的生命周期配置或替换现有的生命周期配置。”如果您想更新生命周期配置,您必须使用 get_bucket_lifecycle_configuration 检索现有规则,修改它们,然后使用 put_bucket_lifecycle_configuration 覆盖现有配置。