AWS. 다른 계정의 ECR 이미지 복제하기
created Nov 16, 2022 | updated Nov 16, 2022
애플리케이션은 대부분 CI로 컨테이너 이미지를 컨테이너 레지스트리로 업로드 하고 사용하게 된다. 예를 들면 CI(Github Actions, CircleCI 등)에서 이미지를 생성하고 AWS ECR에 이미지를 업로드하면 AWS EKS에서는 ECR에 업로드된 이미지를 사용할 수 있다.
그런데 AWS에서 동일한 컨테이너 이미지를 다수의 계정과 여러 리전에서 사용하고 서비스를 운영해야 한다면 어떻게 하는 것이 좋을까?
Thinking : Two Strategy
- 첫 번째 전략은 CI 또는 배치를 사용해 각 계정 및 리전의 ECR로 각각 업로드하는 것이다.
- 각 ECR에는 필요한 컨테이너 이미지만 존재할 수 있다.
- CI 코드가 길어지고 추가 및 변경되는 환경이 생기면 CI 코드 수정은 불가피하다.
- 많은 애플리케이션을 운영하는 경우 모든 애플리케이션의 CI 코드 수정이 필요하고, 애플리케이션의 이미지 업로드를 한 곳에서 담당하고 있다면 대기열이 모두 차고 지연이 발생할 수 있다.
- 두 번째 전략은 하나의 ECR에 이미지를 업로드하고 필요한 계정과 리전으로 복제하는 것이다.
- 원본이 업로드되는 ECR은 모든 이미지가 존재하기 때문에 불필요한 용량을 사용하게 된다.
- CI 코드가 비교적 간결하지만 인프라 설정이 필요하다.
- CI의 잡은 완료되었지만 복제에 따른 시간 지연이 있을 수 있다. 경험 상 지연 시간은 수 초에서 1분 미만인 것 같다.
Choice : Second Strategy
본 글은 두 번째 전략 방식을 선택하고 계정간 ECR 이미지 복제 설정을 설명한다.
계정간 ECR Repositories 복제는 두 계정의 ECR(Source & Destination)에 각각 설정이 필요하다. Source ECR에서는 replication 설정을 해줘야 하고, Destination ECR에서는 permission 설정을 해줘야 한다.
복제 설정 전에 업로드된 이미지들은 복제(동기화)되지 않는다. 복제 설정 후 업로드된 이미지부터 동기화되니 참고하자.
1. Source Image Registry
- 이 설정은 원본 ECR의 Repositories 및 이미지를 다른 계정의 리전으로 복제하기 위함이다.
- 원본 컨테이너 이미지가 존재하는 AWS 계정의 ECR 메뉴로 이동한다.
- Private Registry > Replication > Add rule 메뉴를 클릭한다.
- Destination Types은 Cross-account replication을 선택한다.
- Configure replication rule에서는 복제될 ECR이 존재하는 계정과 리전 정보를 입력한다.
- Filters는 선택사항이다. 입력하지 않으면 모든 이미지를 복제하고 설정하면 필터 조건에 맞는 이미지만 복제된다. 예를 들어, 레포지토리 이름이 production-webserver, production-database, qa-webserver, qa-database이고 production prefix를 가진 레포지토리만 복사하길 원하는 경우 production을 필터 조건으로 입력하면 된다.
- Submit rule까지 클릭하면 복제 설정 생성 완료이다.
2. Destination Image Registry
- 이 설정은 원본 ECR이 위치한 계정이 본 계정으로 이미지를 복사하는 행동을 허용하기 위함이다.
- 컨테이너 이미지가 복제되야 할 AWS 계정의 ECR 메뉴로 이동한다.
- Private Registry > Permissions > Generate statement 메뉴를 클릭한다.
- policy type은 Cross account replication policy를 선택한다.
- Statement id는 정책 식별자이다. AWS IAM의 Sid로 보면된다.
- Accounts에는 퍼미션을 승인할 계정을 입력한다. 원본 ECR의 AWS 계정을 입력하면 된다.