안녕하세요. 늑대양입니다.
AWS 관련 업무 및 개인 테스트 진행 중, 공유 드리고 싶었던 내용이 참 많았었는데 드디어 첫 번째 블로그 글을 작성하게되었네요.
앞으로는 꾸준히 포스팅을 작성하도록 하겠습니다. 😉
이번 시간에는 AWS의 ECR(Elastic Container Registry) 서비스를 사용할 때, 활용하실 수 있는 수명 주기 정책과 관련하여 포스팅을 작성하고자 합니다.
이번 포스팅에서는 Amazon ECR 수명 주기 정책의 이론적인 부분을 메인으로 다루며, 순서는 다음과 같습니다.
- Amazon ECR 수명 주기 정책의 개요
- 수명 주기 정책 템플릿
- 수명 주기 정책 매개 변수 (Parameter)
- 수명 주기 정책 평가 규칙
- 수명 주기 정책 생성 (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 콘솔 작업 화면과 부가적인 기능들을 살펴볼 예정입니다.
게시글을 읽으시면서 궁금하신 내용 및 수정이 필요한 부분이 있으셨다면 편안하게 말씀해주시길 바라옵니다. 👏
다시 한 번, 긴 글 읽어주셔서 감사합니다. 😘
'AWS > AWS Solutions Architect' 카테고리의 다른 글
[AWS][Amazon ECR] Lifecycle Policy (수명 주기 정책) - 2/2 (0) | 2021.03.27 |
---|