

# 配置存储桶生命周期配置以删除未完成的分段上传
<a name="mpu-abort-incomplete-mpu-lifecycle-config"></a>

作为最佳实践，我们建议您使用 `AbortIncompleteMultipartUpload` 操作配置生命周期规则，以最大程度地降低存储成本。有关中止分段上传的更多信息，请参阅 [中止分段上传](abort-mpu.md)。

Amazon S3 支持存储桶生命周期规则，您可以使用该规则指示 Amazon S3 停止未在启动后的指定天数内完成的分段上传。如果分段上传未在指定的时间范围内完成，则符合中止操作的条件。然后，Amazon S3 停止分段上传，并删除与分段上传关联的分段。此规则既适用于现有的分段上传，也适用于您后续创建的分段上传。

 下面是使用 `AbortIncompleteMultipartUpload` 操作指定规则的示例生命周期配置。

```
<LifecycleConfiguration>
    <Rule>
        <ID>sample-rule</ID>
        <Prefix></Prefix>
        <Status>Enabled</Status>
        <AbortIncompleteMultipartUpload>
          <DaysAfterInitiation>7</DaysAfterInitiation>
        </AbortIncompleteMultipartUpload>
    </Rule>
</LifecycleConfiguration>
```

在本示例中，该规则不为 `Prefix` 元素（[对象键名称前缀](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)）指定值。因此，该规则适用于您启动了分段上传的存储桶中的所有对象。任何已启动但未在七天内完成的分段上传都符合执行中止操作的条件。中止操作对已完成的分段上传没有任何效果。

有关存储桶生命周期配置的更多信息，请参阅 [管理对象的生命周期](object-lifecycle-mgmt.md)。

**注意**  
如果分段上传在规则中指定的天数内完成，则 `AbortIncompleteMultipartUpload` 生命周期操作不适用（即，Amazon S3 不会执行任何操作）。此外，此操作不适用于对象。此生命周期操作不会删除任何对象。此外，当您删除任何未完成的分段上传分段时，不会收取 S3 生命周期的提前删除费用。

## 使用 S3 控制台
<a name="mpu-abort-incomplete-mpu-lifecycle-config-console"></a>

要自动管理未完成的分段上传，您可以使用 S3 控制台创建生命周期规则，以使存储桶中的未完成分段上传字节在指定天数后过期。以下过程介绍如何添加生命周期规则，以在 7 天后删除未完成的分段上传。有关添加生命周期规则的更多信息，请参阅[在存储桶上设置 S3 生命周期配置](how-to-set-lifecycle-configuration-intro.md)。

**添加生命周期规则以中止超过 7 天的未完成的分段上传**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在 **Buckets（存储桶）**列表中，请选择要为其创建生命周期规则的存储桶的名称。

1. 请选择 **Management（管理）**选项卡，然后选择 **Create lifecycle rule（创建生命周期规则）**。

1. 在 **Lifecycle rule name (生命周期规则名称)** 中，输入规则的名称。

   在该存储桶内，此名称必须是唯一的。

1. 请选择生命周期规则的范围：
   + 要为具有特定前缀的所有对象创建生命周期规则，请选择 **Limit the scope of this rule using one or more filters**（使用一个或多个筛选条件限制此规则的范围），然后在 **Prefix**（前缀）字段中输入前缀。
   + 要为存储桶中的所有对象创建生命周期规则，请选择 **This rule applies to **all** objects in the bucket**（此规则适用于存储桶中的所有对象），然后选择 **I acknowledge that this rule applies to all objects in the bucket**（我确认此规则适用于存储桶中的所有对象）。

1. 在 **Lifecycle rule actions**（生命周期规则操作）下，选择 **Delete expired object delete markers or incomplete multipart uploads**（删除过期的对象删除标记或未完成的分段上传）。

1. 在 **Delete expired object delete markers or incomplete multipart uploads**（删除过期的对象删除标记或未完成的分段上传）下，选择 **Delete incomplete multipart uploads**（删除未完成的分段上传）。

1. 在 **Number of days**（天数）字段中，输入天数，在此天数之后将删除未完成的分段上传（在本例中为 7 天）。

1. 选择**创建规则**。

## 使用 AWS CLI
<a name="mpu-abort-incomplete-mpu-lifecycle-config-cli"></a>

以下 `put-bucket-lifecycle-configuration` AWS Command Line Interface（AWS CLI）命令为指定的存储桶添加生命周期配置。要使用此命令，请将 `user input placeholders` 替换为您的信息。

```
aws s3api put-bucket-lifecycle-configuration  \
        --bucket amzn-s3-demo-bucket  \
        --lifecycle-configuration filename-containing-lifecycle-configuration
```

以下示例显示如何使用 AWS CLI 添加生命周期规则以中止未完成的分段上传。它包括一个示例 JSON 生命周期配置，以中止超过 7 天的未完成的分段上传。

要使用本示例中的 CLI 命令，请将 `user input placeholders` 替换为您的信息。

**添加生命周期规则以中止未完成的分段上传**

1. 设置 AWS CLI。有关说明，请参阅《Amazon S3 API 参考》**中的 [Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)。

1. 将以下示例生命周期配置保存在一个文件（例如 *`lifecycle.json`*``）中。该示例配置指定了空前缀，因此它适用于存储桶中的所有对象。为将配置限制为某个对象子集，您可以指定前缀。

   ```
   {
       "Rules": [
           {
               "ID": "Test Rule",
               "Status": "Enabled",
               "Filter": {
                   "Prefix": ""
               },
               "AbortIncompleteMultipartUpload": {
                   "DaysAfterInitiation": 7
               }
           }
       ]
   }
   ```

1.  运行以下 CLI 命令以在存储桶上设置此生命周期配置。

   ```
   aws s3api put-bucket-lifecycle-configuration   \
   --bucket amzn-s3-demo-bucket  \
   --lifecycle-configuration file://lifecycle.json
   ```

1.  要验证是否已在您的存储桶上设置了生命周期配置，请使用以下 `get-bucket-lifecycle` 命令检索生命周期配置。

   ```
   aws s3api get-bucket-lifecycle  \
   --bucket amzn-s3-demo-bucket
   ```

1.  要删除生命周期配置，请使用以下 `delete-bucket-lifecycle` 命令。

   ```
   aws s3api delete-bucket-lifecycle \
   --bucket amzn-s3-demo-bucket
   ```