AWS. 다른 계정의 ECR 이미지 복제하기
2022-11-16 · 읽는 시간 4분
애플리케이션은 대부분 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 계정을 입력하면 된다.
