새소식

반응형
AWS/AWS Solutions Architect

[AWS][Amazon ECR] Lifecycle Policy (수명 주기 정책) - 1/2

  • -
728x90
반응형

안녕하세요. 늑대양입니다.

AWS 관련 업무 및 개인 테스트 진행 중, 공유 드리고 싶었던 내용이 참 많았었는데 드디어 첫 번째 블로그 글을 작성하게되었네요.

앞으로는 꾸준히 포스팅을 작성하도록 하겠습니다. 😉

 

Amazon Elasitc Container Registry, Amazon ECR

 

이번 시간에는 AWS ECR(Elastic Container Registry) 서비스를 사용할 때, 활용하실 수 있는 수명 주기 정책과 관련하여 포스팅을 작성하고자 합니다.

 

이번 포스팅에서는 Amazon ECR 수명 주기 정책의 이론적인 부분메인으로 다루며, 순서는 다음과 같습니다.

  1. Amazon ECR 수명 주기 정책의 개요
  2. 수명 주기 정책 템플릿
  3. 수명 주기 정책 매개 변수 (Parameter)
  4. 수명 주기 정책 평가 규칙
  5. 수명 주기 정책 생성 (AWS CLI 방식)

 

AWS 콘솔을 이용한 수명 주기 정책 생성정책 미리보기(Lifecycle policy preview)와 같은 기능 들이어지는 포스팅을 통해 전달드리도록 하겠습니다. 😎

 

1. Amazon ECR 수명 주기 정책 - 개요 (요약)

참고 링크:

 

수명 주기 정책 - Amazon ECR

The tagPrefixList 매개 변수는 다음과 같은 경우에만 사용됩니다. tagStatus is tagged. countUnit 매개 변수는 다음과 같은 경우에만 사용됩니다. countType is sinceImagePushed. countNumber 매개 변수는 다음과 같은

docs.aws.amazon.com

  • Amazon ECR은 수명 주기 정책을 통해 리포지토리의 이미지에 대한 수명 주기 관리 및 설정이 가능합니다.
  • 수명 주기 정책은 1개 이상으로 구성된 일련의 규칙이며, 각 규칙은 ECR 작업을 정의합니다.

 

2. 수명 주기 정책 템플릿

  • 수명 주기 정책의 내용은 리포지토리에 연결되기 전에 평가됩니다.
  • 아래의 내용은 JSON 문법으로 작성된 수명 주기 정책 템플릿의 예시입니다.
    • 티스토리의 코드블럭은 아직 JSON이 지원되지 않는 것 같습니다.
    • Python 코드 블럭을 사용하였습니다..😂
{
    "rules": [
        {
            "rulePriority": integer,
            "description": "string",
            "selection": {
                "tagStatus": "tagged"|"untagged"|"any",
                "tagPrefixList": list<string>,
                "countType": "imageCountMoreThan"|"sinceImagePushed",
                "countUnit": "string",
                "countNumber": integer
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}

 

  • tagPrefixList: 항목의 경우 tagStatus 항목이 tagged 일 경우에만 사용됩니다.
  • countUnit 항목은 countType 항목이 sinceImagePushed 일 경우에만 사용됩니다.
  • countNumber 항목은 countType 항목이 imageCountMoreThan 일 경우에 사용된다고 가이드에 명시되어있지만 테스트 결과 필수 항목인 것을 확인할 수 있었습니다.

 

3. 수명 주기 정책 매개 변수

rulePriority

  • Type: integer
  • Required: 필수
  • 오름차순으로 규칙 평가 (1 → 2 → 3 → ... )
  • 값은 유니크해야합니다.
  • 순차적일 필요는 없습니다. (1 → 7 → 9 → ... )
  • tagStatus 값이 any(모두 선택) 일 경우 가장 높은 값을 갖게 되며, 가장 마지막에 평가됩니다.

Description

  • Type: string
  • Required: no → 필수 (AWS 공식 가이드에서는 optional로 표시되지만 테스트 결과 필수 조건임을 확인했습니다.)
  • 규칙에 대한 설명 내용을 작성할 수 있습니다.

Tag status

  • Type: string
  • Required: 필수
  • 이미지에 대한 특정한 태그를 지정할지에 대한 설정입니다.
  • 적용 가능한 옵션은 세 가지: tagged, untagged, any
    • tagged 선택 시, tagPrefixList 값 입력 필수 (하나 이상)

Tag prefix list

  • Type: list [string]
  • Required: tagStatus 값이 tagged로 설정된 경우에 필수, 나머지는 생략 가능합니다.
  • 쉼표로 구분된 접두사 리스트 지정이 가능합니다.
  • prod, prod1, prod2, ... → prod 접두사 하나로 모두 선택 가능합니다.
  • 여러 개의 태그 값을 입력할 경우, 입력된 모든 태그가 적용된 이미지만을 선택합니다.

Count type

  • Type: string
  • Required: 필수
  • 적용 가능한 옵션은 두 가지: imageCountMoreThan, sinceImagePushed
    • imageCountMoreThan → countNumber 를 지정하여 이미지 수의 한도 지정이 필요합니다.
    • sinceImagePushed → countUnit, countNumber 를 지정하여 이미지의 시간 한도 지정이 필요합니다.

Count unit

  • Type: string
  • Required: countTpye 항목이 sinceImagePushed 일 경우, 필수
  • days 옵션만 선택 가능합니다.

Count number

  • Type: integer
  • Required: 필수
  • 양수 값만 선택 가능합니다. (음수, 0은 선택 불가능)
  • imageCountMoreThan → 리포지토리에 저장할 최대 이미지 수를 지정합니다.
  • sinceImagePushed → 리포지토리에 푸시된 이후 저장될 최대 일 수를 지정합니다.

Action

  • Type: string
  • Required: 필수
  • 동작 유형을 지정하며, expire 옵션만 제공하고 있습니다.

 

4. 수명 주기 정책 평가 규칙

  • untagged 규칙은 하나만 사용 가능합니다.
  • any 규칙은 가장 큰 우선 순위 값으로 설정해야합니다. (rulePriority 파라미터 참고)
  • 항상 새 이미지보다 오래된 이미지가 먼저 만료됩니다.
  • 규칙의 태그 값은 고유해야합니다.

 

5. 수명 주기 정책 생성

5-1. AWS CLI 방식

# <12자리 AWS 계정번호>는 테스트를 진행하시는 AWS 계정의 12자리 Account Number 값으로 교체가 필요합니다!

$ awc ecr describe-repositories

{
    "repositories": [
        {
            "repositoryArn": "arn:aws:ecr:ap-northeast-2:<12자리 AWS 계정번호>:repository/test",
            "registryId": "<12자리 AWS 계정번호>",
            "repositoryName": "test",
            "repositoryUri": "<12자리 AWS 계정번호>.dkr.ecr.ap-northeast-2.amazonaws.com/test",
            "createdAt": "2021-02-08T14:22:09+09:00",
            "imageTagMutability": "MUTABLE",
            "imageScanningConfiguration": {
                "scanOnPush": false
            },
            "encryptionConfiguration": {
                "encryptionType": "AES256"
            }
        }
    ]
}


$ aws ecr put-lifecycle-policy [--registry-id <string>] --repository-name <string> --lifecycle-policy-text <string>

[CLI 생성이 불편할 수도 있을 것 같습니다..]
[JSON 포맷을 string으로 변환하여 입력 필요..]



# 생성 예시

$ aws ecr put-lifecycle-policy --registry-id <12자리 AWS 계정번호> --repository-name test --lifecycle-policy-text "{\"rules\":[{\"rulePriority\":2,\"description\":\"test2\",\"selection\":{\"tagStatus\":\"untagged\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":1},\"action\":{\"type\":\"expire\"}}]}"

 

 

 

여기까지가 [AWS][Amazon ECR] Lifecycle Policy (수명 주기 정책) - 1/2 내용입니다. 😊

 

긴 글 읽어주셔서 감사드리며, Lifecycle Policy (수명 주기 정책) - 2/2 에서는 AWS 콘솔 작업 화면부가적인 기능들을 살펴볼 예정입니다.

게시글을 읽으시면서 궁금하신 내용 및 수정이 필요한 부분이 있으셨다면 편안하게 말씀해주시길 바라옵니다. 👏

 

다시 한 번, 긴 글 읽어주셔서 감사합니다. 😘

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.