

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 生命週期組態元素
<a name="intro-lifecycle-rules"></a>

S3 生命週期組態包含生命週期規則，其中包含可描述 Amazon S3 在物件生命週期期間所採取動作的各種元素。每個 S3 儲存貯體可以指派一個生命週期組態，最多可包含 1,000 個規則。您可以將 Amazon S3 生命週期組態指定為 XML，在其中包含一或多項生命週期規則，每個規則都包含一個或多個元素。

```
<LifecycleConfiguration>
    <Rule>
         <Element>
    </Rule>
    <Rule>
         <Element>
         <Element>
    </Rule>
</LifecycleConfiguration>
```

每項規則皆包含下列各項：
+ 規則中繼資料，包含規則 ID 及指出規則是否啟用的狀態。當規則停用時，Amazon S3 不會執行規則中指定的任何動作。
+ 識別套用規則之物件的篩選條件。您可以使用物件大小、物件金鑰字首 (key prefix)、一個或多個物件標籤或篩選條件組合來指定篩選條件。
+ 當您想要 Amazon S3 執行指定的動作時，物件的生命週期中必須包含具有日期或時段的一或多個轉換或過期動作。

**Topics**
+ [ID 元素](#intro-lifecycle-rule-id)
+ [Status 元素](#intro-lifecycle-rule-status)
+ [Filter 元素](#intro-lifecycle-rules-filter)
+ [描述生命週期動作的元素](#intro-lifecycle-rules-actions)
+ [將篩選條件新增至生命週期規則](intro-lifecycle-filters.md)

下列各節描述 S3 生命週期組態中的 XML 元素。如需組態範例，請參閱 [S3 生命週期組態範例](lifecycle-configuration-examples.md)。

## ID 元素
<a name="intro-lifecycle-rule-id"></a>

生命週期組態是在儲存貯體層級設定，每個儲存貯體都有自己的生命週期組態。S3 生命週期組態的每個儲存貯體最多可有 1,000 項規則。此限制不可調整。`<ID>` 元素可唯一識別儲存貯體生命週期組態中的規則。ID 長度不得超過 255 個字元。

## Status 元素
<a name="intro-lifecycle-rule-status"></a>

`<Status>` 元素值可以是 `Enabled` 或 `Disabled`。當規則停用時，Amazon S3 不會執行規則中定義的任何動作。

## Filter 元素
<a name="intro-lifecycle-rules-filter"></a>

S3 生命週期規則可以根據規則中指定的 `<Filter>` 元素，套用到儲存貯體中的所有物件或部分物件。

您可以依金鑰字首 (key prefix)、物件標籤或兩者的組合來篩選物件 (在此情況下，Amazon S3 會使用邏輯 `AND` 來合併篩選條件)。如需篩選條件的範例和詳細資訊，請參閱[將篩選條件新增至生命週期規則](intro-lifecycle-filters.md)。
+ **使用金鑰字首指定篩選條件** – 此範例示範的 S3 生命週期規則，會依據金鑰名稱前綴 (`logs/`) 套用到部分物件。例如，生命週期規則會套用到物件 `logs/mylog.txt`、`logs/temp1.txt` 及 `logs/test.txt`。此規則不會套用到物件 `example.jpg`。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Prefix>logs/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
      ...
  </LifecycleConfiguration>
  ```

  若要依據不同的金鑰名稱字首，將生命週期動作套用到部分物件，請指定其他規則。請在每項規則中，指定使用字首的篩選條件。例如，若要描述金鑰字首為 `projectA/` 及 `projectB/` 之物件的生命週期動作，可以指定兩項規則，如下所示。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Prefix>projectA/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
  
      <Rule>
          <Filter>
             <Prefix>projectB/</Prefix>
          </Filter>
          transition/expiration actions
           ...
      </Rule>
  </LifecycleConfiguration>
  ```

  如需物件金鑰的詳細資訊，請參閱[命名 Amazon S3 物件](object-keys.md)。
+ **依據物件標籤指定篩選條件** – 在下列範例中，生命週期規則會依據標籤 (`key`) 與值 (`value`) 指定篩選條件。此規則只會套用到其中具有特定標籤的物件。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
             <Tag>
                <Key>key</Key>
                <Value>value</Value>
             </Tag>
          </Filter>
          transition/expiration actions
          ...
      </Rule>
  </LifecycleConfiguration>
  ```

  您可以依據多個標籤指定篩選條件。您必須將標籤包裝在 `<And>` 元素中，如下列範例所示。此規則會指示 Amazon S3 對具有這兩個標籤 (具有特定標籤金鑰與值) 的物件執行生命週期動作。

  ```
  <LifecycleConfiguration>
      <Rule>
        <Filter>
           <And>
              <Tag>
                 <Key>key1</Key>
                 <Value>value1</Value>
              </Tag>
              <Tag>
                 <Key>key2</Key>
                 <Value>value2</Value>
              </Tag>
               ...
            </And>
        </Filter>
        transition/expiration actions
      </Rule>
  </Lifecycle>
  ```

  此生命週期規則會套用到同時具有這兩個指定標籤的物件。Amazon S3 會執行邏輯 `AND`。注意下列事項：
  + 每個標籤都必須完全符合*金鑰與值*。如果您只指定一個 `<Key>` 元素，而且沒有 `<Value>` 元素，則規則將僅適用於符合標籤金鑰且*未*指定值的物件。
  + 此規則會套用至擁有規則中所有指定標籤的物件子集。如果物件指定了其他標籤，則仍會套用規則。
**注意**  
當您在篩選條件中指定多個標籤時，每個標籤金鑰只能指定一次。
+ **依據前綴及一或多個標籤指定篩選條件** – 您在生命週期規則中，依據金鑰前綴與一或多個標籤指定篩選條件。同樣地，這些篩選元素全都必須包裝在 `<And>` 元素中，如下所示。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
            <And>
               <Prefix>key-prefix</Prefix>
               <Tag>
                  <Key>key1</Key>
                  <Value>value1</Value>
               </Tag>
               <Tag>
                  <Key>key2</Key>
                  <Value>value2</Value>
               </Tag>
                ...
            </And>
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```

  Amazon S3 會使用邏輯 `AND` 合併這些篩選條件。亦即，此規則會套用到其中具有特定金鑰字首與特定標籤的物件子集。篩選條件只能有一個字首，以及零或多個標籤。
+ 您可以指定 **empty filter** (空的篩選條件)，讓規則套用到儲存貯體中的所有物件。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```
+ 若要依據 **object size** (物件大小) 篩選規則，您可以指定最小大小 (`ObjectSizeGreaterThan`) 或最大大小 (`ObjectSizeLessThan`)，或者您可以指定物件大小的範圍。

  物件大小值以位元組為單位。根據預設，小於 128 KB 的物件不會轉換為任何儲存類別，除非您指定較小的大小下陷 (`ObjectSizeGreaterThan`) 或大小上限 (`ObjectSizeLessThan`)。如需詳細資訊，請參閱[範例：允許轉換小於 128 KB 的物件](lifecycle-configuration-examples.md#lc-small-objects)。

  ```
                      <LifecycleConfiguration>
      <Rule>
          <Filter>
              <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>   
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```
**注意**  
`ObjectSizeGreaterThan` 和 `ObjectSizeLessThan` 篩選條件會排除指定的值。例如，如果您將大小為 128 KB 的物件設定為 1024 KB，以從 S3 Standard 儲存類別移至 S3 Standard-IA 儲存類別，則剛好為 1024 KB 和 128 KB 的物件將不會轉換為 S3 Standard-IA。反之，規則只會套用至大小大於 128 KB 且小於 1024 KB 的物件。

  如果您指定的是物件大小範圍，則 `ObjectSizeGreaterThan` 整數必須小於 `ObjectSizeLessThan` 值。使用多個篩選條件時，您必須將篩選條件包裝在 `<And>` 元素中。以下範例顯示如何指定 500 位元組到 64,000 個位元組範圍內的物件。

  ```
  <LifecycleConfiguration>
      <Rule>
          <Filter>
              <And>
                  <Prefix>key-prefix</Prefix>
                  <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>
                  <ObjectSizeLessThan>64000</ObjectSizeLessThan>
              </And>    
          </Filter>
          <Status>Enabled</Status>
          transition/expiration actions
      </Rule>
  </LifecycleConfiguration>
  ```

## 描述生命週期動作的元素
<a name="intro-lifecycle-rules-actions"></a>

您可以在 S3 生命週期規則中，指定一或多個下列預先定義的動作，指示 Amazon S3 在物件生命週期中執行特定動作。這些動作的效用取決於儲存貯體的版本控制狀態。
+ **`Transition` 動作元素** – 您可以指定 `Transition` 動作以轉換物件的儲存類別。如需轉換物件的詳細資訊，請參閱「[支援的轉換](lifecycle-transition-general-considerations.md#lifecycle-general-considerations-transition-sc)」。當物件生命週期的指定日期或時段一到，Amazon S3 便會執行轉換。

  對於使用版本控制的儲存貯體 (啟用了或暫停了版本控制的儲存貯體)，`Transition` 動作會套用至目前的物件版本。若要管理非最新的版本，Amazon S3 會定義 `NoncurrentVersionTransition` 動作 (如本主題稍後的內容所述)。
+ **`Expiration` 動作元素** - `Expiration` 動作會使規則中指定的物件過期，並套用至 Amazon S3 儲存類別中符合資格的物件。如需儲存體方案的詳細資訊，請參閱「[了解和管理 Amazon S3 儲存類別](storage-class-intro.md)」。Amazon S3 會使所有過期的物件無法使用。物件是否要永久移除，取決於儲存貯體的版本控制狀態。
  + **未使用版本控制的儲存貯體** – `Expiration` 動作會指示 Amazon S3 永久移除物件。
  + **使用版本控制的儲存貯體** - 對於使用版本控制的儲存貯體 (亦即，啟用了或暫停了版本控制功能的儲存貯體)，Amazon S3 在處理 `Expiration` 動作時，會考量幾項重點。對於已啟用版本控制或暫停版本控制的儲存貯體，適用下列情況：
    + `Expiration` 動作只會套用到目前的版本 (其對非目前的物件版本沒有影響)。
    + 當有一或多個物件版本，且刪除標記為目前的版本時，Amazon S3 不會採取任何動作。
    + 若目前的物件版本是唯一的物件版本，同時也是刪除標記 (亦稱為*過期物件刪除標記*，這會刪除所有的物件版本，只留下刪除標記)，Amazon S3 會移除過期物件刪除標記。您也可以使用過期動作，指示 Amazon S3 移除任何過期物件刪除標記。如需範例，請參閱 [移除已啟用版本控制之儲存貯體中的過期物件刪除標記](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7)。

    如需詳細資訊，請參閱[使用 S3 版本控制保留多個版本的物件](Versioning.md)。

    設定 Amazon S3 管理過期時也請考量以下事項：
    + **啟用版本控制的儲存貯體** 

      如果目前的物件版本不是刪除標記，則 Amazon S3 會新增具有唯一版本 ID 的刪除標記。如此會讓目前的版本成為非目前的版本，而刪除標記成為目前版本。
    + **暫停版本控制的儲存貯體** 

      在暫停版本控制的儲存貯體中，過期動作會導致 Amazon S3 建立刪除標記，並以 `null` 作為版本 ID。此刪除標記會以 null 版本 ID 取代版本階層中所有的物件版本。這是刪除物件最有效的方法。

此外，Amazon S3 提供下列動作讓您用於管理使用版本控制之儲存貯體 (即已啟用或已暫停版本控制的儲存貯體) 中非最新的物件版本。
+ **`NoncurrentVersionTransition` 動作元素** – 使用此動作可指定何時讓 Amazon S3 將物件轉換為指定的儲存類別。您可以根據物件變成非最新物件 (`<NoncurrentDays>`) 之後的特定天數確定此次轉移時間。除了天數之外，您也可以指定要保留的非目前版本 (`<NewerNoncurrentVersions>`) 數目上限 (介於 1 和 100 之間)。此值會決定必須有多少個較新的非目前版本，Amazon S3 才可轉移指定的版本。Amazon S3 會將任何超出指定數字的其他非最新版本轉換為保留。若要進行轉移，必須同時超過 `<NoncurrentDays>` **和** `<NewerNoncurrentVersions>` 值。

  若要指定要保留的非目前版本數目，您也必須提供 `<Filter>` 元素。如果您未指定 `<Filter>` 元素，當您指定要保留的非目前版本數量，Amazon S3 會產生 `InvalidRequest` 錯誤。

  如需轉換物件的詳細資訊，請參閱「[支援的轉換](lifecycle-transition-general-considerations.md#lifecycle-general-considerations-transition-sc)」。如需 Amazon S3 如何計算您在 `NoncurrentVersionTransition` 動作中指定天數之日期的詳細資訊，請參閱 [生命週期規則：依據物件的存在時間](#intro-lifecycle-rules-number-of-days)。
+ **`NoncurrentVersionExpiration` 動作元素** - 使用此動作可指示 Amazon S3 永久刪除非目前版本的物件。這些刪除的物件無法復原。您可以根據物件變成非最新物件 (`<NoncurrentDays>`) 之後的特定天數，確定此次過期時間。除了天數之外，您也可以指定要保留的非目前版本 (`<NewerNoncurrentVersions>`) 數目上限 (介於 1 和 100 之間)。此值會指定必須有多少個較新的非目前版本，Amazon S3 才會使指定的版本過期。Amazon S3 將永久刪除指定數字以外的任何其他非目前版本，以進行保留。若要進行刪除，必須同時超過 `<NoncurrentDays>` **和** `<NewerNoncurrentVersions>` 值。

  若要指定要保留的非目前版本數目，您也必須提供 `<Filter>` 元素。如果您未指定 `<Filter>` 元素，當您指定要保留的非目前版本數量，Amazon S3 會產生 `InvalidRequest` 錯誤。

  當您需要更正任何意外的刪除或覆寫時，延後移除非最新物件的方法十分實用。例如，您可以設定過期規則，在物件變成非目前的版本後五天再予刪除。舉例來說，假設您在 2014/1/1 上午 10:30 UTC 建立名為 `photo.gif` 的物件 (版本 ID 111111)。在 2014/1/2 上午 11:30 UTC，您不慎刪除了 `photo.gif` (版本 ID 111111)。這會建立具有新版本 ID 的刪除標記 (例如版本 ID 4857693)。現在在永久刪除之前，您有五天的時間可以復原原始版本的 `photo.gif` (版本 ID 111111)。過期生命週期規則會在 2014/1/8 00:00 UTC 執行，永久刪除 `photo.gif` (版本 ID 111111)，而當日就是該物件變成非目前之版本後的五天。

  如需 Amazon S3 如何計算您在 `NoncurrentVersionExpiration` 動作中指定天數之日期的詳細資訊，請參閱 [生命週期規則：依據物件的存在時間](#intro-lifecycle-rules-number-of-days)。
**注意**  
物件過期生命週期組態不會移除未完成的分段上傳。若要移除未完成的分段上傳，必須使用本節後文所述的 `AbortIncompleteMultipartUpload` 生命週期組態動作。

除了轉換與過期動作之外，您也可以使用下列生命週期組態動作，指示 Amazon S3 停止未完成的分段上傳，或移除過期的物件刪除標記。
+ **`AbortIncompleteMultipartUpload` 動作元素** – 使用此元素可設定分段上傳持續執行的時間上限 (天)。若適用的分段上傳 (由生命週期規則中指定的金鑰名稱 `prefix` 決定) 未在預先定義的時段內成功完成，Amazon S3 會停止未完成的分段上傳。如需詳細資訊，請參閱[中止分段上傳](abort-mpu.md)。
**注意**  
您無法在具有使用物件標籤之篩選條件的規則中指定此生命週期動作。
+ **`ExpiredObjectDeleteMarker` 動作元素** – 在啟用了版本控制的儲存貯體中，非最新版本為零的刪除標記，稱為*過期物件刪除標記*。您可以使用此生命週期動作，指示 Amazon S3 移除過期物件刪除標記。如需範例，請參閱 [移除已啟用版本控制之儲存貯體中的過期物件刪除標記](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7)。
**注意**  
您無法在具有使用物件標籤之篩選條件的規則中指定此生命週期動作。

### Amazon S3 如何計算物件變成非最新版本的時間
<a name="non-current-days-calculations"></a>

在啟用版本控制的儲存貯體中，同一個物件可能會有多個版本。永遠只有一個最新版本，以及零或多個非最新版本。當您每次上傳物件時，目前的版本都會保留為非目前的版本，而新增的版本 (即後來項目) 則會變成目前的版本。為判斷物件成為非最新版本的天數，Amazon S3 會查看後來項目的建立時間。Amazon S3 會使用其後來項目建立時間開始起算後的天數，計算物件變成非最新的天數。

**在使用 S3 生命週期組態時還原物件的舊版本**  
如 [還原舊版本](RestoringPreviousVersions.md) 所詳述，您可以使用下列兩種方法之一來擷取物件的舊版本：  
**方法 1 - 將物件非目前的版本複製到相同儲存貯體。**複製的物件會變成該物件目前的版本，並保留所有的物件版本。
**方法 2 - 永久刪除物件目前的版本。**當您在刪除目前的物件版本時，實際上是將非目前的版本轉換成該物件目前的版本。
在使用已啟用版本控制之儲存貯體的 S3 生命週期組態規則時，建議使用方法 1 作為最佳實務。  
S3 生命週期在最終一致的模式下運作。除非變更為向所有 Amazon S3 系統傳播，否則您永久刪除的最新版本並不會消失。(因此，Amazon S3 可能暫時不知道此刪除操作。) 同時，您設定要讓非最新物件過期的生命週期規則，可能會永久移除非最新物件，其中也包括了您想要還原的非最新物件。因此，如方法 1 所建議複製舊版本，是比較安全的替代方法。

### 生命週期動作與儲存貯體版本控制的狀態
<a name="lifecycle-actions-bucket-versioning-state"></a>

下表依據包含物件儲存貯體版本控制的狀態，摘要說明 S3 生命週期組態規則動作對物件的行為。


| Action | 非版本控制化儲存貯體 (未啟用版本控制) | 啟用版本控制的儲存貯體 | 暫停版本控制的儲存貯體 | 
| --- | --- | --- | --- | 
|  `Transition` 當達到物件生命週期中指定的日期或時段時。  | Amazon S3 會將物件轉換到指定的儲存類別。 | Amazon S3 會將物件的目前版本轉換到指定的儲存類別。 | 行為與啟用了版本控制的儲存貯體相同。 | 
|  `Expiration` 當達到物件生命週期中指定的日期或時段時。  | Expiration 動作會刪除物件，而且無法復原已刪除的物件。 | 若目前的版本不是刪除標記，Amazon S3 會建立刪除標記，使其成為最新版本，而現有最新版本會保留為非最新版本。 | 生命週期動作會建立刪除標記，並以 null 為其版本 ID，而此刪除標記為成為目前的版本。若物件目前版本的版本 ID 為 null，Expiration 動作會永久刪除此版本。否則會將目前的版本保留為非目前版本。 | 
|  `NoncurrentVersionTransition` 對於已啟用版本控制或已暫停版本控制的儲存貯體中的非目前版本，當物件變為非目前版本後的天數超過規則中**物件成為非目前版本後的天數** (`<NoncurrentDays>`) 下指定的值，**以及**版本數超過規則中**要保留的較新版本數量** (`<NewerNoncurrentVersions>`) 下指定的值時，S3 生命週期數會轉移該物件。  | NoncurrentVersionTransition 沒有作用。 |  Amazon S3 會將非最新的物件版本轉換到指定的儲存類別。  | 行為與啟用了版本控制的儲存貯體相同。 | 
|  `NoncurrentVersionExpiration` 對於已啟用版本控制或已暫停版本控制的儲存貯體中的非目前版本，當物件變為非目前版本後的天數超過規則中**物件成為非目前版本後的天數** (`<NoncurrentDays>`) 下指定的值，**以及**版本數超過規則中**要保留的較新版本數量** (`<NewerNoncurrentVersions>`) 下指定的值時，S3 生命週期數會使該物件過期。  | NoncurrentVersionExpiration 沒有作用。 | NoncurrentVersionExpiration 動作會永久刪除物件的非目前版本，而且無法復原已刪除的物件。 | 行為與啟用了版本控制的儲存貯體相同。 | 

### 生命週期規則：依據物件的存在時間
<a name="intro-lifecycle-rules-number-of-days"></a>

您可以指定自建立 (或修改) 物件之後，Amazon S3 可以開始採取特定動作的期間 (以天數計算)。

當您在 S3 生命週期組態的 `Transition` 與 `Expiration` 動作中指定天數時，請注意下列事項：
+ 您指定的值是自物件建立之後，可以開始採取動作的天數。
+ Amazon S3 計算時間的方式，是將規則中指定的天數與物件建立時間相加，再將得出的時間四捨五入為次日的午夜 UTC。例如，若物件的建立時間是 2014/1/15 上午 10:30 UTC，而您在轉換規則中指定 3 天，則計算後得到的物件轉換日期會是 2014/1/19 00:00 UTC。

**注意**  
Amazon S3 只會維護每個物件的上次修改日期。例如，Amazon S3 主控台會在物件的**屬性**窗格中顯示**上次修改**日期。當您一開始建立新的物件時，此日期會反映物件的建立日期。當您取代此物件之後，其日期也會隨之變更。因此，建立日期與**上次修改**日期同義。

當在生命週期組態的 `NoncurrentVersionTransition` 與 `NoncurrentVersionExpiration` 動作中指定天數時，請注意下列事項：
+ 您指定的值是物件版本變為非最新版本 (亦即物件被覆寫或刪除) 之後，Amazon S3 將對一或多個指定物件採取動作的天數。
+ Amazon S3 計算時間的方式，是將規則中指定的天數與物件後來版本的建立時間相加，再將得出的時間四捨五入為次日的午夜 UTC。例如，在您的儲存貯體中，會假設您擁有在 2014 年 1 月 1 日上午 10:30 UTC 所建立的物件目前版本。若取代目前物件版本的新版本是在 2014 年 1 月 15 日上午 10:30 UTC 建立的，而您在轉換規則中指定 3 天，則計算後得到的物件轉換日期會是 2014/1/19 00:00 UTC。

### 生命週期規則：依據特定日期
<a name="intro-lifecycle-rules-date"></a>

在 S3 生命週期規則中指定動作時，可以指定 Amazon S3 採取動作的日期。當達到指定的日期時，Amazon S3 會將該動作套用到所有符合條件的物件 (依據篩選條件)。

若使用過去的日期指定 S3 生命週期動作，則所有符合條件的物件都會立即變成可以執行該生命週期動作。

**重要**  
日期型動作不是單次動作。只要規則狀態為 `Enabled`，Amazon S3 就會繼續套用日期型動作，即使為過去的日期亦是如此。  
例如，假設您指定日期型 `Expiration` 動作來刪除所有的物件 (假設規則中未指定任何篩選條件)。當指定日期一到，Amazon S3 便會使儲存貯體中所有的物件過期。Amazon S3 之後仍會繼續使您在儲存貯體中建立的任何新物件過期。若要停止生命週期動作，必須從生命週期規則中移除動作、停用規則，或從生命週期組態中刪除規則。

日期值必須符合 ISO 8601 格式。時間一律是午夜 UTC。

**注意**  
您無法使用 Amazon S3 主控台建立日期型生命週期規則，但可以檢視、停用或刪除這類規則。