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

2 分钟阅读
0

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

简短描述

您可以通过以下每种方式验证 Amazon S3 生命周期配置规则:

  • 查询服务器访问日志。
  • 通过使用 AWS 命令行界面(AWS CLI)上传某些部分的分段上传来测试规则。
    **注意:**如果您使用 AWS CLI 设置规则,则该规则被称为 AbortIncompleteMultipartUpload

解决方法

查询服务器访问日志

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

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

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

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

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

split /path/to/filetoupload

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

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

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

该命令会返回一个包含 UploadID 的输出。

3.    复制 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

**注意:**将所有值替换为您的 Amazon S3 存储桶、文件和分段上传值。

该命令将返回一个输出,其中包含您上传的文件部分的 ETag 值。

5.    复制 ETag 值作为后续步骤的参考信息。命令输出类似于以下内容:

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

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

**注意:**对于您上传的每个新部分,请务必递增部分编号。

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

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

该命令返回部分列表:

{
    "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"
}

8.    通过运行 list-multipart-uploads 命令记录针对存储桶正在进行的分段上传:

aws s3api list-multipart-uploads --bucket awsexamplebucket

该命令会返回正在进行的分段上传的列表:

{
    "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"
            }
        }
    ]
}

9.    等待您为 S3 生命周期配置规则设置的天数。(在 S3 生命周期配置规则中,您指定了在分段上传开始后的多少天开始清除。)

10.    再次运行 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."

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


相关信息

使用分段上传来上传和复制对象

如何使用 AWS CLI 将文件分段上传到 Amazon S3?

AWS 官方
AWS 官方已更新 2 年前