

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

# 在 Amazon ECR 中使用生命週期政策來自動化映像的清除
<a name="LifecyclePolicies"></a>

Amazon ECR 生命週期政策提供對私有儲存庫中映像的生命週期管理的更多控制。生命週期政策包含一或多個規則，每個規則都會定義 Amazon ECR 的動作。根據生命週期政策中的過期條件，可以根據生命週期政策中指定的條件在 24 小時內封存或過期映像。當 Amazon ECR 根據生命週期政策執行動作時，此動作會擷取為 中的事件 AWS CloudTrail。如需詳細資訊，請參閱[使用 記錄 Amazon ECR 動作 AWS CloudTrail](logging-using-cloudtrail.md)。

## 生命週期政策如何運作
<a name="lifecycle-policy-howitworks"></a>

生命週期政策由一或多個規則組成，用以決定儲存庫中的映像過期與否。在考慮使用生命週期政策時，請務必使用生命週期政策預覽來確認生命週期政策到期的映像，然後再將其套用至儲存庫。將生命週期政策套用至儲存庫後，您可預期映像將在符合到期條件後的 24 小時內過期。當 Amazon ECR 依據生命週期政策執行動作時，在 AWS CloudTrail中會將此動作視為事件。如需詳細資訊，請參閱[使用 記錄 Amazon ECR 動作 AWS CloudTrail](logging-using-cloudtrail.md)。

以下圖表顯示生命週期政策工作流程。

![\[顯示生命週期政策評估和應用程序的圖表。\]](http://docs.aws.amazon.com/zh_tw/AmazonECR/latest/userguide/images/lifecycle-policy.png)


1. 建立一或多個測試規則。

1. 儲存測試規則並執行預覽。

1. 生命週期政策評估工具會檢視所有規則，並標記每個規則會影響的映像。

1. 然後，生命週期政策評估器會根據規則優先順序套用規則，並顯示儲存庫中哪些映像設定為過期或封存。規則優先順序數字越低表示優先順序越高。例如，優先順序為 1 的規則優先於優先順序為 2 的規則。

1. 檢閱測試結果，確保標記為過期或封存的映像符合您預期。

1. 套用測試規則作為儲存庫的生命週期政策。

1. 建立生命週期政策後，您應該預期映像會在符合過期條件後的 24 小時內過期或封存。

### 生命週期政策評估規則
<a name="lp_evaluation_rules"></a>

生命週期政策評估工具負責剖析生命週期政策的純文字 JSON、評估所有規則，然後根據規則優先順序套用這些規則至儲存庫中的映像。以下詳細說明生命週期政策評估工具的邏輯。如需範例，請參閱 [Amazon ECR 中的生命週期政策範例](lifecycle_policy_examples.md)。
+ 當儲存庫中有參考成品時，Amazon ECR 生命週期政策會在刪除或封存主體映像的 24 小時內自動過期或封存這些成品。
+ 不論規則優先順序，都會同時評估所有規則。評估所有規則之後，就會根據規則優先順序進行套用。
+ 映像已過期或僅由一或零個規則封存。
+ 符合規則標記需求的映像，無法由優先順序較低的規則過期或封存。
+ 規則永遠無法標記由較高優先順序規則標記的影像，但仍可以將其識別為尚未過期或封存。
+ 選取特定儲存類別的所有規則集必須包含一組唯一的字首。
+ 只允許選取一個特定儲存類別的規則來選取未標記的影像。
+ 如果資訊清單清單參考影像，則必須先刪除或封存資訊清單清單，才能過期或封存該影像。
+ 過期一律由 `pushed_at_time`或 排序，`transitioned_at_time`並一律在較新的映像之前過期。如果影像已封存，然後在過去的任何時間點還原，`last_activated_at`則會使用影像的 而非 `pushed_at_time`。
+ 生命週期政策規則可指定 `tagPatternList` 或 `tagPrefixList`，但不能同時指定兩者。不過，生命週期策略可包含多項規則，不同規則可同時使用模式和字首清單。如果 `tagPatternList`或 `tagPrefixList`值中的所有標籤都與任何影像的標籤相符，則會成功比對影像。
+ 唯有當 `tagStatus` 是 `tagged` 時，才能使用 `tagPatternList` 或 `tagPrefixList` 參數。
+ 使用 `tagPatternList` 時，如果映像與萬用字元篩選條件相符，便會成功配對映像。例如，如果`prod*`套用篩選條件，它會比對名稱開頭為 的影像標籤`prod1`，`prod`例如 `prod`、 或 `production-team1`。同樣地，如果`*prod*`套用篩選條件，則會比對名稱包含 `repo-production`或 `prod`的影像標籤`prod-team`。
**重要**  
每個字串最多可有 4 個萬用字元 (`*`)，例如 `["*test*1*2*3", "test*1*2*3*"]` 是有效字串，但 `["test*1*2*3*4*5*6"]` 則為無效。
+ 使用 時`tagPrefixList`，如果`tagPrefixList`值中的所有******萬用字元篩選條件都符合任何影像的標籤，則映像會成功比對。
+ `countUnit` 參數僅在 `countType`為 `sinceImagePushed`、 `sinceImagePulled`或 時使用`sinceImageTransitioned`。
+ 使用 時`countType = imageCountMoreThan`，影像會根據 來從最小到最舊排序，`pushed_at_time`然後所有大於指定計數的影像都會過期或封存。
+ 使用 `countType = sinceImagePushed`時，其 `pushed_at_time` 早於根據 指定天數的所有映像`countNumber`都會過期或封存。
+ 使用 `countType = sinceImagePulled`時，`countNumber`會封存其 `last_recorded_pulltime` 早於根據 指定天數的所有映像。如果從未提取影像，`pushed_at_time`則會使用影像的 而非 `last_recorded_pulltime`。如果影像已封存，然後在過去的任何時間點還原，但自影像還原以來從未提取，`last_activated_at`則會使用影像的 ，而非 `last_recorded_pulltime`。
+ 使用 `countType = sinceImageTransitioned`時，所有`last_archived_at`早於 所指定天數的封存映像`countNumber`都會過期。
+ 過期一律由 排序，`pushed_at_time`並在較新的映像之前一律過期。

# 在 Amazon ECR 中建立生命週期政策預覽
<a name="lpp_creation"></a>

您可以使用生命週期政策預覽來查看生命週期政策對映像儲存庫的影響，然後再套用它。在將生命週期政策套用至儲存庫之前，將預覽視為最佳實務。

**注意**  
如果您使用 Amazon ECR 複寫跨不同區域或帳戶複製儲存庫，請注意，生命週期政策只能對建立儲存庫所在區域中的儲存庫採取動作。因此，如果您已開啟複寫功能，您可能需要考慮在複寫儲存庫的每個區域和帳戶中建立生命週期政策。

**建立生命週期政策預覽 (AWS 管理主控台)**

1. 在 [https://console.aws.amazon.com/ecr/repositories](https://console.aws.amazon.com/ecr/repositories) 開啟 Amazon ECR 主控台。

1. 從導覽列上，選擇其中包含要執行生命週期政策預覽的儲存庫之區域。

1. 在導覽窗格中，依序選擇**私有登錄檔**和**儲存庫**。

1. 在**私有儲存庫**頁面中選取儲存庫，然後使用**動作**下拉式清單選擇**生命週期政策**。

1. 在儲存庫的生命週期政策規則頁面中，依序選擇**編輯測試規則**和**建立規則**。

1. 為每個生命週期政策測試規則輸入下列詳細資訊。

   1. 在 **Rule priority (規則優先順序)** 中，輸入規則優先順序的編號。規則優先順序會決定生命週期政策規則的套用順序。數字越小表示優先順序越高。例如，優先順序為 1 的規則優先於優先順序為 2 的規則。

   1. 在 **Rule description (規則描述)** 中，輸入生命週期政策規則的描述。

   1. 針對**映像狀態**，請選擇**已標記 (萬用字元比對)**、**已標記 (前綴比對)**、**未標記**或**任何**。
**重要**  
若您指定多個標籤，只會選擇含有所有指定標籤的映像。

   1. 如果您在**映像狀態**選擇**已標記 (萬用字元比對)**，可針對**指定萬用字元比對標籤**指定含萬用字元 (**\$1**) 的映像標籤清單，以透過生命週期政策對其執行動作。例如，若您的映像已標記為 `prod`、`prod1`、`prod2` 等等，您可能需要指定 `prod*` 對所有映像執行動作。若您指定多個標籤，只會選擇含有所有指定標籤的映像。
**重要**  
每個字串最多可有 4 個萬用字元 (`*`)，例如 `["*test*1*2*3", "test*1*2*3*"]` 是有效字串，但 `["test*1*2*3*4*5*6"]` 則為無效。

   1. 如果您在**映像狀態**選擇**已標記 (前綴比對)**，則可針對**指定前綴比對標籤**指定映像標籤清單，以透過生命週期政策對其執行動作。

   1. 針對**相符條件**，選擇自**影像建立以來的天數**、**自上次記錄提取時間以來的天數**、自**影像封存以來的天數**或**影像計數**，然後指定值。

   1. 針對**規則動作**，選擇**過期**或**封存**。

   1. 選擇**儲存**。

1. 重複操作步驟 5-7 來建立其他測試生命週期政策規則。

1. 若要執行生命週期政策預覽，請選擇 **Save and run test (儲存並執行測試)**。

1. 在 **Image matches for test lifecycle rules (測試生命週期規則的映像符合數)** 下，檢視您的生命週期政策預覽影響。

1. 若您對預覽結果感到滿意，請選擇 **Apply as lifecycle policy** (套用為生命週期政策) 來使用指定規則建立生命週期政策。您應該預期套用生命週期政策後，受影響的映像會在 24 小時內過期或封存。

1. 如果對預覽結果不滿意，您可以刪除一或多個測試生命週期規則，再建立一或多個規則加以取代，然後重複測試。

# 在 Amazon ECR 中為儲存庫建立生命週期政策
<a name="lp_creation"></a>

 使用生命週期政策來建立一組過期或封存未使用儲存庫映像的規則。建立生命週期政策後，受影響的映像會在 24 小時內過期或封存。

**注意**  
如果您使用 Amazon ECR 複寫跨不同區域或帳戶複製儲存庫，請注意，生命週期政策只能對建立儲存庫所在區域中的儲存庫採取動作。因此，如果您已開啟複寫功能，您可能需要考慮在複寫儲存庫的每個區域和帳戶中建立生命週期政策。

## 先決條件
<a name="lp-creation-prerequisite"></a>

**最佳實務：**建立生命週期政策預覽，以確認生命週期政策規則已過期或封存的映像是您想要的。如需說明，請參閱[在 Amazon ECR 中建立生命週期政策預覽](lpp_creation.md)。

## 建立生命週期政策 (AWS 管理主控台)
<a name="lp-creation-console"></a>

1. 在 [https://console.aws.amazon.com/ecr/repositories](https://console.aws.amazon.com/ecr/repositories) 開啟 Amazon ECR 主控台。

1. 從導覽列上，選擇其中包含要建立生命週期政策的儲存庫之區域。

1. 在導覽窗格中，依序選擇**私有登錄檔**和**儲存庫**。

1. 在**私有儲存庫**頁面中選取儲存庫，然後使用**動作**下拉式清單選擇**生命週期政策**。

1. 在儲存庫生命週期政策頁面中，選擇**建立規則**。

1. 為您的生命週期政策規則輸入下列詳細資訊。

   1. 在 **Rule priority (規則優先順序)** 中，輸入規則優先順序的編號。規則優先順序會決定生命週期政策規則的套用順序。規則優先順序數字越低表示優先順序越高。例如，優先順序為 1 的規則優先於優先順序為 2 的規則。

   1. 在 **Rule description (規則描述)** 中，輸入生命週期政策規則的描述。

   1. 針對**映像狀態**，請選擇**已標記 (萬用字元比對)**、**已標記 (前綴比對)**、**未標記**或**任何**。
**重要**  
若您指定多個標籤，只會選擇含有所有指定標籤的映像。

   1. 如果您在**映像狀態**選擇**已標記 (萬用字元比對)**，可針對**指定萬用字元比對標籤**指定含萬用字元 (**\$1**) 的映像標籤清單，以透過生命週期政策對其執行動作。例如，若您的映像已標記為 `prod`、`prod1`、`prod2` 等等，您可能需要指定 `prod*` 對所有映像執行動作。若您指定多個標籤，只會選擇含有所有指定標籤的映像。
**重要**  
每個字串最多可有 4 個萬用字元 (`*`)，例如 `["*test*1*2*3", "test*1*2*3*"]` 是有效字串，但 `["test*1*2*3*4*5*6"]` 則為無效。

   1. 如果您在**映像狀態**選擇**已標記 (前綴比對)**，則可針對**指定前綴比對標籤**指定映像標籤清單，以透過生命週期政策對其執行動作。

   1. 針對**相符條件**，選擇**影像建立後天數**、**上次記錄提取時間後天數**、**影像封存後天數**或**影像計數**，然後指定值。

   1. 針對**規則動作**，選擇**過期**或**封存**。

   1. 選擇**儲存**。

1. 重複操作步驟 5-7 來建立其他生命週期政策規則。

## 建立生命週期政策 (AWS CLI)
<a name="lp-creation-cli"></a>

1. 取得要建立生命週期政策的儲存庫名稱。

   ```
   aws ecr describe-repositories
   ```

1. 建立名為 `policy.json` 的本機檔案使用生命週期政策的內容。如需生命週期政策範例，請參閱「[Amazon ECR 中的生命週期政策範例](lifecycle_policy_examples.md)」。

1. 透過指定儲存庫名稱並參考您建立的生命週期政策 JSON 檔案來建立生命週期政策。

   ```
   aws ecr put-lifecycle-policy \
         --repository-name repository-name \
         --lifecycle-policy-text file://policy.json
   ```

# Amazon ECR 中的生命週期政策範例
<a name="lifecycle_policy_examples"></a>

以下是顯示語法的生命週期政策範例。

若要查看政策屬性的詳細資訊，請參閱 [Amazon ECR 中的生命週期政策屬性](lifecycle_policy_parameters.md)。如需使用 建立生命週期政策的說明 AWS CLI，請參閱 [建立生命週期政策 (AWS CLI)](lp_creation.md#lp-creation-cli)。

## 生命週期政策範本
<a name="lifecycle_policy_syntax"></a>

在與儲存庫建立關聯之前，會評估生命週期政策的內容。以下是生命週期政策的 JSON 語法範本。

```
{
        "rules": [
            {
                "rulePriority": integer,
                "description": "string",
                "selection": {
                    "tagStatus": "tagged"|"untagged"|"any",
                    "tagPatternList": list<string>,
                    "tagPrefixList": list<string>,
                    "storageClass": "standard"|"archive",
                    "countType": "imageCountMoreThan"|"sinceImagePushed"|"sinceImagePulled"|"sinceImageTransitioned",
                    "countUnit": "string",
                    "countNumber": integer
                },
                "action": {
                    "type": "expire"|"transition",
                    "targetStorageClass": "archive"
                }
            }
        ]
    }
```

## 篩選映像存在時間
<a name="lifecycle_policy_example_age"></a>

以下範例顯示政策的生命週期政策語法，該政策能尋找以 `prod` 標籤開頭的映像，使用 `prod*` 的`tagPatternList`，將存在時間同樣超過 `14` 天的映像設為過期。

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Expire images older than 14 days",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["prod*"],
                "countType": "sinceImagePushed",
                "countUnit": "days",
                "countNumber": 14
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

## 篩選上次提取的時間
<a name="lifecycle_policy_example_last_pulled"></a>

下列範例顯示政策的生命週期政策語法，該政策會將映像轉換為未在`90`幾天內提取的封存儲存。

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Archive images not pulled in 90 days",
            "selection": {
                "tagStatus": "any",
                "countType": "sinceImagePulled",
                "countUnit": "days",
                "countNumber": 90
            },
            "action": {
                "type": "transition",
                "targetStorageClass": "archive"
            }
        }
    ]
}
```

**重要**  
`sinceImagePulled` 計數類型必須與 `transition`動作搭配使用。它無法與 `expire`動作搭配使用。若要根據提取活動刪除映像，請先將其轉換為使用 封存儲存體`sinceImagePulled`，然後使用 `sinceImageTransitioned`搭配 `expire`動作來刪除它們。在刪除之前，映像必須位於封存儲存中至少 90 天。

## 篩選封存轉換時間
<a name="lifecycle_policy_example_transitioned"></a>

下列範例顯示政策的生命週期政策語法，該政策會將封存儲存超過 `365` 天的封存映像過期。

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Expire images archived for more than 365 days",
            "selection": {
                "tagStatus": "any",
                "storageClass": "archive",
                "countType": "sinceImageTransitioned",
                "countUnit": "days",
                "countNumber": 365
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

**重要**  
`sinceImageTransitioned` 計數類型必須與 `expire`動作和 `archive`儲存體方案搭配使用。在刪除之前，映像必須位於封存儲存中至少 90 天。

## 篩選映像計數
<a name="lifecycle_policy_example_number"></a>

以下範例顯示政策的生命週期政策語法，該政策能只保留一個未標記的映像，並將其他所有映像設為過期。

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Keep only one untagged image, expire all others",
            "selection": {
                "tagStatus": "untagged",
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

## 篩選多個規則
<a name="lp_example_multiple"></a>

以下是在生命週期政策中使用多個規則的範例。範例儲存庫與指定的生命週期政策與結果說明同時提供。

### 範例 A
<a name="lp_example_multiple_a"></a>

儲存庫內容：
+ Image A, Taglist: ["beta-1", "prod-1"], Pushed: 10 days ago
+ Image B, Taglist: ["beta-2", "prod-2"], Pushed: 9 days ago
+ Image C, Taglist: ["beta-3"], Pushed: 8 days ago

生命週期政策文字：

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["prod*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        },
        {
            "rulePriority": 2,
            "description": "Rule 2",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["beta*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出含有前綴 `prod` 標記的映像。將會從最舊的映像開始標記，直到沒有或剩餘很少符合的映像。標記映像 A 為過期。
+ 規則 2 找出含有前綴 `beta` 標記的映像。將會從最舊的映像開始標記，直到沒有或剩餘很少符合的映像。標記映像 A 與映像 B 為過期。但是，映像 A 已被規則 1 看到，而若映像 B 已過期，則會因違反規則 1 而被略過。
+ 結果：映像 A 已過期。

### 範例：B
<a name="lp_example_multiple_b"></a>

這是與前一個範例相同的儲存庫，但是規則優先順序已變更以說明結果。

儲存庫內容：
+ Image A, Taglist: ["beta-1", "prod-1"], Pushed: 10 days ago
+ Image B, Taglist: ["beta-2", "prod-2"], Pushed: 9 days ago
+ Image C, Taglist: ["beta-3"], Pushed: 8 days ago

生命週期政策文字：

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["beta*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        },
        {
            "rulePriority": 2,
            "description": "Rule 2",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["prod*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出含有前綴 `beta` 標記的映像。將會從最舊的映像開始標記，直到沒有或剩餘很少符合的映像。將看到所有三個映像並標記映像 A 與映像 B 為過期。
+ 規則 2 找出含有前綴 `prod` 標記的映像。將會從最舊的映像開始標記，直到沒有或剩餘很少符合的映像。將不會看到映像，因所有可用映像已被規則 1 看到，因此將不會標記其他映像。
+ 結果：映像 A 與 B 皆已過期。

## 篩選單一規則中的多個標籤
<a name="lp_example_difftype"></a>

以下範例說明在單一規則中採用多標籤模式的生命週期政策語法。範例儲存庫與指定的生命週期政策與結果說明同時提供。

### 範例 A
<a name="lp_example_difftype_a"></a>

當單一規則指定多個標籤模式，映像必須符合所有列出的標籤模式。

儲存庫內容：
+ Image A, Taglist: ["alpha-1"], Pushed: 12 days ago
+ Image B, Taglist: ["beta-1"], Pushed: 11 days ago
+ Image C, Taglist: ["alpha-2", "beta-2"], Pushed: 10 days ago
+ Image D, Taglist: ["alpha-3"], Pushed: 4 days ago
+ Image E, Taglist: ["beta-3"], Pushed: 3 days ago
+ Image F, Taglist: ["alpha-4", "beta-4"], Pushed: 2 days ago

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["alpha*", "beta*"],
                "countType": "sinceImagePushed",
                "countNumber": 5,
                "countUnit": "days"
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出含有前綴 `alpha` 和 `beta` 標籤的映像。看到映像 C 與 F。應標記存在時間大於五天的映像，應是映像 C。
+ 結果：映像 C 已過期。

### 範例：B
<a name="lp_example_difftype_b"></a>

下列範例說明非專屬的標籤。

儲存庫內容：
+ Image A, Taglist: ["alpha-1", "beta-1", "gamma-1"], Pushed: 10 days ago
+ Image B, Taglist: ["alpha-2", "beta-2"], Pushed: 9 days ago
+ Image C, Taglist: ["alpha-3", "beta-3", "gamma-2"], Pushed: 8 days ago

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["alpha*", "beta*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出含有前綴 `alpha` 和 `beta` 標籤的映像。看到所有映像。將會從最舊的映像開始標記，直到沒有或剩餘很少符合的映像。標記映像 A 與 B 為過期。
+ 結果：映像 A 與 B 皆已過期。

## 篩選所有映像
<a name="lp_example_allimages"></a>

以下生命週期政策範例說明含有不同篩選條件的映像。範例儲存庫與指定的生命週期政策與結果說明同時提供。

### 範例 A
<a name="lp_example_difftype_a"></a>

下列顯示套用到所有規則的政策之生命週期政策語法，但是只保留一個映像並將其他所有映像設為過期。

儲存庫內容：
+ Image A, Taglist: ["alpha-1"], Pushed: 4 days ago
+ Image B, Taglist: ["beta-1"], Pushed: 3 days ago
+ Image C, Taglist: [], Pushed: 2 days ago
+ Image D, Taglist: ["alpha-2"], Pushed: 1 day ago

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "any",
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出所有映像。會看到映像 A、B、C 與 D。除了最新映像外，應將所有映像設為過期。標記映像 A、B、C 為過期。
+ 結果：映像 A、B 與 C 皆已過期。

### 範例：B
<a name="lp_example_difftype_b"></a>

以下範例說明在單一規則中整合所有規則類型的生命週期政策。

儲存庫內容：
+ Image A, Taglist: ["alpha-", "beta-1", "-1"], Pushed: 4 days ago
+ Image B, Taglist: [], Pushed: 3 days ago
+ Image C, Taglist: ["alpha-2"], Pushed: 2 days ago
+ Image D, Taglist: ["git hash"], Pushed: 1 day ago
+ Image E, Taglist: [], Pushed: 1 day ago

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Rule 1",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["alpha*"],
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        },
        {
            "rulePriority": 2,
            "description": "Rule 2",
            "selection": {
                "tagStatus": "untagged",
                "countType": "sinceImagePushed",
                "countUnit": "days",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        },
        {
            "rulePriority": 3,
            "description": "Rule 3",
            "selection": {
                "tagStatus": "any",
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

生命週期政策的邏輯會是：
+ 規則 1 找出含有前綴 `alpha` 標記的映像。找出映像 A 與映像 C。應保留最新映像並將其他標記為過期。標記映像 A 為過期。
+ 規則 2 找出未標記的映像。找出映像 B 與映像 E。應標記所有超過一天的映像為過期。標記映像 B 為過期。
+ 規則 3 找出所有映像。找出映像 A、B、C、D 與 E。應保留最新映像並將其他標記為過期。但是，無法標記映像 A、B、C 或 E，因為會以較高的優先順序規則來找出它們。標記映像 D 為過期。
+ 結果：映像 A、B 與 D 皆已過期。

## 存檔範例
<a name="lp_example_archive"></a>

下列範例顯示存檔映像而非刪除映像的生命週期政策。

### 封存超過指定天數的影像
<a name="lp_example_archive_age"></a>

下列範例顯示生命週期政策，以超過 `prod`30 天的標籤封存映像：

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Archive production images older than 30 days",
            "selection": {
                "tagStatus": "tagged",
                "tagPatternList": ["prod*"],
                "countType": "sinceImagePushed",
                "countUnit": "days",
                "countNumber": 30
            },
            "action": {
                "type": "transition",
                "targetStorageClass": "archive"
            }
        }
    ]
}
```

### 封存未在指定的天數內提取的映像
<a name="lp_example_archive_pull"></a>

下列範例顯示生命週期政策，該政策會封存 90 天內尚未提取的影像：

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Archive images not pulled in 90 days",
            "selection": {
                "tagStatus": "any",
                "countType": "sinceImagePulled",
                "countUnit": "days",
                "countNumber": 90
            },
            "action": {
                "type": "transition",
                "targetStorageClass": "archive"
            }
        }
    ]
}
```

### 合併封存和過期規則
<a name="lp_example_archive_delete"></a>

下列範例顯示的生命週期政策會封存超過 30 天的映像，然後永久過期已封存超過 365 天的映像：

**注意**  
封存映像的最短儲存期間為 90 天。您無法設定生命週期政策來刪除已存檔不到 90 天的映像。如果您必須刪除已封存不到 90 天的映像，則需要使用 **batch-delete-image** API，但需支付 90 天最低儲存持續時間的費用。

```
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Archive images older than 30 days",
            "selection": {
                "tagStatus": "any",
                "countType": "sinceImagePushed",
                "countUnit": "days",
                "countNumber": 30
            },
            "action": {
                "type": "transition",
                "targetStorageClass": "archive"
            }
        },
        {
            "rulePriority": 2,
            "description": "Expire images archived for more than 365 days",
            "selection": {
                "tagStatus": "any",
                "storageClass": "archive",
                "countType": "sinceImageTransitioned",
                "countUnit": "days",
                "countNumber": 365
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
```

# Amazon ECR 中的生命週期政策屬性
<a name="lifecycle_policy_parameters"></a>

生命週期政策具有下列屬性。

若要查看生命週期政策的範例，請參閱 [Amazon ECR 中的生命週期政策範例](lifecycle_policy_examples.md)。如需使用 建立生命週期政策的說明 AWS CLI，請參閱 [建立生命週期政策 (AWS CLI)](lp_creation.md#lp-creation-cli)。

## 規則優先順序
<a name="lp_rule_priority"></a>

`rulePriority`  
類型：整數  
必要：是  
設定套用的規則之順序，從最低值到最高值。首先`1`套用優先順序為 的生命週期政策規則，接著套用優先順序`2`為 的規則，以此類推。當您新增規則到生命週期政策時，必須指定唯一的 `rulePriority` 值。政策中的值不需要跨規則循序。擁有 `any` 的 `tagStatus` 值必須有 `rulePriority` 的最高值與最後評估的值。

## Description
<a name="lp_description"></a>

`description`  
類型：字串  
必要：否  
(選用) 說明生命週期政策中的規則用途。

## 標籤狀態
<a name="lp_tag_status"></a>

`tagStatus`  
類型：字串  
必要：是  
決定您新增的生命週期政策規則是否為映像指定標籤。可接受選項為 `tagged`、`untagged`、或 `any`。若您指定 `any`，所有映像都對規則進行評估。如果您指定 `tagged`，則還必須指定 `tagPrefixList`值或 `tagPatternList`值。如果您指定 `untagged`，則必須同時省略 `tagPrefixList`和 `tagPatternList`。

## 標籤模式清單
<a name="lp_tag_pattern_list"></a>

`tagPatternList`  
類型：list[string]  
必填：是，如果 `tagStatus` 設為已標記且未指定 `tagPrefixList`  
為已標記的映像建立生命週期政策時，最佳做法是使用 `tagPatternList` 來指定預計會過期的標籤。您必須指定以逗號分隔的映像標籤模式清單，其中可能包含萬用字元 (`*`)，以便您透過生命週期政策執行動作。例如，若您的映像標記為 `prod`、`prod1`、`prod2` 等等，您可能需使用標籤模式清單 `prod*` 來指定所有標籤。若您指定多個標籤，只會選擇含有所有指定標籤的映像。  
每個字串最多可有 4 個萬用字元 (`*`)，例如 `["*test*1*2*3", "test*1*2*3*"]` 是有效字串，但 `["test*1*2*3*4*5*6"]` 則為無效。

## 標籤字首清單
<a name="lp_tag_prefix_list"></a>

`tagPrefixList`  
類型：list[string]  
必填：是，如果 `tagStatus` 設為已標記且未指定 `tagPatternList`  
僅在您指定 `"tagStatus": "tagged"` 且未指定 `tagPatternList` 時使用。您必須指定以逗號分隔的映像標籤前綴清單，用以使用生命週期政策來採取動作。例如，若您的映像被標記為 `prod`、`prod1`、`prod2` 以此類推，您可能需要使用標籤前綴 `prod` 來指定所有映像。若您指定多個標籤，只會選擇含有所有指定標籤的映像。

## 儲存類別
<a name="lp_storage_class"></a>

`storageClass`  
類型：字串  
必要：是，如果 `countType` 為 `sinceImageTransitioned`  
規則只會選取此儲存類別的影像。使用 `imageCountMoreThan`、 `sinceImagePushed`或 `countType`的 時`sinceImagePulled`，唯一支援的值為 `standard`。使用計數類型 時`sinceImageTransitioned`，這是必要的，唯一支援的值是 `archive`。如果您省略此選項，`standard`則會使用 的值。

## 計數類型
<a name="lp_count_type"></a>

`countType`  
類型：字串  
必要：是  
指定計數類型以套用到映像。  
若 `countType` 設為 `imageCountMoreThan`，您也指定 `countNumber` 來建立設定存在於您的儲存庫中的映像數量限制之規則。如果 `countType` 設定為 `sinceImagePushed`、 `sinceImagePulled`或 `sinceImageTransitioned`，您也可以指定 `countUnit`和 `countNumber`，以指定存在於儲存庫中映像的時間限制。

## 計數單位
<a name="lp_count_unit"></a>

`countUnit`  
類型：字串  
必要：是，只有在 `countType` 設定為 `sinceImagePushed`、 `sinceImagePulled`或 時 `sinceImageTransitioned`  
除了代表天數的 `days` 外，請指定 `countNumber` 的技術單位來作為時間單位。  
這只能在 `countType`為 `sinceImagePushed`、 `sinceImagePulled`或 時指定`sinceImageTransitioned`；如果您在 `countType`為任何其他值時指定計數單位，則會發生錯誤。

## Count (計數)
<a name="lp_count_number"></a>

`countNumber`  
類型：整數  
必要：是  
指定計數號碼。可接受的值為正整數 (`0` 不是接受值)。  
如果使用的 `countType` 為 `imageCountMoreThan`，那麼值便是您想要保留於儲存庫中的最大映像數量。如果使用的 `countType` 為 `sinceImagePushed`，那麼值便是您想要保留於儲存庫中的映像存在時間上限。如果`countType`使用的 是 `sinceImagePulled`，則值為自上次提取映像以來的天數上限。如果`countType`使用的 是 `sinceImageTransitioned`，則值為自封存映像以來的天數上限。

## Action
<a name="lp_action"></a>

`type`  
類型：字串  
必要：是  
指定一種動作類型。支援的值為 `expire`（刪除映像） 和 `transition`（將映像移至封存儲存）。

`targetStorageClass`  
類型：字串  
必要：是，如果 `type` 為 `transition`  
您希望生命週期政策轉換映像的儲存類別。 `archive` 是唯一支援的值。