안녕하세요. 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 접속 ]
[ 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 정보를 다음과 같이 확인해주시면 됩니다.
[ 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
테스트
모든 설정이 완료되었다면 master branch에 push를 해줍니다.
그러면 CI/CD 파이프라인이 생성되어 동작하고 정상적으로 설정이 완료되었을 경우 다음과 같이 deploy까지 pass가 완료됩니다.
그리고 ECS Service의 이벤트 탭을 확인해봅니다.
정상적으로 업데이트가 수행된다면 다음과 같이 새로운 task를 실행시키고 기존에 실행되었던 task를 중지시키는 걸 확인할 수 있습니다.
모든 게 잘 수행되었다면 다음과 같이 ALB DNS에 접속해서 배포가 잘 되었는지 확인하시면 됩니다.
이상으로 ECS 사용하기 세 번째인 GitLab으로 ECS 인스턴스에 배포하는 방법에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Infra, Cloud > AWS' 카테고리의 다른 글
[AWS] ECS 사용하기 (4) - ECS 수정하기 (0) | 2022.12.05 |
---|---|
[AWS] ECS 사용하기 (5) - ECS 외부 인스턴스 추가하기 (0) | 2022.11.29 |
[AWS] ECS 사용하기 (2) - ECS 생성하여 배포하기 (with. EC2) (0) | 2022.11.09 |
[AWS] ECS 사용하기 (1) - GitLab으로 ECR에 이미지 push하기 (1) | 2022.11.05 |
[AWS] unable to start container process: container init was OOM-killed - ECS Task Container 에러 (0) | 2022.11.02 |
댓글