본문 바로가기
Notes/AWS & Cloud

AWS Chapter. 4

by seyoonagain 2024. 11. 29.

AWS


CI/CD

CI Continuous Integration
CD Continuous Deployment or Continuous Delivery

서비스를 배포한 후에 코드를 수정하게 될 일이 많은데
매번 수동적으로 빌드하고 이전 파일을 무효화한 뒤에 다시 업로드하는 번거로운 과정을 자동화하는 것을 뜻한다.

CI/CD 환경을 구축하는 이유

  1. 자동화를 통한 효율성 향상
  2. 코드 품질 보장
    CI를 통해 자동으로 코드를 테스트하여 버그와 오류를 발견할 수 있다.
    테스트 실패 시, 배포가 되지 않도록 방지한다.
  3. 빠른 피드백
    CI/CD 파이프라인은 코드 변경에 대한 각 단계별 빠른 피드백을 제공하여,
    문제 발생 시 즉시 수정이 가능하다.
    cf. 파이프라인: 코드 병합 - 빌드 - 테스트 - 배포의 흐름을 뜻한다.
  4. 지속적 배포를 통한 사용자 만족도 향상
    CD를 통해 새 기능 및 버그 수정 사항을 빠르고 안정적으로 사용자에게 제공 가능

CI/CD의 작동과정

  • CI
    • 개발자의 코드 푸시가 CI 파이프라인을 실행
    • 푸시된 코드 빌드
    • 코드 품질 검증
      • 성공 시 CD로 이어지고,
      • 실패 시 CI 중단되며 실패 결과를 개발자에 전달
  • CD
    • 배포 준비
      • Continuous Delivery vs. Continuous Deployment
        • Continuous Delivery: 사람이 배포를 승인
        • Continuous Deployment: 자동으로 배포
    • 지정된 환경에 파일 업로드, 즉 배포

Github Actions

CI/CD 환경을 구축할 수 있는 도구로,
빌드, 테스트, 배포의 작업을 실행하는 역할을 한다.

Github Actions를 사용한 CI/CD의 아키텍처와 흐름

  1. 개발자가 GitHub 저장소에 커밋 및 푸시
  2. GitHub Actions에 정의된 워크플로가 실행되며 CI/CD 파이프라인에서 코드 빌드 및 테스트 실행
  3. GitHub Actions에서 AWS S3로 배포

Github Actions로 CI/CD 구축하기

  1. AWS의 IAM 서비스를 통해 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 발급 받기
    (해당 인증키들을 통해 github actions에서 aws에 접근하여 배포를 할 수 있다.)

  2. Github 레포지토리에 인증키 등록하기

    1. Github 레포지토리의 Settings 클릭
    2. 좌측 메뉴의 Security의 Secrets and variables - actions 클릭
    3. Repository secrets에 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 등록하기
  3. 프로젝트 루트 폴더 내에 .github/workflows/deploy.yml 생성 (파일명은 수정 가능)

  4. yml 파일에 명령어 입력하기

    name: Deploy To S3 And Invalidate Cloudfront
    
    on:
      push:
        branches:
          - main
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
    
        steps:
          - name: Github Repository 파일 불러오기
            uses: actions/checkout@v4
    
          - name: 의존성 설치
            run: npm i
    
          - name: 빌드하기
            run: npm run build
    
          - name: AWS Resource에 접근할 수 있게 AWS 인증 설정
            uses: aws-actions/configure-aws-credentials@v4
            with:
              aws-region: ap-northeast-2
              aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
              aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    
          - name: S3 기존 파일 전체 삭제
            run: aws s3 rm --recursive s3://facebook-web-page-seyoon
    
          - name: 빌드된 파일을 S3에 업로드하기
            run: aws s3 cp ./dist s3://facebook-web-page-seyoon/ --recursive
    
          - name: Cloudfront 캐시 무효화하기
            run: aws cloudfront create-invalidation --distribution-id E3ODPCP192LLXD --paths "/*"
    1. name: workflow 이름
    2. on:\n\tpush:\n\t\tbranches:\n\t- main:: main 브랜치에 push 동작이 발생할 때 workflow를 실행하겠다.
    3. jobs:\n\tdeploy:\n\t\truns-on: unbuntu-latest: 우분투의 안정화된 최신 버전 환경에서 배포라는 작업을 실행하겠다.
    4. \t\tsteps:: workflow를 단계 별로 정의한다.
      • - name: 각 단계의 제목
      • uses: github marketplace에 있는 사용할 라이브러리
      • with: uses에서 쓰인 라이브러리를 사용하기 위해 필요한 파라미터 제공
      • run: 각 단계에서 실행할 리눅스 환경의 명령어
        • | 를 붙이고 시작하면 여러 줄의 명령어를 입력할 수 있다.
      • 실행 단계
        1. 푸시된 파일들 가져오기
        2. 의존성 파일 설치
        3. 빌드
        4. AWS 인증 키 입력
        5. S3 버킷에 있는 파일 전체 삭제
        6. 푸시된 파일들을 S3에 업로드
        7. S3에 연결된 CloudFront의 캐시를 무효화함으로써 최신 파일 적용시키기

'Notes > AWS & Cloud' 카테고리의 다른 글

AWS JAM 후기  (1) 2024.12.02
AWS Chapter. 5  (0) 2024.11.29
AWS Chapter. 3  (1) 2024.11.29
AWS Chapter. 2  (1) 2024.11.29
AWS Chapter. 1  (0) 2024.11.27