

# PUT 存储桶生命周期（已弃用）
<a name="v1-rel-RESTBucketPUTlifecycle"></a>

## 说明
<a name="v1-rel-RESTBucketPUTlifecycle-description"></a>

 

**重要**  
有关此 API 的已更新版本，请参阅 [PutBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html)。此版本已弃用。现有的生命周期配置将生效。对于新的生命周期配置，请使用已更新的 API。

为存储桶创建新的生命周期配置，或替换现有的生命周期配置。有关生命周期配置的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[对象生命周期管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

### 权限
<a name="v1-rel-put-object-lifecycle-permissions"></a>

默认情况下，所有 Amazon S3 资源都是私有的，包括存储桶、对象和相关子资源（例如，生命周期配置和网站配置）。只有资源拥有者和创建资源的 AWS 账户可以访问该资源。资源拥有者可以选择通过编写访问策略向他人授予访问权限。要执行此操作，用户必须获得 `s3:PutLifecycleConfiguration` 权限。

您也可以显式拒绝权限。显式拒绝也会取代任何其它权限。如果您想阻止用户或账户从您的存储桶中移除或删除对象，则必须拒绝他们执行以下操作的权限：
+ `s3:DeleteObject`
+ `s3:DeleteObjectVersion`
+ `s3:PutLifecycleConfiguration`

有关权限的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[管理对 Amazon S3 资源的访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

## 请求
<a name="v1-rel-RESTBucketPUTlifecycle-requests"></a>

### 语法
<a name="v1-rel-RESTBucketPUTlifecycle-requests-syntax"></a>

```
1. PUT /?lifecycle HTTP/1.1
2. Host: {{bucketname}}.s3.amazonaws.com
3. Content-Length: {{length}}
4. Date: {{date}}
5. Authorization: {{authorization string}} 
6. Content-MD5: {{MD5}}
7. 
8. {{Lifecycle configuration in the request body}}
```

有关授权字符串的详细信息，请参阅[对请求进行身份验证（AWS 签名版本 4）](sig-v4-authenticating-requests.md)。

### 请求参数
<a name="v1-rel-RESTBucketPUTlifecycle-requests-request-parameters"></a>

此操作的实施不使用请求参数。

### 请求标头
<a name="v1-rel-RESTBucketPUTlifecycle-requests-request-headers"></a>


|  名称  |  描述  |  必填  | 
| --- | --- | --- | 
| Content-MD5 | 数据的 base64 编码的 128 位 MD5 摘要。您必须将此标头用作消息完整性检查，以验证请求正文在传输过程中是否未损坏。有关更多信息，请参阅 [RFC 1864](http://www.ietf.org/rfc/rfc1864.txt)。<br />类型：字符串 <br />默认值：无 |  是  | 

### 请求正文
<a name="v1-rel-RESTBucketPUTlifecycle-requests-request-elements"></a>

在请求中，您可以在请求正文中指定生命周期配置。生命周期配置以 XML 形式指定。以下是一个基本生命周期配置的示例。它指定了一条规则。规则中的 `Prefix` 标识规则适用的对象。该规则还指定了两个操作（`Transition` 和 `Expiration`）。每个操作都指定了 Amazon S3 应执行该操作的时间表。`Status` 指示规则是已启用还是已禁用。

```
<LifecycleConfiguration>
    <Rule>
        <ID>sample-rule</ID>
        <Prefix>{{key-prefix}}</Prefix>
        <Status>{{rule-status}}</Status>
        <Transition>        
           <Date>{{value}}</Date>        
           <StorageClass>{{storage class}}</StorageClass>       
        </Transition>    
        <Expiration>
           <Days>{{value}}</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>
```

如果存储桶的状态为已启用版本控制或已暂停版本控制，则可能有同一对象的许多版本：一个当前版本和零个或零个以上非当前版本。以下生命周期配置指定了特定于非当前对象版本的操作（`NoncurrentVersionTransition`、`NoncurrentVersionExpiration`）。

```
<LifecycleConfiguration>
    <Rule>
        <ID>sample-rule</ID>
        <Prefix>{{key-prefix}}</Prefix>
        <Status>{{rule-status}}</Status>
        <NoncurrentVersionTransition>      
           <NoncurrentDays>{{value}}</NoncurrentDays>      
           <StorageClass>{{storage class}}</StorageClass>   
        </NoncurrentVersionTransition>    
        <NoncurrentVersionExpiration>     
           <NoncurrentDays>{{value}}</NoncurrentDays>    
        </NoncurrentVersionExpiration> 
    </Rule>
</LifecycleConfiguration>
```

您可以使用分段上传 API 来分段上传大型对象。有关分段上传的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[分段上传概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。利用生命周期配置，如果分段上传未在指定的天数内完成，您可以指示 Amazon S3 取消未完成的分段上传（通过在规则中指定的键名称前缀确定）。当 Amazon S3 取消分段上传时，它将删除与上传关联的所有分段。这可确保您不会有未完成的分段上传（未完成的分段上传会将剩余的分段存储在 Amazon S3 中），因此您不必为它们支付存储成本。下面是使用 `AbortIncompleteMultipartUpload` 操作指定规则的示例生命周期配置。此操作指示 Amazon S3 在分段上传启动 7 天后取消未完成的分段上传。

 

```
<LifecycleConfiguration>
    <Rule>
        <ID>sample-rule</ID>
        <Prefix>{{SomeKeyPrefix}}/</Prefix>
        <Status>{{rule-status}}</Status>
        <AbortIncompleteMultipartUpload>
          <DaysAfterInitiation>7</DaysAfterInitiation>
        </AbortIncompleteMultipartUpload>
    </Rule>
</LifecycleConfiguration>
```

下表描述了生命周期配置中的 XML 元素。


|  名称  |  描述  | 必填 | 
| --- | --- | --- | 
|  AbortIncompleteMultipartUpload  | 用于指定未完成的分段上传何时符合中止操作条件的容器。<br />子级：`DaysAfterInitiation`<br />类型：容器<br />原级：`Rule` | 是，如果没有为规则指定其它操作 | 
|  Date  | 您希望 Amazon S3 执行此操作的日期。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[生命周期规则：基于特定日期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#intro-lifecycle-rules-date)。<br />此日期值必须符合 ISO 8601 格式。时间始终为午夜 UTC。<br />类型：字符串<br />原级：`Expiration` 或 `Transition` | 是，如果 Days 和 ExpiredObjectDeleteMarker 不存在 | 
|  Days  | 指定对象创建后特定规则操作生效的天数。<br />类型：与 `Transition` 结合使用时为非负整数，与 `Expiration` 结合使用时为正整数<br />原级：`Expiration`、`Transition` | 是，如果 Date 和 ExpiredObjectDeleteMarker 不存在 | 
|  DaysAfterInitiation  | 指定启动分段上传后必须完成分段上传的天数。如果分段上传未在指定的天数内完成，则将符合中止操作的条件，而 Amazon S3 将取消未完成的分段上传。<br />类型：正整数<br />原级：`AbortIncompleteMultipartUpload` | 是，如果指定了父标签 | 
|  Expiration  | 此操作指定在对象的生命周期中 Amazon S3 应采取适当过期操作的时段。Amazon S3 采取的操作取决于存储桶是否启用了版本控制。+  如果从未在存储桶上启用版本控制，Amazon S3 将永久删除该对象的唯一副本。 <br />+  如果存储桶启用了版本控制（或暂停了版本控制），则该操作仅适用于对象的当前版本。启用了版本控制的存储桶可能具有同一对象的许多版本：一个当前版本和零个或零个以上非当前版本。 <br />Amazon S3 不是删除当前版本，而是通过添加删除标记作为新的当前版本，使当前版本成为非当前版本。 <br />  如果存储桶的状态为已暂停版本控制，则 Amazon S3 将创建一个版本 ID 为 `null` 的删除标记。如果您有一个版本 ID 为 `null` 的版本，Amazon S3 会覆盖该版本。   要为非当前对象设置过期，请使用 `NoncurrentVersionExpiration` 操作。  <br />类型：容器<br />子级：Days 或 Date<br />原级：Rule | 是，如果 Rule 中没有其它操作。 | 
|  ID  | 规则的唯一标识符。该值不能超过 255 个字符。<br />类型：字符串<br />原级：Rule | 否 | 
| LifecycleConfiguration | 生命周期规则的容器。您可以添加多达 1000 个规则。<br />类型：容器<br />子级：Rule<br />原级：无 | 是 | 
| ExpiredObjectDeleteMarker | 在受版本控制的存储桶（已启用版本控制或已暂停版本控制的存储桶）上，您可以在生命周期配置中添加此元素，以指示 Amazon S3 删除过期的对象删除标记。有关示例，请参阅《Amazon Simple Storage Service 用户指南》**中的[示例 8：移除过期的对象删除标记](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#lifecycle-config-conceptual-ex8)。不要将其添加到不受版本控制的存储桶中，因为该类型的存储桶不能包含删除标记。<br />类型：字符串 <br />有效值：true \| false（支持值 `false`，但它是无操作的，这意味着 Amazon S3 不会执行任何操作）<br />原级：`Expiration` | 是，如果 Date 和 Days 不存在 | 
| NoncurrentDays | 指定在 Amazon S3 可以执行关联操作之前，对象作为非当前对象的天数。有关非当前版本天数计算的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 如何计算对象成为非当前版本的时间](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。<br />类型：与 `NoncurrentVersionTransition` 结合使用时为非负整数，与 `NoncurrentVersionExpiration` 结合使用时为正整数<br />原级：`NoncurrentVersionExpiration` 或 `NoncurrentVersionTransition` | 是 | 
| NoncurrentVersionExpiration | 指定非当前对象版本的到期时间。到期后，Amazon S3 将永久删除非当前对象版本。<br />在已启用（或已暂停）版本控制的存储桶上设置此生命周期配置操作，以指示 Amazon S3 在对象生命周期的特定时段删除非当前对象版本。<br />类型：容器<br />子级：NoncurrentDays <br />原级：Rule | 是，如果 Rule 中没有其它操作 | 
| NoncurrentVersionTransition | 描述非当前对象何时转换为 `STANDARD_IA`、`ONEZONE_IA` 或存储类别的转换规则的容器。<br />如果存储桶启用了版本控制（或者如果版本控制已暂停），则可以设置此操作，以指示 Amazon S3 在对象生命周期的特定时段转换非当前对象版本。<br />类型：容器<br />子级：NoncurrentDays 和 StorageClass<br />原级：Rule | 是，如果 Rule 中没有其它操作 | 
|  Prefix  | 标识要应用该规则的一个或多个对象的对象键前缀。<br />类型：字符串<br />原级：Rule | 是 | 
| Rule  | 生命周期规则的容器。生命周期配置可以包含多达 1000 条规则。<br />类型：容器<br />原级：LifecycleConfiguration | 是 | 
|  Status  | 如果启用，Amazon S3 将按计划执行该规则。如果禁用，Amazon S3 将忽略该规则。<br />类型：字符串<br />原级：Rule<br />有效值：已启用、已禁用 | 是 | 
|  StorageClass  | 指定要将对象转换到的 Amazon S3 存储类别。<br />类型：字符串<br />原级：Transition 和 NoncurrentVersionTransition<br />有效值：STANDARD\_IA \| ONEZONE\_IA \| GLACIER  | 是<br />仅当指定其一个或两个原级时，才需要此元素。 | 
|  Transition  | 此操作在对象的生命周期中指定一个时段，在此时段内，Amazon S3 应将对象转换为 `STANDARD_IA`、`ONEZONE_IA` 或存储类别。此操作生效后，Amazon S3 的行为取决于存储桶是否启用了版本控制。+  如果从未在存储桶上启用版本控制，则 Amazon S3 将对象的唯一副本转换为指定的存储类别。 <br />+  如果您的存储桶启用了版本控制（或者暂停了版本控制），则 Amazon S3 仅转换在规则中标识的对象当前版本。 <br />  启用版本控制的存储桶可能包含对象的许多版本。此操作对非当前对象版本没有任何效果。要转换非当前对象，必须使用 `NoncurrentVersionTransition` 操作。  <br />类型：容器<br />子级：Days 或 Date，以及 StorageClass<br />原级：Rule | 是，如果 Rule 中没有其它操作 | 

## 响应
<a name="v1-rel-RESTBucketPUTlifecycle-responses"></a>

### 响应标头
<a name="v1-rel-RESTBucketPUTlifecycle-responses-response-headers"></a>

此操作的实施仅使用大多数响应通用的响应标头。有关更多信息，请参阅[通用响应标头](RESTCommonResponseHeaders.md)。

### 响应元素
<a name="v1-rel-RESTBucketPUTlifecycle-responses-response-elements"></a>

此操作的实施不返回响应元素。

### 特殊错误
<a name="v1-rel-RESTBucketPUTlifecycle-responses-special-errors"></a>

此操作的实施不返回特殊错误。有关 Amazon S3 错误的一般信息以及错误代码列表，请参阅[错误响应](ErrorResponses.md)。

## 示例
<a name="v1-rel-RESTBucketPUTlifecycle-examples"></a>

### 示例 1：向未启用版本控制的存储桶添加生命周期配置
<a name="v1-rel-put-bucket-lifecycle-ex1"></a>

以下生命周期配置指定了两个规则，每个规则都有一个操作。
+ 转换操作指示 Amazon S3 在创建带“documents/”前缀的对象后 30 天将其转换为相应的存储类别。
+ 过期操作指示 Amazon S3 在创建带“logs/”前缀的对象后 365 天将其删除。

```
 1. <LifecycleConfiguration>
 2.   <Rule>
 3.     <ID>id1</ID>
 4.     <Prefix>documents/</Prefix>
 5.     <Status>Enabled</Status>
 6.     <Transition>
 7.       <Days>30</Days>
 8.       <StorageClass>GLACIER</StorageClass>
 9.     </Transition>
10.   </Rule>
11.   <Rule>
12.     <ID>id2</ID>
13.     <Prefix>logs/</Prefix>
14.     <Status>Enabled</Status>
15.     <Expiration>
16.       <Days>365</Days>
17.     </Expiration>
18.   </Rule>
19. </LifecycleConfiguration>
```

以下是将上述生命周期配置添加到 `examplebucket` 存储桶的示例 `PUT /?lifecycle` 请求。

```
 1. PUT /?lifecycle HTTP/1.1
 2. Host: examplebucket.s3.amazonaws.com 
 3. x-amz-date: Wed, 14 May 2014 02:11:21 GMT
 4. Content-MD5: q6yJDlIkcBaGGfb3QLY69A==
 5. Authorization: {{authorization string}}
 6. Content-Length: 415
 7. 
 8. <LifecycleConfiguration>
 9.   <Rule>
10.     <ID>id1</ID>
11.     <Prefix>documents/</Prefix>
12.     <Status>Enabled</Status>
13.     <Transition>
14.       <Days>30</Days>
15.       <StorageClass>GLACIER</StorageClass>
16.     </Transition>
17.   </Rule>
18.   <Rule>
19.     <ID>id2</ID>
20.     <Prefix>logs/</Prefix>
21.     <Status>Enabled</Status>
22.     <Expiration>
23.       <Days>365</Days>
24.     </Expiration>
25.   </Rule>
26. </LifecycleConfiguration>
```

以下为示例响应。

 

```
1. HTTP/1.1 200 OK
2. x-amz-id-2: r+qR7+nhXtJDDIJ0JJYcd+1j5nM/rUFiiiZ/fNbDOsd3JUE8NWMLNHXmvPfwMpdc
3. x-amz-request-id: 9E26D08072A8EF9E
4. Date: Wed, 14 May 2014 02:11:22 GMT
5. Content-Length: 0
6. Server: AmazonS3
```

### 示例 2：向启用版本控制的存储桶添加生命周期配置
<a name="v1-rel-put-bucket-lifecycle-ex2"></a>

以下生命周期配置指定了两个规则，每个规则都有一个要由 Amazon S3 执行的操作。当存储桶启用了版本控制或暂停了版本控制时，您可以指定这些操作：
+ `NoncurrentVersionExpiration` 操作指示 Amazon S3 在带“logs/”前缀的对象变为非当前版本后的 100 天，使这些对象的非当前版本过期。
+ `NoncurrentVersionTransition` 操作指示 Amazon S3 在带“documents/”前缀的对象变为非当前版本后的 30 天，将这些对象的非当前版本转换为存储类别。

```
 1. <LifeCycleConfiguration>
 2.   <Rule>
 3.     <ID>DeleteAfterBecomingNonCurrent</ID>
 4.     <Prefix>logs/</Prefix>
 5.     <Status>Enabled</Status>
 6.     <NoncurrentVersionExpiration>
 7.       <NoncurrentDays>100</NoncurrentDays>
 8.     </NoncurrentVersionExpiration>
 9.   </Rule>
10.   <Rule>
11.     <ID>TransitionAfterBecomingNonCurrent</ID>
12.     <Prefix>documents/</Prefix>
13.     <Status>Enabled</Status>
14.     <NoncurrentVersionTransition>
15.       <NoncurrentDays>30</NoncurrentDays>
16.       <StorageClass>GLACIER</StorageClass>
17.     </NoncurrentVersionTransition>
18.   </Rule>
19. </LifeCycleConfiguration>
```

以下是将上述生命周期配置添加到 `examplebucket` 存储桶的示例 `PUT /?lifecycle` 请求。

```
 1. PUT /?lifecycle HTTP/1.1
 2. Host: examplebucket.s3.amazonaws.com 
 3. x-amz-date: Wed, 14 May 2014 02:21:48 GMT
 4. Content-MD5: 96rxH9mDqVNKkaZDddgnw==
 5. Authorization: {{authorization string}}
 6. Content-Length: 598
 7. 
 8. <LifeCycleConfiguration>
 9.   <Rule>
10.     <ID>DeleteAfterBecomingNonCurrent</ID>
11.     <Prefix>logs/</Prefix>
12.     <Status>Enabled</Status>
13.     <NoncurrentVersionExpiration>
14.       <NoncurrentDays>1</NoncurrentDays>
15.     </NoncurrentVersionExpiration>
16.   </Rule>
17.   <Rule>
18.     <ID>TransitionSoonAfterBecomingNonCurrent</ID>
19.     <Prefix>documents/</Prefix>
20.     <Status>Enabled</Status>
21.     <NoncurrentVersionTransition>
22.       <NoncurrentDays>0</NoncurrentDays>
23.       <StorageClass>GLACIER</StorageClass>
24.     </NoncurrentVersionTransition>
25.   </Rule>
26. </LifeCycleConfiguration>
```

以下为示例响应。

```
1. HTTP/1.1 200 OK
2. x-amz-id-2: aXQ+KbIrmMmoO//3bMdDTw/CnjArwje+J49Hf+j44yRb/VmbIkgIO5A+PT98Cp/6k07hf+LD2mY=
3. x-amz-request-id: 02D7EC4C10381EB1
4. Date: Wed, 14 May 2014 02:21:50 GMT
5. Content-Length: 0
6. Server: AmazonS3
```

### 其他示例
<a name="v1-rel-put-bucket-lifecycle-ex3"></a>

有关将对象转换为 STANDARD\_IA 或 ONEZONE\_IA 等存储类别的更多示例，请参阅[生命周期配置示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#lifecycle-configuration-examples)。

## 相关资源
<a name="v1-rel-RESTObjectPOSTrestore-responses-related-resources"></a>
+ [GetBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html)
+ [POST Object restore](RESTObjectPOSTrestore.md)
+  默认情况下，资源拥有者（在这种情况下为存储桶拥有者，即创建存储桶的 AWS 账户）可以执行任何操作。资源拥有者也可以向他人授予执行该操作的权限。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的以下主题：
  +  [在策略中指定权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)
  + [管理对 Amazon S3 资源的访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)