本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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 的規則。
-
檢閱測試結果,確保標記為過期或封存的映像符合您預期。
-
套用測試規則作為儲存庫的生命週期政策。
-
建立生命週期政策後,您應該預期映像會在符合過期條件後的 24 小時內過期或封存。
生命週期政策評估規則
生命週期政策評估工具負責剖析生命週期政策的純文字 JSON、評估所有規則,然後根據規則優先順序套用這些規則至儲存庫中的映像。以下詳細說明生命週期政策評估工具的邏輯。如需範例,請參閱 Amazon ECR 中的生命週期政策範例。
-
當儲存庫中存在參考成品時,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並在較新的映像之前一律過期。