To-Do

업무 분배


CI/CD Pipeline 구성
ECR에 도커 이미지를 빌드해 올리고, 그 이미지를 바탕으로 ECS 클러스터의 task를 교체하는 GitHub Actions workflow 파일을 작성하였다.
GitHub에서 ECS 배포 자동화를 해주는 Actions workflow 파일의 양식을 제공해 주기 때문에, 필요한 리소스들의 이름만 잘 맞춰서 적어준다면 큰 문제없이 CI/CD 파이프라인을 구축할 수 있다.

name: Deploy to Amazon ECR
on:
push:
branches:
- feature/ecs-race-record
pull_request:
branches:
- main
env:
AWS_REGION: ap-northeast-2
ECR_REPOSITORY: race
ECS_SERVICE: tf-ecs-service
ECS_CLUSTER: race_record_cluster
ECS_TASK_DEFINITION: ./aws/task-definition.json
CONTAINER_NAME: tf-race-record-task
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
working-directory: ./backend/race-backend
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . || true
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG || true
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
주의할 것은, 기존에 테라폼이나 AWS콘솔로 생성해두었던 ECS task의 JSON 파일을 불러와서 GitHub Actions가 읽을 수 있도록 해주어야 한다.
이 부분은 name: Fill in the new image ID in the Amazon ECS task definition의 과정을 보면 이해할 수 있다.
ECR에 이미지를 배포하고, 클러스터에 새로운 task를 돌리기 위해서 기존의 task 설정파일(JSON)을 읽고, 필요한 정보를 불러오고 image ID를 바꾸어준다.
배포가 되는 과정에서 태스크가 자꾸 중지된다면, 태스크의 로그를 살펴보는 것이 중요하다.
배포가 오랫동안 완료되지 않아 AWS 콘솔을 통해 클러스터를 살펴보니 태스크가 생성되고 중지되는 과정이 반복되고 있었고,
로그를 통해 이유를 살펴보니 기존에 불러온 태스크 설정 파일과 배포될 당시 서비스되고 있던 태스크의 포트번호가 달라서 health check 하는 과정이 완료되지 않았고, 그 때문에 오랜 시간 동안 태스크가 생성되고 중지되고 있었던 것이다.
다른 팀원과 작업하는 부분이 겹쳐 생긴 헤프닝으로, 즉시 에러 내용을 공유하고 같이 살펴보니 금방 문제를 찾을 수 있었고 빠르게 해결할 수 있었다.
Today...
팀원들의 작업속도가 꽤나 빨라서 정해진 일정보다 더 빨리 기본목표를 달성할 수 있을 것 같다.
아키텍처대로 구현이 끝난다면 조금 더 세세하게 다듬고, 어드밴스드로 남겨둔 과제들을 해볼 수 있을 것 같다.
'Codestates' 카테고리의 다른 글
| 코드스테이츠 DevOps #Final-Project Day9 (0) | 2023.06.22 |
|---|---|
| 코드스테이츠 DevOps #Final-Project Day7 (0) | 2023.06.20 |
| 코드스테이츠 DevOps #Final-Project Day4 (0) | 2023.06.15 |
| 코드스테이츠 DevOps #Final-Project Day3 (0) | 2023.06.14 |
| 코드스테이츠 DevOps #Final-Project Day2 (0) | 2023.06.13 |
