본문 바로가기
Infra, Cloud/AWS

[AWS] ECS 사용하기 (1) - GitLab으로 ECR에 이미지 push하기

by J4J 2022. 11. 5.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 ECS 사용하기 첫 번째인 GitLab으로 ECR에 이미지 push하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

ECR이란?

 

ECR은 Elastic Container Registry의 약어로 AWS에서 제공하는 Docker 이미지 저장소입니다.

 

Docker 이미지 저장소로 보통 자주 사용되는 것은 Docker Hub가 있습니다.

 

ECR은 Docker Hub와 유사하기 때문에 Docker 컨테이너에 사용될 Docker 이미지들을 관리, 저장, 배포할 수 있도록 도와줍니다.

 

 

 

GitLab으로 ECR에 이미지 push하는 방법 (1) - IAM 설정

 

[ 1. IAM 접속 ]

 

IAM 접속

 

 

[ 2. ECR 접근 사용자 추가 ]

 

좌측 메뉴에서 사용자를 선택한 뒤 오른쪽에 있는 사용자 추가 버튼을 클릭해줍니다.

 

사용자 추가

 

 

 

[ 3. 사용자 세부 정보 입력 ]

 

사용자 이름을 자유롭게 입력해주시고 액세스 유형은 액세스 키를 선택해주시면 됩니다.

 

정보를 모두 입력했다면 아래에 있는 다음을 클릭해줍니다.

 

사용자 세부 정보 입력

 

 

 

[ 4. 권한 정보 입력 ]

 

권한 설정은 어떤 방법을 선택해도 상관없습니다.

 

다만 결과적으로 AmazonEC2ContainerRegistryPowerUser 권한이 해당 사용자 권한에 추가되어 있으면 됩니다.

 

저는 기존 정책 직접 연결을 선택해서 다음과 같이 권한을 설정하겠습니다.

 

설정이 완료되었다면 다음 버튼을 계속 눌러서 사용자를 최종적으로 만들어주시면 됩니다.

 

권한 정보 입력

 

 

 

[ 5. 액세스 키 확인 ]

 

사용자 추가가 완료되면 다음과 같이 사용자에 매핑되는 액세스 키 정보를 확인할 수 있습니다.

 

이후 GitLab 설정할 때 필요한 정보들이기 때문에 csv로 다운로드를 받든 따로 저장을 하든 이후에 사용될 수 있도록 정보를 알고 계셔야 합니다.

 

액세스 키 확인

 

 

반응형

 

 

 

GitLab으로 ECR에 이미지 push하는 방법 (2) - ECR 설정

 

[ 1. ECS 접속 ]

 

ECS 접속

 

 

 

[ 2. ECR 리포지토리 접속 ]

 

좌측 메뉴에 있는 Amazon ECR에서 리포지토리를 선택해줍니다.

 

ECR 리포지토리 접속

 

 

 

[ 3. 리포지토리 생성 ]

 

우측에 있는 리포지토리 생성 버튼을 클릭해줍니다.

 

리포지토리 생성

 

 

 

[ 4. 리포지토리 정보 입력 ]

 

일반 설정 창에서 표시 여부는 외부에 공개하지 않을 것이기 때문에 프라이빗 선택, 리포지토리 이름은 자유롭게 입력해주시면 됩니다.

 

그 외 설정은 필요하신 분들은 추가 설정 해주시면 됩니다.

 

모든 설정이 완료되었다면 아래에 있는 리포지토리 생성 버튼을 클릭해줍니다.

 

리포지토리 정보 입력

 

 

 

GitLab으로 ECR에 이미지 push하는 방법 (3) - GitLab 설정

 

[ 1. GitLab Variables 등록 ]

 

이제 GitLab으로 넘어가줍니다.

 

ECR과 연동될 Repository로 접근한 뒤 아래와 같이 Settings → CI/CD로 넘어가 줍니다.

 

CI/CD Settings 이동

 

 

 

그리고 Variables 탭으로 이동하여 Add variable을 선택한 뒤 필요한 값들을 모두 추가해줍니다.

 

variable 추가

 

 

728x90

 

 

첫 번째로 위에서 생성한 ECR 사용자의 Access Key를 다음과 같이 등록해줍니다.

 

Access Key 등록

 

 

 

두 번째로 ECR 사용자의 Secret Access Key를 다음과 같이 등록해줍니다.

 

Secret Access Key 등록

 

 

 

마지막으로 ECR이 사용되는 Region을 다음과 같이 등록해줍니다.

 

Region 등록

 

 

 

[ 2. .gitlab-ci.yml 작성 ]

 

제가 해당 글에서 사용할 Dockerfile은 단순 nginx 서버 실행을 위한 것으로 다음과 같으니 참고 부탁드립니다.

 

# nginx 이미지 불러오기
FROM nginx:latest

# 데몬으로 실행(백그라운드에 접속하지 않고 실행하라고만 함) (컨테이너 실행할 때 동작)
CMD ["nginx", "-g", "daemon off;"]

 

 

 

그리고 Dockerfile이 모두 준비가 완료되었다는 가정 하에 다음과 같이 .gitlab-ci.yml을 작성해줍니다.

 

# 실행될 stage 지정 (위에서 아래로 차례대로 실행)
stages:
  - package

# 변수 설정
variables:
  ECR_REPOSITORY_URL: 564884596714.dkr.ecr.ap-northeast-2.amazonaws.com
  ECR_REPOSITORY_NAME: ecr-repository 

package:   # JOB 이름
  # 사용될 이미지 설정
  image: docker:latest
  # stage 설정
  stage: package
  # service 설정 (설정한 image가 작업이 이루어지는 동안 실행되는 docker 이미지)
  services:
    - docker:dind
  # script가 실행 전 수행 될 script
  before_script:
    - apk add --no-cache curl jq python3 py3-pip
    - pip install awscli
    - aws ecr get-login-password | docker login --username AWS --password-stdin $ECR_REPOSITORY_URL
  # 실행될 script 설정
  script:
    - docker build -t $ECR_REPOSITORY_URL/$ECR_REPOSITORY_NAME .
    - docker push $ECR_REPOSITORY_URL/$ECR_REPOSITORY_NAME
  # script가 실행된 후 수행 될 script
  after_script:
    - docker logout
  # JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
  only:
    - master

 

 

 

여기서 variables에 있는 ECR_REPOSTIORY_URL과 ECR_REPOSITORY_NAME은 AWS ECR 목록을 확인한 뒤 다음의 값들을 넣어주시면 됩니다.

 

ECR Repository URL, NAME 정보

 

 

 

[ 3. 파이프라인 동작 확인 ]

 

모든 정보가 입력이 완료되었다면 master 브랜치에 push해줍니다.

 

push를 했다면 GitLab Repository의 좌측 CI/CD → Pipelines로 이동하여 다음과 같이 파이프라인이 동작 완료되었는지 확인해줍니다.

 

파이프라인 동작 확인

 

 

 

[ 4. ECR 이미지 업로드 확인 ]

 

위와 같이 파이프라인의 Stage가 성공적으로 수행되었다면 업로드되어야 하는 AWS ECR을 선택하여 이미지가 업로드되었는지 확인해줍니다.

 

업로드가 정상적으로 완료되었다면 다음과 같이 latest tag로 이미지가 업로드된 것을 확인할 수 있습니다.

 

ECR 이미지 업로드 확인

 

 

 

 

 

 

 

이상으로 ECS 사용하기 첫 번째인 GitLab으로 ECR에 이미지 push하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글