코딩 범고래의 해저동굴

ECS + Github action을 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~ 본문

AWS

ECS + Github action을 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~

코딩범고래 2023. 4. 12. 17:57

이전 글 :

ECS + Github action을 위한 여정 (2) ~ Local에 있는 React 프로젝트를 EC2로 옮긴 뒤 Docker로 Build하기 ~

 

ECS + Github action + CodeDeploy를 위한 여정 (2) ~ Local에 있는 React 프로젝트를 EC2로 옮긴 뒤 Docker로 Build

이전 글 : ECS + Github action + CodeDeploy를 위한 여정 (1) ~ EC2 구성 및 Docker 설치 ~ ECS + Github action + CodeDeploy를 위한 여정 (1) ~ EC2 구성 및 Docker 설치 ~ 기존의 모놀로식 환경에서 운영되던 시스템을 AWS에

coding-orca.tistory.com

 

이전글에 이어서 EC2에서 생성하고 테스트했던 Docker Image file을 ECR에 push 하도록 하겠습니다.

 

1. ECR 생성 

 

우선 ECR 콘솔에 들어가 Repositories를 살펴봅니다.

 

위 이미지와 같은 화면에서 "리포지토리 생성" 클릭

 

 

EC2 생성할 때 보단 훨씬 간단한 느낌입니다.

프라이빗 환경 선택(아마 선택되어져있을겁니다) 후 리포지토리 이름을 입력하고

"리포지토리 생성" 클릭.. ECR 생성은 이거로 끝입니다.

 

문제는..

 

이제 만든 리포지토리에 docker image를 push 해야 한다는 것인데,

이를 위해서는 오른쪽 위 "푸시 명령 보기"를 클릭하여 진행해야 합니다.

 

푸시 명령 보기 클릭

 

참 친절해 보이긴 하는데..

친절하게도 명령어까지 자동 완성되어 나옵니다..

 

 우와 이제 이걸 EC2에 복붙해서 (혹은 나의 local pc의 power shell에 복붙해서) 올리면 되겠지!?

 

하지만 현실은.. 

non TTY..?뭐?

ㅎㅎ 그렇습니다 그렇게 쉽게 될리가 없죠.

aws configure를 실행하라고 하는데 일단 이를 무시해주시길 바랍니다.

이는 해당 EC2의 자격증명이 안되어서 발생하는 상황인데요

AWS는 모든 프로덕트들을 IAM이라는 서비스를 통해 자격증명 / 권한관리 / 역할 관리를 합니다.

처음엔 이를 몰라서 한참 헤매이다가 (정확히는 IAM을 하기 싫어서 몸을 비틀다가) AWS에서 만들어 놓은 역할을 설정하는 방법을 안 뒤 이를 적용하여 해결하게 되었습니다. 

 

걱정마세요 지금부터 차근차근 해보겠습니다.

 

2. EC2에 IAM 역할 추가

 

 저는 EC2환경에서 docker image를 push하고자 했지만 (Local 컴퓨터의 경우엔 다양한 사람들이 image build를 시도할 경우 build 환경이 달라지기에 공통으로 접속하여 관리할 수 있는 EC2를 굳이 구성해서 image build를 꾀했습니다.) Local환경에서도 충분히 구성할 수 있을거라 예상됩니다. 다만 그 과정이 EC2를 사용하는 것보단 복잡하겠죠.. (어떻게든 제품을 결합해서 팔아먹으려는 AWS의 영업정신이 돋보입니다^^ 하, 이런 회사 다녀야되는데..;;)

 

일단 EC2콘솔을 종료해줍시다

 

 

 

 

IAM 역할 = "-"

인스턴스 상세 화면으로 가시면 저와 만약 똑같이 EC2를 구성하셨다면 IAM 역할이 비어있는 것을 확인할 수 있습니다.

오른쪽 위 작업 => 보안 => IAM역할 수정 클릭

 

 

IAM 역할 수정 화면이 나오는데 아마 여러분들은
IAM 역할 아래의 셀렉트 박스를 클릭 했을 때, 

"IAM역할 없음" 만 표시될것입니다. 

이에.. "새 IAM 역할 생성"클릭..

 

뭔가 복잡한게 많은데....

IAM 콘솔 -> 역할에서 역할 만들기 클릭

일단 AWS 서비스들 중 EC2에서 사용할 것이므로 EC2 체크 후 다음으로...

??? : 난 둘다!

이제 권한 정책을 추가해줘야 하는데요. 저희 마음대로 구성하는 방법도 있지만, 저는 AWS에서 기본으로 제공해주는 권한 방식을 채택했습니다.

 

ecr을 검색해서 나오는

EC2InstanceProfileForImageBuilderECRContainerBuilds

AWSAppRunnerServicePolicyForECRAccess

두개를 선택해줍니다. 

차이점에 대해선 공부를 해야겠지만 두개를 선택했을 때 잘되므로(?) 두개 다 선택해줍니다.

 

그 다음 "다음" 버튼 클릭

 

한 화면에 다 안들어와서 화면을 키웠습니다

react_role이란 이름으로 역할 이름을 정하고

맨 아래의 "역할 생성" 클릭

초록색이 보이니 기분이 좋네요

생성 완료!

 

이제 다시 EC2 인스턴스 상세 => IAM 역할 수정 화면으로 넘어옵니다.

 

새로고침 버튼을 클릭 후 셀렉트 박스를 확인하면

짜잔.. 아까 저희가 이름지은 react_role의 역할이 생성되어있습니다!

 

react_role을 선택 후

 

"IAM 역할 업데이트" 클릭

기분 좋은 향ㄱ...

다시 초록색의 성공 alert가 보여집니다. 

이제 본격적으로 아까 친절하게 나왔던 명령어를 실행해 볼까요

 

3. EC2에서 build한 docker image를  ECR에 push 하기

 

 

역시나 반겨주는 새 한마리

자, 이제 다시 EC2 console에 접속해줍니다.

그리고 다른 탭에는 ECR 리포지토리의 push 명령 안내창을 띄웁니다

 

 

맨 위의 명령어를 복사!

복붙해서 실행!

 

어? denied?

뭐야 안되잖아! 

아하 denied!

sudo를 붙이면 되겠구나!

 

응 아니야

ㅎㅎ 안타깝지만 아직 멀었습니다..

 

위의 거부는 바로 유저(OS유저 / default : ec2-user)의 권한때문에 생기는 것이었습니다. 그럼 어떻게 할까

docker 그룹에 user를 끼워주면 그만입니다!

sudo usermod -aG docker $USER

※ 여기서 $USER는 유저명 변수 그 자체로서, 수정 없이 그대로 콘솔에 복붙하시면 됩니다.

뭐야 왜 동작을 안ㅎ..

동작을 안하는게 아닙니다 수정이 된것입니다. 

이어서 키보드 위쪽 화살표 버튼을 눌러 실행!

응 아직 아니야

??????

 

아차차, group에 추가를 해줬으면 소개를 해줘야죠 

newgrp docker

위 명령어 입력 후 

다시 실행하면..!

Success!

Login Succeeded라는 말과 함께 아무런 에러 없이 커서가 깜빡입니다.. 성공!

 

이제 build해서 배포하는 일만 남았습니다.

 

자주 보네 이친구

전에 이미지를 빌드를 했었으므로 

2 번은 패스! (안하셨다면 Dockerfile이 있는 프로젝트 경로에 가셔서 2번 명령어 실행!)

3번부터 하신 다음 4번 까지!

※ 주의 : 위의 tag 뒤에 오는 것은 image 태그 명입니다. 저는 react로 했지만 다른 tag로(-t옵션) 빌드 하신 경우 해당 태그로 대체해 주세요! (만일 ECR과 Docker image tag명을 다르게 하셨으면 신경써주셔야 합니다)

뭔가 진행 되네요..

이후 Pushed의 연발 후 커서가 깜빡이면 성공!

오..오옷!

새로고침 버튼을 누르면..

제가 push한 이미지가 ECR에 잘 등록된 것을 확인하실 수 있으실겁니다!

 

다음 부터는 이제 이 ECR로 ECS를 만들어 실행하는 것을 목적으로..!

 

다음글:

 

ECS + Github action을 위한 여정 (4) ~ ECS에서 사용할 VPC 구성하기 ~

 

ECS + Github action + CodeDeploy를 위한 여정 (4) ~ ECS에서 사용할 VPC 구성하기 ~

이전글: ECS + Github action + CodeDeploy를 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~ ECS + Github action + CodeDeploy를 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~ 이전 글 : ECS +

coding-orca.tistory.com

 

Comments