在 Amazon ECR 中使用生命週期政策來自動化映像的清除 - Amazon ECR

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

在 Amazon ECR 中使用生命週期政策來自動化映像的清除

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

生命週期政策如何運作

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

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

顯示生命週期政策評估和應用程序的圖表。
  1. 建立一或多個測試規則。

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

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

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

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

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

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

生命週期政策評估規則

生命週期政策評估工具負責剖析生命週期政策的純文字 JSON、評估所有規則,然後根據規則優先順序套用這些規則至儲存庫中的映像。以下詳細說明生命週期政策評估工具的邏輯。如需範例,請參閱 Amazon ECR 中的生命週期政策範例

  • 當儲存庫中存在參考成品時,Amazon ECR 生命週期政策會在刪除或封存主體映像的 24 小時內自動過期或封存這些成品。

  • 不論規則優先順序,都會同時評估所有規則。評估所有規則之後,就會根據規則優先順序進行套用。

  • 映像已過期或僅由一或零個規則封存。

  • 符合規則標記需求的映像,無法由優先順序較低的規則過期或封存。

  • 規則永遠無法標記由較高優先順序規則標記的影像,但仍可以將其識別為尚未過期或封存。

  • 選取特定儲存類別的所有規則集必須包含一組唯一的字首。

  • 只允許選取一個特定儲存類別的規則來選取未標記的影像。

  • 如果資訊清單清單參考影像,則必須先刪除或封存資訊清單清單,才能過期或封存該影像。

  • 過期一律由 pushed_at_time或 排序,transitioned_at_time並一律在較新的映像之前過期。如果影像已封存,然後在過去的任何時間點還原,last_activated_at則會使用影像的 而非 pushed_at_time

  • 生命週期政策規則可指定 tagPatternListtagPrefixList,但不能同時指定兩者。不過,生命週期策略可包含多項規則,不同規則可同時使用模式和字首清單。如果 tagPatternListtagPrefixList值中的所有標籤都與任何影像的標籤相符,則會成功比對影像。

  • 唯有當 tagStatustagged 時,才能使用 tagPatternListtagPrefixList 參數。

  • 使用 tagPatternList 時,如果映像與萬用字元篩選條件相符,便會成功配對映像。例如,如果prod*套用篩選條件,它會比對名稱開頭為 的影像標籤prod1prod例如 prod、 或 production-team1。同樣地,如果*prod*套用篩選條件,則會比對名稱包含 repo-productionprod的影像標籤prod-team

    重要

    每個字串最多可有 4 個萬用字元 (*),例如 ["*test*1*2*3", "test*1*2*3*"] 是有效字串,但 ["test*1*2*3*4*5*6"] 則為無效。

  • 使用 時tagPrefixList,如果tagPrefixList值中的所有萬用字元篩選條件都符合任何影像的標籤,則映像會成功比對。

  • countUnit 參數僅在 countTypesinceImagePushedsinceImagePulled或 時使用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並在較新的映像之前一律過期。