본문 바로가기

개발-사용기/aws

AWS ECR 사용기

서론

aws에는 ECS, EKS, ECK 같은 container관리 도구가 있다. 여기서 ECR을 알아보고 활용하는 방법을 정리해보려 한다.

 

 

 

 

 

ECR 이란?

 

ECR에 관한 설명이 되어있는 공식문서링크

docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/what-is-ecr.html

 

란 무엇인가요?Amazon Elastic Container Registry? - Amazon ECR

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

ECR은 AWS 관리형 컨테이너 이미지 레지스트리 서비스 라고 정의되어 있다. 간단히 AWS에서 관리하는 docker hub 비슷한류의 서비스라고 이해하는게 쉬울것 같다.

 

 

 

 

 

Repository 생성

 

AWS 서비스 검색에서 ECR 이나 ECS를 검색해서 들어가면 다음과 같은 화면구성을 볼 수 있다.

여기서 빨간색으로 표시한 리포지토리 생성 버튼을 통해 컨테이너 이미지를 저장할 수 있는 리포지토리를 생성할 수 있다.

 

생성 버튼을 누르면 다음 화면으로 이동된다.

 

빨간색 영역에 리포지토리 이름을 적으면 된다. 하단의 다른 옵션들은 본인이 원하는대로 설정하면 된다.

 

필자는 [서버이름]-server-origin 으로 이름을 만들었는데, 이 컨테이너를 기반으로 서버를 구성하기 때문에 origin이라는 이름을 지었는데, 나중에 배포하는 도커 이미지의 경우 [서버이름]-server 로 만들 생각이다.

 

하단의 리포지토리 생성 버튼을 통해 생성을 완료해주자.

리포지토리를 생성하고 첫 화면으로 돌아오면 생성된 리포지토리가 보이는데 여기서 중요한건 푸시 명령 보기다.

 

생성된 리포지토리를 선택하고 푸시명령보기를 누르면 다음과 같은 화면이 나온다.

이렇게 많이 가리면 보여주는게 목적일까? 안보여주는게 목적일까?

로컬에서 작업을 통해 해당 ECR로 배포할 때 사용하는 명령어들이다. 로컬 작업시 해당 명령들을 스크립트로 작성해서 앞으로 배포시에 편하게 사용할 수 있다.

 

 

 

 

 

 

로컬에서 docker 이미지 생성

 

로컬에서 Dockerfile 생성 후 다음과 같이 내용을 작성했다.

 

FROM ubuntu:20.04


# set environment value
ENV TZ=Asia/Seoul
ENV AWS_ACCESS_KEY_ID=EXAMPLEACCESSKEY
ENV AWS_SECRET_ACCESS_KEY=EXAMPLESECRETACCESSKEY
ENV AWS_DEFAULT_REGION=EXAMPLEREGION


# Install dependencies
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash
RUN apt-get -y install nodejs
RUN apt-get -y install nginx
RUN apt-get -y install vim
RUN apt install -y git

# awscli 설치
RUN apt install python3-pip -y
RUN pip3 install awscli

# node global 설치
RUN npm install -g pm2


# timezone 설정
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y tzdata


# nginx config file
COPY default /etc/nginx/sites-enabled/default

# 포트 열기
EXPOSE 80 3000

 

환경변수로 서버에서 사용할 값들을 넣어줬는데, 이 방법이 맘에 안들면 AWS Secrets Manager 같은 키 관리 서비스를 이용해보는걸 권장한다.

docs.aws.amazon.com/ko_kr/secretsmanager/latest/userguide/intro.html

 

AWS Secrets Manager란 무엇입니까? - AWS Secrets Manager

HTTPS 쿼리 API를 사용하는 대신 선호하는 프로그래밍 언어와 관련된 SDK를 사용하는 것이 좋습니다. SDK는 사용자가 수동으로 수행하는 많은 유용한 작업을 수행합니다. 한 예로 SDK는 자동으로 요

docs.aws.amazon.com

nginx config file은 nginx 설정을 미리 파일로 작성해서 nginx 설정파일 경로에 복사이동 시켜줬다.

 

origin 목적으로 만든 ECR은 외부에 노출되지 않도록 잘 관리해주자.

 

 

 

 

 

배포 스크립트 작성

 

필자는 nodejs를 사용하기 때문에 npm init 명령어로 프로젝트를 생성하고 package.json 의 scripts 에 다음과 같이 명령어를 작성해줬다.

 

{
  "name": "[프로젝트이름]",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "ecr_login": "aws ecr get-login-password --region ap-northeast-2 --profile profileName1 | docker login --username AWS --password-stdin [ecr아이디값].dkr.ecr.ap-northeast-2.amazonaws.com",
    "docker:remove": "docker rmi -f [ecr리포지토리명]",
    "docker:build": "docker build -t [ecr리포지토리명] .",
    "docker:run": "docker run --rm -it [ecr리포지토리명] /bin/bash",
    "docker:start": "npm run docker:remove && npm run docker:build && npm run docker:run",
    "docker:tagging": "docker tag [ecr리포지토리명]:latest [ecr아이디값].dkr.ecr.ap-northeast-2.amazonaws.com/[ecr리포지토리명]:latest",
    "docker:push": "docker push [ecr아이디값].dkr.ecr.ap-northeast-2.amazonaws.com/[ecr리포지토리명]:latest",
    "docker:image_upload": "npm run ecr_login && npm run docker:build && npm run docker:tagging && npm run docker:push"
  },
  "author": "",
  "license": "ISC"
}

스크립트중 ecr_login, docker:build, docker:tagging, docker:push 네가지는 아까 봤던 푸시 명령 보기 를 그대로 가져온것이다. 그 외 스크립트는 도커 관련해서 편하게 쓰기 위해 작성된것들이다.

 

배포를 한번에 하기위한 docker:image_upload를 사용해서 이미지를 업로드 해주자.

 

업로드가 완료되면 다음과 같은 결과를 확인할 수 있다.

 

'개발-사용기 > aws' 카테고리의 다른 글

AWS ECS 구성  (0) 2021.05.24
AWS Certificate Manager (https 적용하기)  (0) 2021.05.20
AWS Codebuild  (0) 2021.05.18
AWS credential, configure, cli, profile  (0) 2021.05.04