Amazon ECR에서 수명 주기 정책을 사용하여 이미지 정리를 자동화하기
Amazon ECR에서 수명 주기 정책을 사용하여 이미지 정리를 자동화하기
Amazon ECR 수명 주기 정책(lifecycle policies)은 프라이빗 리포지토리에 있는 이미지의 수명 주기 관리를 더 세밀하게 제어할 수 있게 해줘요. 수명 주기 정책에는 하나 이상의 규칙(rules)이 포함되고, 각 규칙은 Amazon ECR이 수행할 작업(action)을 정의합니다. 수명 주기 정책에 지정된 만료 기준(expiration criteria)에 따라 이미지는 24시간 이내에 보관(archived)되거나 만료(expired)될 수 있어요. Amazon ECR이 수명 주기 정책에 따라 작업을 수행하면 이 작업이 AWS CloudTrail에 이벤트로 기록됩니다. 자세한 내용은 Logging Amazon ECR actions with AWS CloudTrail 문서를 참고하세요.
출처: 문서
본문
수명 주기 정책의 작동 방식 (How lifecycle policies work)
수명 주기 정책은 리포지토리의 어떤 이미지를 만료할지 결정하는 하나 이상의 규칙으로 구성됩니다. 수명 주기 정책을 사용할 때는 정책을 리포지토리에 적용하기 전에 수명 주기 정책 미리보기(preview)를 사용해 어떤 이미지가 만료되는지 확인하는 것이 중요해요. 수명 주기 정책이 리포지토리에 적용되면, 이미지는 만료 기준을 충족한 후 24시간 이내에 만료된다고 예상해야 합니다. Amazon ECR이 수명 주기 정책에 따라 작업을 수행하면 이 작업이 AWS CloudTrail에 이벤트로 기록됩니다. 자세한 내용은 Logging Amazon ECR actions with AWS CloudTrail 문서를 참고하세요.
다음 다이어그램은 수명 주기 정책 워크플로를 보여줘요.
- 하나 이상의 테스트 규칙을 만듭니다.
- 테스트 규칙을 저장하고 미리보기를 실행합니다.
- 수명 주기 정책 평가자(evaluator)가 모든 규칙을 검토하고 각 규칙이 영향을 주는 이미지를 표시합니다.
- 수명 주기 정책 평가자는 규칙 우선순위(rule priority)에 따라 규칙을 적용하고, 리포지토리에서 만료되거나 보관되도록 설정된 이미지를 표시합니다. 규칙 우선순위 숫자가 낮을수록 더 높은 우선순위를 의미해요. 예를 들어 우선순위가 1인 규칙은 우선순위가 2인 규칙보다 우선합니다.
- 테스트 결과를 검토해 만료 또는 보관 대상으로 표시된 이미지가 의도한 것인지 확인합니다.
- 테스트 규칙을 해당 리포지토리의 수명 주기 정책으로 적용합니다.
- 수명 주기 정책이 만들어지면, 이미지는 만료 기준을 충족한 후 24시간 이내에 만료되거나 보관된다고 예상해야 합니다.
수명 주기 정책 평가 규칙 (Lifecycle policy evaluation rules)
수명 주기 정책 평가자는 수명 주기 정책의 일반 텍스트 JSON을 파싱하고, 모든 규칙을 평가한 다음, 규칙 우선순위에 따라 해당 규칙을 리포지토리의 이미지에 적용하는 역할을 담당해요. 다음은 수명 주기 정책 평가자의 논리를 더 자세히 설명합니다. 예시는 Examples of lifecycle policies in Amazon ECR 문서를 참고하세요.
- 리포지토리에 참조 아티팩트(reference artifacts)가 있으면 Amazon ECR 수명 주기 정책은 대상 이미지(subject image)가 삭제되거나 보관된 후 24시간 이내에 해당 아티팩트를 자동으로 만료하거나 보관해요.
- 규칙 우선순위와 무관하게 모든 규칙이 동시에 평가됩니다. 모든 규칙이 평가된 후에는 규칙 우선순위에 따라 적용됩니다.
- 이미지는 정확히 하나 또는 0개의 규칙에 의해 만료되거나 보관됩니다.
- 규칙의 태그 요구사항과 일치하는 이미지는 더 낮은 우선순위를 가진 규칙에 의해 만료되거나 보관될 수 없어요.
- 규칙은 더 높은 우선순위 규칙이 표시한 이미지를 표시할 수 없지만, 만료되거나 보관되지 않은 것처럼 식별할 수는 있어요.
- 특정 스토리지 클래스를 선택하는 모든 규칙의 집합은 고유한 접두사(prefixes) 집합을 포함해야 해요.
- 특정 스토리지 클래스를 선택하는 규칙 중 하나만 태그되지 않은(untagged) 이미지를 선택할 수 있어요.
- 이미지가 매니페스트 목록(manifest list)에 의해 참조되면, 매니페스트 목록이 먼저 삭제되거나 보관되지 않는 한 만료되거나 보관될 수 없어요.
- 만료는 항상
pushed_at_time또는transitioned_at_time기준으로 정렬되며, 항상 오래된 이미지를 더 새로운 이미지보다 먼저 만료해요. 이미지가 과거에 보관된 후 복원된 적이 있다면,pushed_at_time대신 이미지의last_activated_at가 사용됩니다. - 수명 주기 정책 규칙은
tagPatternList또는tagPrefixList중 하나를 지정할 수 있지만, 둘 다는 지정할 수 없어요. 하지만 수명 주기 정책에는 서로 다른 규칙이 패턴 목록과 접두사 목록을 모두 사용하는 여러 규칙이 포함될 수 있어요.tagPatternList또는tagPrefixList값의 모든 태그가 이미지의 태그 중 하나와 일치하면 이미지가 성공적으로 매칭됩니다. tagPatternList또는tagPrefixList파라미터는tagStatus가tagged인 경우에만 사용할 수 있어요.tagPatternList를 사용할 때 이미지가 와일드카드 필터와 일치하면 성공적으로 매칭됩니다. 예를 들어prod*필터가 적용되면 이름이prod,prod1,production-team1처럼prod로 시작하는 image-tag와 일치해요. 마찬가지로*prod*필터가 적용되면repo-production이나prod-team처럼 이름에prod를 포함하는 image-tag와 일치합니다.중요: 문자열당 와일드카드(
*) 최대 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의 경우last_recorded_pulltime이countNumber기준 지정된 일수보다 오래된 모든 이미지가 보관됩니다. 이미지가 한 번도 풀(pull)된 적이 없다면last_recorded_pulltime대신pushed_at_time이 사용됩니다. 이미지가 과거에 보관된 후 복원되었지만 복원 이후 한 번도 풀되지 않았다면last_recorded_pulltime대신last_activated_at이 사용됩니다.countType = sinceImageTransitioned의 경우last_archived_at이countNumber기준 지정된 일수보다 오래된 모든 보관된 이미지가 만료됩니다.- 만료는 항상
pushed_at_time기준으로 정렬되며, 항상 오래된 이미지를 더 새로운 이미지보다 먼저 만료해요.