본문 바로가기
Infra, Cloud/AWS

[AWS] ECS 사용하기 (3) - GitLab으로 ECS 인스턴스에 배포하기

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

안녕하세요. J4J입니다.

 

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

 

 

 

이전 글

 

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

[AWS] ECS 사용하기 (2) - ECS 생성하여 배포하기 (with. EC2)

 

 

 

GitLab으로 ECS 인스턴스에 배포하는 방법 (1) - IAM 설정

 

[AWS] ECS 사용하기 (1) - GitLab으로 ECR에 이미지 push하기를 참고하시면 GitLab으로 ECR에 이미지 push하기 위해 기본적은 IAM 설정과 GitLab 설정들이 이루어져 있습니다.

 

이번 글은 위의 링크 설정에서 이어지는 추가 설정을 할 예정이니 글을 읽을 때 참고 부탁드립니다.

 

 

 

[ 1. IAM 접속 ]

 

IAM 접속

 

 

 

[ 2. 권한 적용 사용자 선택 ]

 

좌측 메뉴에서 사용자를 선택한 뒤 이전에 만들어둔 ecr-user에 권한 추가를 위해 사용자 이름을 클릭해줍니다.

 

사용자 선택

 

 

 

[ 3. 권한 추가 ]

 

권한 탭에 있는 권한 추가 버튼을 클릭해줍니다.

 

권한 추가

 

 

 

[ 4. 권한 정보 입력 ]

 

권한 정보를 입력하는 방법은 다양할 것입니다.

 

무엇을 선택하든 결과적으로 다음과 같이 AmazonECS_FullAccess 권한만 사용자에 추가되면 됩니다.

 

권한 정보 입력

 

 

반응형

 

 

GitLab으로 ECS 인스턴스에 배포하는 방법 (2) - GitLab 설정

 

이전 설정으로 인해 .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

 

 

 

[ 1. 배포할 ECS 정보 확인 ]

 

[AWS] ECS 사용하기 (2) - ECS 생성하여 배포하기 (with. EC2)를 참고하면 사용될 ECS에 대한 정보들을 확인할 수 있습니다.

 

확인해야 될 정보들은 배포할 ECS Cluster 이름과 업데이트할 ECS Service 이름입니다.

 

ECS에 접속하셔서 각자 생성한 ECS 정보를 다음과 같이 확인해주시면 됩니다.

 

ECS 정보 확인

 

 

 

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

 

이전에 이미 package stage를 통해 ECR에 docker 이미지를 push할 수 있도록 설정했습니다.

 

이번엔 deploy stage를 통해 ECR에 올라간 docker 이미지를 이용해 service가 업데이트되어 배포 또는 재 배포가 수행되도록 다음과 같이 설정하겠습니다.

 

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

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

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

deploy:   # JOB 이름
  # 사용될 이미지 설정
  image: docker:latest
  # stage 설정
  stage: deploy
  # service 설정 (설정한 image가 작업이 이루어지는 동안 실행되는 docker 이미지)
  services:
    - docker:dind
  # script가 실행 전 수행 될 script
  before_script:
    - apk add --no-cache curl jq python3 py3-pip
    - pip install awscli
  # 실행될 script 설정
  script:
    - aws ecs update-service --cluster $ECS_CLUSTER_NAME --service $ECS_SERVICE_NAME --force-new-deployment
  # JOB이 수행될 branch 설정 (설정된 branch에 push가 발생될 시 JOB 수행)
  only:
    - master

 

 

728x90

 

 

테스트

 

모든 설정이 완료되었다면 master branch에 push를 해줍니다.

 

그러면 CI/CD 파이프라인이 생성되어 동작하고 정상적으로 설정이 완료되었을 경우 다음과 같이 deploy까지 pass가 완료됩니다.

 

CI/CD 파이프라인 확인

 

 

 

그리고 ECS Service의 이벤트 탭을 확인해봅니다.

 

정상적으로 업데이트가 수행된다면 다음과 같이 새로운 task를 실행시키고 기존에 실행되었던 task를 중지시키는 걸 확인할 수 있습니다.

 

task 수행 확인

 

 

 

모든 게 잘 수행되었다면 다음과 같이 ALB DNS에 접속해서 배포가 잘 되었는지 확인하시면 됩니다.

 

배포 확인

 

 

 

 

 

 

 

이상으로 ECS 사용하기 세 번째인 GitLab으로 ECS 인스턴스에 배포하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글