Backend/공통

Github Action을 통한 AWS CI/CD (3)

Dean83 2025. 11. 11. 16:38

https://dean83.tistory.com/370 에 이어서 ECR에 배포되어 있던 이미지를 이용하여 ECS를 구동하는 나머지 과정이다. 

중요한것이, github 에서 x86으로 구동되므로 AWS의 ECS도 x86에서 구동되도록 해야 한다. 

  • ECS 에 구동중인 task definition을 가져온다.
  • task definition 정보 중, 이미지 관련 정보를 수정한다
    • 업로드한 이미지를 사용하도록 정보를 수정한다.
  • 수정한 정보를 AWS에 업로드 한다.
  • 오류가 발생했을때, 알림을 발생한다 (슬랙 등)
    • 슬랙에서 설정하는 방법 등은 생략한다.
    • 굳이 슬랙 말고, 디스코드 등 다양한 방법이 가능하다.

 

아래는 도커 빌드 후 이미지를 ECR에 업로드 한 이후 명령들 이다.

      ......
      
      - name: Prework for ECS - task definition download
        run: |
          aws ecs describe-task-definition --task-definition ECS등록태스크이름 --query taskDefinition > task-definition.json

      - name : change definition
        id: render-task-def
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
            task-definition: task-definition.json
            container-name: json에_명시된_컨테이너이름
            image: ${{env.ECR_REG}}${{env.ECR_REPO}}:${{env.IMAGE_TAG}}

      - name: deploy changed task definition
        uses:  aws-actions/amazon-ecs-deploy-task-definition@v2
        with:
          task-definition: ${{steps.render-task-def.outputs.task-definition}}
          service: ECS에_등록된_서비스이름
          cluster: ECS에_등록된_클러스터이름
          wait-for-service-stability: true  #서비스 배포될때까지 대기

      - name: verify
        run: |
          echo "Verifying deployment"
          aws ecs describe-services --cluster ECS클러스터이름 --services ECS서비스이름
          
          
  #실패시 슬랙으로 알람 발송.        
  notify-slack:
    needs: build-and-push  #이 명칭은 최초 jobs 이후에 명시된 이름을 적어주면 된다.
    runs-on: ubuntu-latest
    if: failure()  # ❗ build-and-push가 실패했을 경우에만 실행

    steps:
      - name: Send Slack alert
        uses: slackapi/slack-github-action@v1.27.0
        with:
          payload: |
            {
              "text": ":x: *GitHub Actions Failed!*\nRepository: `${{ github.repository }}`\nWorkflow: `${{ github.workflow }}`\nBranch: `${{ github.ref_name }}`\nCommit: `${{ github.sha }}`\nAuthor: `${{ github.actor }}`\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Details>"
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}