如何验证 Amazon S3 生命周期配置规则能否清除未完成的分段上传?

上次更新时间:2019 年 10 月 17 日

我设置了 Amazon Simple Storage Service (Amazon S3) 生命周期配置规则以清除未完成的分段上传。如何确认规则是否有效?

注意:如果您使用 AWS 命令行界面 (AWS CLI) 设置规则,则该规则被称为 AbortIncompleteMultipartUpload。 

简短描述

您可以通过以下方式之一验证生命周期配置规则:

  • 查询服务器访问日志。
  • 通过使用 AWS CLI 上传某些部分的分段上传来测试规则。

解决方法

查询服务器访问日志

要查询服务器访问日志,您必须在将生命周期规则设置为运行之前在您的存储桶上启用服务器访问日志记录。日志可用后,您可以查看日志,以验证规则是否清除了未完成的分段上传。有关服务器访问日志所报告的操作的详细信息,请参阅生命周期和日志记录

通过使用 AWS CLI 上传某些部分的分段上传来测试规则

如果您没有启用服务器访问日志记录,则可以通过运行未完成的分段上传来测试规则:

注意:以下示例使用 AWS CLI 执行分段上传。要使用 AWS 开发工具包执行分段上传,请参阅使用分段上传 API 上传对象

1.    将要上传的文件拆分为多个部分。例如,如果您使用的是 Linux 操作系统,则可以运行如下 split 命令:

split /path/to/filetoupload

2.    运行如下 create-multipart-upload 命令以使用 AWS CLI 启动分段上传:

aws s3api create-multipart-upload --bucket awsexamplebucket --key large_test_file

3.    该命令会返回一个包含 UploadID 的输出。复制 UploadID 值作为后续步骤的参考信息。该命令输出类似于以下内容:

{
    "AbortDate": "Mon, 03 Jun 2019 00:00:00 GMT",
    "AbortRuleId": "multipartcleanup",
    "Bucket": "awsexamplebucket",
    "Key": "objectname",
    "UploadId": "exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk"
}

4.    运行如下 upload-part 命令以上传文件的第一部分:

重要提示:请确保使用您的存储桶、文件和分段上传的值替换所有值。

aws s3api upload-part --bucket awsexamplebucket --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

5.    该命令将返回一个输出,其中包含您上传的文件部分的 ETag 值。复制 ETag 值作为后续步骤的参考信息。该命令输出类似于以下内容:

{
    "ETag": "\"example8be9a0268ebfb8b115d4c1fd3\""
}

6.    对文件的某些部分重复步骤 3 和 4。在此测试中,请勿上传所有部分来完成文件。

注意:请确保在您上传的每个新分段后增加分段编号。

7.    在此测试中,请勿完成或中止分段上传操作。请通过运行如下 list-parts 命令记录已上传的部分:

aws s3api list-parts --bucket awsexamplebucket --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    该命令会返回类似于以下内容的分段列表:

{
    "Parts": [
        {
            "PartNumber": 1,
            "LastModified": "2019-06-01T18:17:39.000Z",
            "ETag": "\"example8be9a0268ebfb8b115d4c1fd3\"",
            "Size": 162641
        },
        {
            "PartNumber": 2,
            "LastModified": "2019-06-01T18:18:19.000Z",
            "ETag": "\"example246e31ab807da6f62802c1ae8\"",
            "Size": 3961
        }
    ],
    "Initiator": {
        "ID": "arn:aws:iam::111122223333:user/jane",
        "DisplayName": "jane"
    },
    "Owner": {
        "DisplayName": "bucketowner",
        "ID": "examplea2395fe1985ffabfe0c17d3522e5bc7fa1a2d048f8fc764d7709da80d"
    },
    "StorageClass": "STANDARD"
}

9.    然后,通过运行如下 list-multipart-uploads 命令记录针对存储桶正在进行的分段上传:

aws s3api list-multipart-uploads --bucket awsexamplebucket

10.    该命令会返回正在进行的分段上传的列表,类似于以下内容:

{
    "Uploads": [
        {
            "UploadId": "exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk",
            "Key": "large_test_file",
            "Initiated": "2019-06-01T17:08:33.000Z",
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "bucketowner",
                "ID": "examplea2395fe1985ffabfe0c17d3522e5bc7fa1a2d048f8fc764d7709da80d"
            },
            "Initiator": {
                "ID": "arn:aws:iam::111122223333:user/jane",
                "DisplayName": "jane"
            }
        }
    ]
}

11.    设置生命周期配置规则时,您已指定分段上传开始后应进行清除的天数。请等待您为规则设置的天数。

12.    再次运行 list-parts 命令以查看未完成的分段上传的部分是否已被删除。在这些部分根据规则被删除后,该命令将返回以下响应:

“An error occurred (NoSuchUpload) when calling the ListParts operation: The specified upload does not exist.The upload ID may be invalid, or the upload may have been aborted or completed.”

13.    再次运行 list-multipart-uploads 命令查看分段操作是否已中止。在分段操作根据规则被中止后,该命令将不返回任何输出。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?